nikolz (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: Пред. 1 ... 45 46 47 48 49 50 51 52 53 54 55 ... 72 След.
Очистка таблиц Quikа по OnCleanUp может вырубить скрипт. Как уберечься?
 
колбеки вызываются из терминала
Это вызов функций, которые расположены в скриптах
Следовательно колбек приходит из терминала  в VMLua.
Очистка таблиц Quikа по OnCleanUp может вырубить скрипт. Как уберечься?
 
Цитата
Sergey Gorokhov написал:
Цитата
Николай  Камынин   написал:
Тогда поясните откуда колбеки поступают в терминал?
Информация поступает с сервера, куда подключился терминал, это же очевидно.
Конечно, информация поступает с сервера, но не колбеки.
Разницу улавливаете?
Очистка таблиц Quikа по OnCleanUp может вырубить скрипт. Как уберечься?
 
Цитата
Sergey Gorokhov написал:
Цитата
Николай  Камынин   написал:
Как я понимаю, так как колбеки работают в одном потоке, то будет очередность.
Николай, читайте внимательней.
Речь про колбеки в сравнении с main.
Между колбеками и main очередности нет.
Цитата
Николай  Камынин   написал:
Что есть истина?
колбеки выполняются в том порядке как они поступили в терминал QUIK.
Если один колбек затормозит, то накопится очередь, которая потом исполнится в том порядке в каком они поступили.
Тогда поясните откуда колбеки поступают в терминал?
Спасибо.
Очистка таблиц Quikа по OnCleanUp может вырубить скрипт. Как уберечься?
 
Sergey Gorokhov
Добрый день,
Уточните относительно утверждения об очередности, что ее нет.
-----------------
Как я понимаю, так как колбеки работают в одном потоке, то будет очередность.
Полагаю, что их очередность либо определяется порядком появления их в скрипте,
либо заранее установленным порядком их обхода внутри терминала.
Что есть истина?
спасибо
Как запустить колбек не сразу?
 
или так:
Function OnParam(xxx)
if enabled then  
-- process callback logic
end
end

function main()

initialize_variables()
enabled =true

-- rest text
end
Size()
 
Цитата
Алексей написал:
Код
   7.2  Функции и глобальные переменные скрипта
индикатора
 .. .
 7.2 . 2  OnCalculate
 .. .
Формат вызова:
NUMBER v1 [, NUMBER vn] OnCalculate(NUMBER index)
Параметры:
• index – индекс свечки в источнике данных. Начинается с « 1 ».
Если значение vi не определено, то функция возвращает  nil  в качестве значения линии на интервале index.
 .. .
 7.2 . 4  Функции для доступа к источнику данных
• Функции для доступа к источнику данных O, H, L, C, V, T принимают в качестве параметра
индекс свечи и возвращают соответствующее значение в формате:
NUMBER  < название функции > (NUMBER index)
• Функция  Size  возвращает текущее количество свечек в источнике данных. Формат функции:
NUMBER  Size ()
  
Уважаемые разработчики QUIK!
Как мне кажется, большая часть пользователей, только начинающих изучать QLua, читая в документации слово "свечка", изначально для всех типов скриптов воспринимают это понятие в том смысле, как это определено для CreateDataSource. И лишь потратив впустую много времени и сил, осознают, что такое понимание "свечки" не имеет ничего общего с интервалами времени на диаграмме графика для скрипта индикатора.

Я уже неоднократно предлагал Вам не вводить пользователей в заблуждение в отношении index в OnCalculate и функции Size для скрипта индикатора, а четко указать в документации:

1. "7.2.2 OnCalculate
...
• index – номер интервала на шкале времени в окне диаграммы графика, для которого необходимо вычислить значение индикатора. Начинается с «1».
Если значение vi не определено, то функция  должна вернуть  nil в качестве значения линии на интервале index.
...
При перезапуске расчета индикатора Quik вызывает OnCalculate с index = 1 вне зависимости от того, определены или нет данные для инструмента для первого интервала диаграммы графика.
Можно описать ситуации, когда Quik "перезапускает" расчет индикатора.

2. "7.2.4 Функции для доступа к источнику данных
• Функции для доступа к источнику данных O, H, L, C, V, T принимают в качестве параметра индекс интервала на шкале времени в окне диаграммы графика и возвращают соответствующее для времени интервала значение инструмента, если оно определено, в формате:
NUMBER <название функции>(NUMBER index).
Определить имеются ли данные инструмента для указанного интервала можно вызвав функцию CandleExist. Если данные инструмента для указанного интервала отсутствуют, то функции O, H, L, C, V
возвращают «nil», а функция T – время указанного интервала.

• Функция Size возвращает количество интервалов на шкале времени, используемых для отображения в окне диаграммы графика, с учетом пустых интервалов."

"Интервал на шкале времени диаграммы графика" можно "обозвать" как-то по-другому, например, "временн  о  й интервал диаграммы графика" или как-то еще. Но надо четко развести понятия номер свечки инструмента и номер интервала.
Вы все правильно написали, за исключением одного.
Вы не дали определение свечки.
Прикольно то, что многие начинающие и не только не понимают и это.
Все дело в том, что этим словом называют графическое изображение четырех индикаторов.
Поэтому вполне логично, что в рамках вашего изложения свечка - это индикатор (даже четыре).
Кроме того, индекс преобразуется во время через понятие интервал.
Таким образом, в Вашем определении время это синоним индекса.
-------------------------
Возможно не стоит быть столь категоричным и пытаться дать строгое и однозначное определение понятий на рынках,
т к большинство которое начинает или уже нет это вообще либо не читает, либо не поймет.
----------------------
Поэтому оставьте все как есть.
Size()
 
Цитата
s_mike@rambler.ru написал:
Цитата
Николай  Камынин   написал:
сравните время свечи и время сервера (биржи,  брокера, точного времени - выбрать любое)
с часовыми поясами будут проблемы.

в квике есть настройка. Что то типа показывать время в часовом поясе биржи. Понятное дело, узнать это нельзя - "многахочите"

да и рассинхронизация в начале каждой свечи будет по любому в каждом из приведенных случаев - ещё больше геморроя.
1) если у Вас тайм меньше часа то пояса вообще не нужны.
2) вычитайте из времени время начала торгов и пояса вообще не нужны.
------------------------
Size()
 
сравните время свечи и время сервера (биржи,  брокера, точного времени - выбрать любое)
Подвешивание info.exe через механизм межпоточного локинга
 
Делюсь опытом.
Когда я делал синхронизацию потокв в QLUA, то просто написал DLL для решения данной проблемы.
В результате я получил
1) Синхронизацию различных скриптов между собой, т е я синхронизировал майн в различных скриптах.
Это позволило использовать всего по одному вызову каждого колбека QLua вне зависимости от числа роботов (скриптов)
Т е у меня есть один скрит для работы со стаканами один для работы с заявками и  т д
и куда скриптов торговых стратегий(роботов) в которые не требуется вызывать все колбеки QLUA.
Вполне удобное решение, если разработчики КВИК надумают его сделать, то проблемы с синхронизацией потоков и множественными копиями колбеков исчезнут.  
Аналог функции eval для lua, Аналог функции eval для lua
 
если надо очень быстро, то пишите на СИ dll.
Аналог функции eval для lua, Аналог функции eval для lua
 
надо делать не парсер а интерпретатор и будет он  как минимум на порядок меньше, чем 1000 строк.
Если строка динамически меняется, то решение на джава не работает и единственное решение на любом языка - это интерпретатор строки.
Как посмотреть цену последней своей заявки
 
документация  QLUA
Функции для обращения к строкам произвольных таблиц QUIK
Таблица заявок
Прочитайте в ней последнюю строку
Криптовалюты/фьючерсы на криптовалюты и QUIK, что будет в будущем
 
Квик - это терминал для подачи поручений брокеру и УСЕ.
Криптовалюты/фьючерсы на криптовалюты и QUIK, что будет в будущем
 
Цитата
QuikUser2017 написал:
В ближайшие месяцы (или даже дни) американские биржи начнут торговать фьючерсами на биткоин. Готов ли QUIK к этому?
А какая для квика разница, чем торгует биржа?
вопрос по индикаторам
 
Цитата
Let_it_go написал:


Линии на графике являются индикаторами.
Когда линия находится сильно высоко от графика, к примеру на 40% выше цены, я бы хотел её не рисовать. Должен быть пропуск, индикатор не рисуется. Но это будет не красиво, потому что КВИК попытается все же соединить последнее значение перед дыркой и первое значение после дырки.
Можно ли этого избежать?
Можно ли одну линию сделать разноцветной? один участок красный, другой, например, зелёный?
можно
вот пример:

В документации отсутствует описание параметра функции
 
в документации на квик.
Раздел 8 описание QPILE
Функции для получения значений Таблицы текущих
торгов
Не отправляет транзакцию на сервер
 
Цитата
Алексей написал:
Здравствуйте, скрипт не хочет отправлять транзакцию на сервер, скрипт запускается, работает, но нечего не происходит, запуск функции для проверки записан в OnInit код транзакции ниже
Код
   function   test ()



 local  Transaction = {

      
    [ 'TRANS_ID' ]   =  tostring(trans_id),    -- Номер транзакции 
    [ 'ACCOUNT' ]    =  TorShet,               -- Код счета 
    [ 'CLASSCODE' ]  =  KodClass,            -- Код класса 
    [ 'SECCODE' ]    =  InstrumentKod,              -- Код инструмента 
    [ 'ACTION' ]     =   'NEW_ORDER' ,           -- Тип транзакции ('NEW_ORDER' - новая заявка) 
    [ 'OPERATION' ]  =   'B' ,                   -- Операция ('B' - buy, или 'S' - sell) 
    [ 'TYPE' ]       =   'L' ,                   -- Тип ('L' - лимитированная, 'M' - рыночная) 
    [ 'QUANTITY' ]   =   '1' ,                   -- Количество 
    [ 'PRICE' ]      =  tostring(tekPrice)    -- Цена 
}


 local  Res  =   sendTransaction (Transaction)

 end 
  
функция  OnInit вызывается один раз и как правило при ее работе еще нет соединения с сервером.
В этой функции надо выполнять инициализацию переменных и загрузку библиотек.
-----------------------------------
Торговые действия надо исполнять либо в main либо в колбеках.
Помогите с математикой
 
Цитата
Let_it_go написал:
Цитата
Constantin   написал:
Надо конструкцию else освоить.
Зачем?
Код в моей версии понятный, элегантный и не громоздкий (всего 3 строчки).
Если использовать else, он был бы намного объёмнее.
Очевидно , что Вы не только в математике но и в программировании ...
Ваш код -это исполнение if всегда три раза, а с else  от 1 до 3 т е быстрее.
Индикатор на индикатор
 
Для начала -  возьмите и бросьте.
Синхронизация 2 графиков
 
Цитата
rinat написал:
Цитата
Николай  Камынин   написал:
На графике свеча всегда отобразится на значении 00 но это отображение будет сделано в момент появления первой сделки после 00.
сие очевидно
Цитата
Николай  Камынин   написал:
Конец свечи тоже отобразится в момент 00
а вот тут - навряд ли если времена свечей заявлены по открытию, но тогда это противоречит вашему первому параметру - по началу в 00
скорее в качестве значения Close будет последняя сделка до времени 00 начала следующей свечи
Цитата
Николай  Камынин   написал:
Т е как я написал ранее свечи всегда отображаюся с запаздыванием но это запаздывание не показано на графиках.
показаны, но не отображаются : звучит вполне тафталогично
Цитата
Николай  Камынин   написал:
Поэтому закрывшиеся свчи всегда точно синхронизированы на графиках по времени точно в 00.
это в случае если свечи формируются по времени окончания периода.
и это уже воля авторов, как их рисовать
но начинаться в 00 и заканчивать в 00, перемешивая моменты для соседних, навряд ли правильно.
Время свечи задает всемирное время.
Я вообще-то не гадаю, а объясняю Вам как формируются свечи.
Свеча формируется от 00 часов 00 минут 00 секунд по Гринвичу.
алгоритм следующий. Время открытия свечи - оно же время закрытия всегда точно равно всемирному а квант дискретности равен тайму.
Т е время свечи никаким образом не синхронизировано с временем сделок.
Именно для этого и придуманы свечи чтобы уйти от тиков к реальным часам.
Т е свеча это значение четырех индикаторов, взятых на интервале свечи.
Цена открытия - это цена сделки которая была первой после 00 для новой свечи
Цена закрытия - это цена сделки которая была последней после открытия этой свечи и до времени 00 - открытия следующей
т е цена закрытия предыдущей свечи и цена открытия следующей - это цены двух различных сделок которые совершены в различное время но стоят рядом вокруг 00.
Синхронизация 2 графиков
 
Цитата
rinat написал:
Цитата
валерий   написал:
Если два графика расположены в двух областях одной диаграммы, то нужно ли бары обязательно синхронизировать по времени баров или можно быть уверенным, что если индексы совпадают, то и время тоже?
если брать вопрос шире, но проще, то:
- бары, свечи и любые другие визуальные способы представления статистических данных - это просто способ визуализации, удобный для восприятия человеком.
- у этих способов есть правила, по которым они реализуются: время начала - момент когда надо нарисовать Open, время окончания - Close, между этими событиями нарисовать Hi & Lo и т.д.
В наше время в ядре биржи происходят сотни сделок в секунду, но вовсе не факт, что для начала каждой минуты во время 00.000 сек будет существовать сделка для отрисовки начала свечи в точно заданное время
Поэтому любая "графика" зависит от авторов: при соблюдении правил два чарта будут синхронно нарисованы, тк они формируются по единому правилу - это теоретически.
Практически возможен некий программно-аппаратный лаг при рендеринге разных оконных фреймов, который может быть микросекунды - для текущей свечи.
Если в квик окно обновляется в пределах 1-0.5 сек, то это не имеет значения даже для текущей свечки и не повлияет на ваши входные данные и выходные сигналы соответственно.
(При использовании индикатора-упростителя из 80-х гг прошлого века - свечи, бары и т. д.)
На графике свеча всегда отобразится на значении 00 но это отображение будет сделано в момент появления первой сделки после 00.
Конец свечи тоже отобразится в момент 00 но последняя сделка при этом может быть и за полчаса до 00, если это тайм час.
Т е как я написал ранее свечи всегда отображаюся с запаздыванием но это запаздывание не показано на графиках. Поэтому закрывшиеся свчи всегда точно синхронизированы на графиках по времени точно в 00.
Синхронизация 2 графиков
 
Цитата
валерий написал:
Понятно, что свечи на одном графике синхронизированы. Но можно ли быть уверенным, что и индексы у свечек с одинаковым временем всегда одинаковые (тогда можно искать соответствующую свечу на втором графике по индексу, а не таймстампу)? Мало ли как Арка их считает... Хочу знать наверняка от авторов.
Если я Вас правильно понял, то речь идет о различных инструментах(бумагах)
Свечи у них синхронизированы по началу тайма. Но возможно отсутствие свечи при отсутствии сделок в этом интервале для данного инструмента.
Поэтому просто по номеру свечи не синхронизированы.
Синхронизация 2 графиков
 
Цитата
валерий написал:
Если два графика расположены в двух областях одной диаграммы, то нужно ли бары обязательно синхронизировать по времени баров или можно быть уверенным, что если индексы совпадают, то и время тоже?
Не свосем понятно что и с чем хотите синхронизировать.
На графиках свечи всегда отображаются синхронизированными ,
но в действительности свечи - это индикаторы экстремумов на заданном тайме.
Тайм синхронизирован.
Свечи это индикаторы, которые считаются всегда с запаздыванием. .
Среднеквадратичное отклонение за период, Среднеквадратичное отклонение за период
 
для справки:
Для расчета такого индикатора циклы не требуются.
Tradedate
 
Цитата
s_mike@rambler.ru написал:
s_mike@rambler.ru
Михаил,а чем не устраивает дата торгов из ТТП?
Мгновенная отмена заявки
 
есть два варианта ускорить прием ответа.
1) отказаться от onParam
2) во всех колбеках поставить запуск новых потоков и выход из колбека
В этом случае будет максимально быстро выходить из OnParam и др колбеков.
Мгновенная отмена заявки
 
Цитата
Александр Правилов написал:
Николай  Камынин  , в этом то самая и большая проблема, в невозможности получить ответ, пока не закончится OnParam или не подождать в OnParam, к примеру через event.timer или event.pull, могу ошибаться. Ну да ладно, что-нибудь придумаю, благо для текущего алгоритма, скорость не является приоритетной.
Вы очевидно не понимаете, что это в принципе невозможно в КВИК, так как принятый ответ обрабатывается в том же потоке, где работает функция OnParam. т е ядро процессора (поток) занят этой функцией и обработка новых данных будет после ее завершения. а других потоков для обработки новых данных в КВИКЕ не выделяется т е это так сделан КВИК.
Поэтому, если очень хочется, то надо отказываться от КВИК и подключаться прямо к бирже.
Мгновенная отмена заявки
 
Пардон, опечатка.
Более того, ответ на свою транзакцию Вы будете получать в среднем не ранее чем через  0.1 -0.2 сек.
А это очень даже не мгновенно.
Мгновенная отмена заявки
 
Более того, ответ на свою транзакцию Вы будете получать в среднем не ранее чем через  0.1 -0.2 мс.
А это очень даже не мгновенно.
Мгновенная отмена заявки
 
Цитата
Александр Правилов написал:
Николай  Камынин  ,Да дело не в таблице состояний, это не то. Этот способ режет скорость. После отправки транзакции в OnParam есть ещё код и пока этот код не выполнится, не придет ответ от OnTransReply и OnOrder, а надо получить ответы еще при выполнении кода в OnParam.
Пока исполняется OnParam никакие новые данные с сервера не могут быть обработаны.
Поэтому НЕВОЗМОЖНО находясь в onParam получить ответ OnTransReply и OnOrder,
Полагаю Вы это поняли.
----------------------------
Мгновенная отмена заявки
 
Цитата
Александр Правилов написал:
Николай  Камынин  , если с кодировкой что-то не то, почему остальной код работает? Николая, подскажите кучочек кода, как перевести в состояние ожидания ответа по заявке?
Общий подход работы робота на основе событийной модели следующий.
------------------------
В начале описываете таблицу возможных состояний робота.
Например у меня есть  таблица состояния заявок, таблица состояния стоп-заявок ну и т д.
Эти таблицы в отличии от таблиц квика содержат лишь активные заявки.
-------------------------------------------
Когда посылаете заявку то пишите в конец таблицы запись о том что послали заявку в систему
Когда собираетесь послать заявку то проверяете состояние последней записи в таблице состояния заявок
Если там указано что заявка отправлена брокеру ( т е еще нет подтверждения что она на бирже) то пропускаете отправку новой.
-----------------------------
Ну и т д
 
Мгновенная отмена заявки
 
Цитата
Александр Правилов написал:
Николай  Камынин  , не согласен с вами, колбэками управлять нельзя, они приходят как приходят, посмотрите мой пример выше, как разрулить эту ситуацию?

Sergey Gorokhov  ,  Сергей, подскажите другой момент, что то не получается получить таблицу заявок, в чем может быть ошибка?

в row=getItem("orders",i) пишет - improperly formatted XML data
Код
    for  i =  1 , getNumberOf ( "orders" )  do 
   
         local  row =  getItem ( "orders" ,i)
    if  row ~ =   nil   and  row[sec_code] =  = sec  then 

          local  trid,ms  =  killOrder(row[order_num],sec,class)
              if  trid ~ =   nil   then 
                  tbl: SetValue (line_count_table[sec],'ÅñòüÇàÿâêà',  string.format ( "Cancel" ))
                  tbl: SetValue (line_count_table[sec],'ÖåíàÇàÿâêè',  string.format ( "0" ))
              end 
    end 
 end 
  
исправьте кодировку редактора.
Мгновенная отмена заявки
 
Цитата
Александр Правилов написал:
Николай  Камынин  , не согласен с вами, колбэками управлять нельзя, они приходят как приходят, посмотрите мой пример выше, как разрулить эту ситуацию?
А где Я Вам говорил, что колбеками надо управлять(ужас какой-то).
Колбеки - это функции, которые вызываются системой ( в данном случае тарминалом КВИК) при наступлении определенного события.
Т е они сообщают вам о событиях в КВИКЕ и ВСЕ.
---------------------
Когда робот отсылает заявку - то он переходит из состояния - "послать" в состояние - "ждать ответа".
А у Вас нет этих состояний т е Вашему роботу все по... Вот он у вас и шлет кучу заявок и ничего не ждет.
Ну как-то так получается...
Мгновенная отмена заявки
 
Цитата
Александр Правилов написал:
Цитата
Николай  Камынин   написал:
Надо строить робота на основе событийной модели, тогда таких проблем не будет.
Т е робот - это конечный автомат, который полностью описывается набором его состояний.
Поэтому надо фиксировать эти состояния и программировать условия перехода из одного состояния в другое.
Я с Вами полностью согласен, но в lua нет событийности, всё зависит от стека функций об.вызова, как они придут и потока всего два и основной стек находится в одном потоке.
Именно библиотека QLUA и дает Вам механизм событий в виде колбеков, что принципиально отличает ее от QPILE.
Состояние же робота необходимо хранить в таблице состояний - это уже особенности алгоритма. Луа позволяет все это сделать.
Мгновенная отмена заявки
 
Надо строить робота на основе событийной модели, тогда таких проблем не будет.
Т е робот - это конечный автомат, который полностью описывается набором его состояний.
Поэтому надо фиксировать эти состояния и программировать условия перехода из одного состояния в другое.
Запись в текстовый файл, Нужно дописать данные в определенное место файла.
 
Цитата
Иван Ру написал:
Цитата
Николай  Камынин   написал:
Цитата
Иван Ру   написал:
Есть открытый текстовый файл, скажем, длинной в 100 строк.
Необходимо дописать данные, скажем, в 79 строку (номер известен). Возможно ли такое средствами Lua, есть ли у кого пример реализации подобной функции?
Вашу задачу  можно так:
1) Все записи делаем одинаковой длины, например 128 байт
2) Если запись короче 128 то добиваем ее либо пробелом либо нулями.
3) Если надо дописать, то ищем изменяемую запись , читаем ее, добавляем и пишем на свое место.
Возможно мы друг друга недопоняли. Записи я делаю в csv (текстовый) файл с разделителями в виде ";". Затем я его читаю в эксель. По-сути надо добавить дополнительные элементы данных в отдельные строки, де-факто они всегда оказываются ближе к концу файла.
Кстати, попутный вопрос. Если у меня файл находится в открытом состоянии в режиме чтения-записи и его размер велик (скажем 100 мб.) -- отнимает ли это соответствующий объем оперативной памяти? Если да - как этого избежать? Только закрытием файла и повторным открытием для записи?
память под файлы расходуется, но это не 100 мб и беспокоится не стоит.
Попробую объяснить про дозапись.
Есть два режима записи - бинарный и текстовый.
В текстовом инфа пишется в файл последовательно запись за записью . Каждая строка пишется в формате ASCIZ, т е признак конца строки - это ноль.
поэтому просто добавить в конец  какой- либо, не последней, строки в файле  невозможно, так как нет места для этого.
Поэтому я Вам предложил
сделать строки одинаковыми по длине - это ускорит поиск нужной строки
и создать место для дозаписи. Т е Вы создаете пустое место на диске и пишите в это место .
----------------------------
Если Вы пишите в файл лишь для передачи в Excel, то это можно делать через протокол Dynamic Data Exchange (DDE)  сразу в Excel.
Но это требует знаний в написании DLL на СИ для Lua.
Запись в текстовый файл, Нужно дописать данные в определенное место файла.
 
Цитата
Imersio Arrigo написал:
Цитата
Николай  Камынин   написал:
3) Если надо дописать, то ищем изменяемую запись , читаем ее, добавляем и пишем на свое место.
Ну так-то обычно все данные  после места записи обрезаются.
Нельзя просто так взять и вставить запись внутрь файла ;)

Отличным  решением был бы например маппинг файла в память, но, боюсь на луа это не доступно.
Цитата
Иван Ру   написал:
Если у меня файл находится в открытом состоянии в режиме чтения-записи и его размер велик (скажем 100 мб.) -- отнимает ли это соответствующий объем оперативной памяти?
Нет, не отнимает.
Если будете правильно писать то данные не будут обрезаться.
А вот память под файлы расходуется. т е "отнимает"
Более того, если Вы не делаете выгрузку, то данные будут в памяти а не на диске.
Считывание и установка настроек Quik с помощью Lua, Возможна ли?
 
Полагаю, что у Вас установлен флаг  "Исходя из настроек открытых пользователем таблиц"
Надо установить флаг "С учетом настроек, выбранных через пункт меню "Система/Заказ данных/Поток котировок"
в "настройки клиентского места" в окне "Получение данных"
Запись в текстовый файл, Нужно дописать данные в определенное место файла.
 
Цитата
Иван Ру написал:
Есть открытый текстовый файл, скажем, длинной в 100 строк.
Необходимо дописать данные, скажем, в 79 строку (номер известен). Возможно ли такое средствами Lua, есть ли у кого пример реализации подобной функции?
Вашу задачу  можно так:
1) Все записи делаем одинаковой длины, например 128 байт
2) Если запись короче 128 то добиваем ее либо пробелом либо нулями.
3) Если надо дописать, то ищем изменяемую запись , читаем ее, добавляем и пишем на свое место.
 
Индикатор АС - числа берутся из ниоткуда
 
Такой вопрос лучше задавать знатокам из  " Что,Где, Когда?"
Они точно что-нибудь придумают.
Загрузка своих данных в Quik, Требуется создать индикатор который на основании еxel таблицы будет формировать гистограмма с положительных и отрицательный значениями
 
если взять готовый суп и изменить в нем исходные продукты, то получится ...о.
Теоретическая цена, греки
 
Цитата
Let_it_go написал:
Это с сайта ММВБ

Из ваших ответов стало понятно как считать N.
А как считать волатильность?
Ищите все на сайте ммвб, а не спрашивайте на форуме.
Потому, что Вам надо не ссылки на математику для начинающих, а методики расчета на бирже и чтобы у Вас все совпала с биржей.
Поэтому бесплатных решений нет, а написать решения может тот, кто не задает подобные вопросы и профессионально пишет софт.
Успехов в изучении программирования.
Теоретическая цена, греки
 
Цитата
SDL написал:
Цитата
Николай  Камынин   написал:
Но очень сомневаюсь, что Вы ее сможете запрограммировать.
Да ладно. Самое хитрое там - функция нормального распределения N(x). Но нам в помощь численные методы. Если интересна теория:
1. Hart, J.F. (1968). Computer Approximations. Наверно, наиболее цитируемая книга по численным методам.
2. Krishnamoorthy K. Handbook of Statistical Distributions with Applications (2006). Это, в частности, в области теории вероятностей. В ней надо смотреть раздел "10.10. Computing the Distribution Function".

Ну и код функции N(x) по этому методу, перенесенный на Луа. Точность 14 знаков этого приближения устроит?
Код
   function   NormCDF (x)
    if  type(x) ~ =   "number"   then   return   end 
    local  z  =   math.abs (x)
    local  p

    if  z  <   7   then 
      p  =   math.exp ( - z  *  z /  2 )  * 
         ((((((( 2.49338129315143e-02   *  z  +   0.604737992686704 )  *  z  +   6.81311678753268 )  *  z  + 
          46.0649519338751 )  *  z  +   202.102090717023 )  *  z  +   580.109897562909 )  *  z  + 
          1024.60809538334 )  *  z  +   913.167442114756 ) /
         (((((((( 0.0625   *  z  +   1.51584331855598 )  *  z  +   17.1406995062578 )  *  z  + 
          116.979524577666 )  *  z  +   523.596091947383 )  *  z  +   1566.10462582845 )  *  z  + 
          3044.77121163622 )  *  z  +   3506.42059774909 )  *  z  +   1826.33488422951 )
    elseif  z  <   32   then 
      p  =   math.exp ( - z  *  z /  2 ) /  2.506628274631  /
         (z  +   1  / (z  +   2  / (z  +   3  / (z  +   4  / (z  +   5  / (z  +   6  / (z  +   7 )))))))
    else 
      p  =   0 
    end 

    return  (x  >   0 )  and  ( 1   -  p)  or  p
 end 
  

Не так страшно? С остальным в формулах Блэка-Шоулза наверно справитесь?
Вот, например, расчет дельты колл опциона:
Код
   function   CallDelta (f, s, v, t)
    return  NormCDF(( math.log (f / s)  +  v^ 2   *  t /  2 ) / (v  *  t^ 0.5 ))
 end 
  
Ну,ну...
-------------------------------
"..не сумлевайтесь, милые:
Коль что у вас не ладится — ну, там, не тот аффект,
— Мы мигом к вам заявимся с лопатами и с вилами,
Денёчек покумекаем — и выправим дефект!"
Теоретическая цена, греки
 
Поищите на сайте ммвб.
Когда-то там находил.
Но очень сомневаюсь, что Вы ее сможете запрограммировать.
Сомневаюсь, что есть бесплатная прога.
------------------------
Ищущий да обрящет.
OnTransReply и sendTransaction, Не вызывается OnTransReply
 
Надо прочитать документацию:
sendTransaction
Функция предназначена для отправки транзакций в торговую систему.  
Формат вызова:  
STRING result sendTransaction(TABLE transaction) Параметры:  
  • result – строка, содержащая текст ошибки, если она  случилась при обработке транзакции;
Функция на основе message
 
Код
function ms (value)
   if type(value)~="table" then
      message (""..tostring(value),1)
      
   else
      for k,v in pairs(value) do
         message (tostring(k).." "..tostring(v),1)
      end
   end   
end
Распределенность обработки вызовов OnOrder
 
поделюсь своим решением.
обрабатываю в колбеке.
В таблице пассивные заявки удаляю. в колбеке обрабатываю все приходы и мне безразлично сколько их.
-----------------
обрабатывал и в майн.
===================
Последний вариант - один колбек на все скрипты.
т е роботов много, но колбеков по одному для каждого вида (заявки, сделки, стаканы и т д)
Распределенность обработки вызовов OnOrder
 
для колбеков поток один - это точно.
но возможно, что Вы работаете с таблицами в main. Тогда будет два потока.
-----------------------------------------
проблема может быть в Вашем алгоритме обработки.
Чтобы ответить точно, надо видеть как (вернее где)  Вы обрабатываете сигналы заявки.
Советник
 
Цитата
Роман Родников написал:
Здравствуйте.
Я хочу создать советника на Qlua, который на графике цены будет проставлять метки в зависимости от условий в скрипте.И у меня, как у новичка, есть несколько вопросов:
1.Нужно ли создавать отдельную область, где будет график цены, или можно будет как-то добавить свой скрипт как индикатор в Quik к штатному графику Price и получать на нем соответствующие метки?
2.Есть набор стандартных индикаторов в Qlua, они в папке INDICATORS. Обязательно ли вызывать стандартный индикатор строкой
dofile ("C:\INDICATORS\MACD.lua"), или если индикатор стандартный, то можно его и так вызвать MACD ( параметр1, параметр2,...параметрN)?
3. Есть ли у кого-то шаблон такого советника, с которого можно было-бы начать?
Попробую объяснить сущность QLUA.
QLUA - это библиотека функций обращения через терминал QUIK к брокеру, написанная для стандартной VM LUA.
--------------------------------
Чтобы написать советник надо.
----------------------
1) Изучить язык программирования луа. Это можно сделать без квика.
------------------------------
2) Изучить функции библиотеки QLUA.
---------------------------
3) Написать программу на луа с использованием библиотеки qLUA..
Локальные переменные
 
Цитата
Иван Джеммер написал:
В функцию в качестве аргумента приходит таблица data = { 'a', 'b', 'c', 'd', 'e' }
Для удобства я делаю следующее:

local var1 = data[1]
local var2 = data[2]
local var3 = data[3]
local var4 = data[4]
local var5 = data[5]

Вопрос состоит в следующем: при выходе из этой функции, что случится с переменными  var1-5  и таблицей  data ? Будут ли они храниться в окружении данной функции или уничтожатся? Если  data  будут храниться, то не будет ли расточительством делать переменные  var1-5 ? (т.к. это по сути копии таблицы  data ). Просто мне удобно использовать  var1-5  (т.к. легче обращаться к значениям по имени переменной, а не по индексу в в таблице  data ), но в то же время опасаюсь, что это будет лишним засорением памяти.


// Появилась ещё идея, после ввода переменных  var1-5  выполнить код:  data  = nil. Что скажете?
обращение через локальные переменные и через индексные в массиве отличается тем, что локальные - это копия элементов, а индексное значение - это указатель.
Если Вы в функции сделаете так:
var1=0
то привыходе из функцию таблица data не изменится
а если сделать так
data[1]=0
то при выходе в таблице первый элемент будет равен 0.
---------------------------
Что касается затрат памяти, то после завершения вызова, освободившуюся память соберет сборщик мусора.
---------------------------
Если Вы много раз обращаетесь к данным внутри функции, то использование локальных переменных будет быстрее.
-------------------------
Резюме: Делайте как удобно.
Страницы: Пред. 1 ... 45 46 47 48 49 50 51 52 53 54 55 ... 72 След.
Наверх