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

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

Страницы: 1
Подгрузка старых данных при переподключении
 
Цитата
Sergey Gorokhov написал:
Здравствуйте,
Приведите исходные коды скрипта
Выслал код на quiksupport@arqatech.com.
Спасибо
Подгрузка старых данных при переподключении
 
Добрый день!
У меня система работает на данных 60 мин. Данные обрабатываются по колбэку:
ds[1]:SetUpdateCallback(function(index) cb(index,v.idx, v.classcode,k) end) , в общем все стандартно. В функции рассчитываются максимумы и минимумы за определенные периоды. Заметил, что при переподключении (вследствие пропадания инета или еще почему-то), когда оно происходит между часами (т е в тот момент, когда окончился один час и начался другой и должен идти перерасчет), в максимумы и минимумы присваиваются абсолютно "левые" значения, которые не имеют отношения к текущей цене. При более тщательном рассмотрении можно заметить, что это какие-то давние цены (чуть ли не прошлого года). Еще раз подчеркну, что это все происходит в те неудачные моменты, когда квик переподключается к серверу в момент поступления новой свечки.  В остальном все работает отлично.
В самой функции, которая вызывается коллбэком, есть цикл, копающий "в глубь" по данным для расчета индикаторов. Но факт остается фактом, при переподключении  между часами (между дискретами по времени, равными таймфремйму) система "ловит" старые данные. Как это обойти, или в чем ошибка?
Спасибо  
Синхронизация данных от SetUpdateCallback
 
Суть такова: из main дергаются данные по доллару и евро, коллбэк cb их обрабатывает.
как только пришла новая свеча (1 час масштаб), я выравниваю время в коллбеке по доллару и евро, чтобы он не перерасчитывался многократно полностью. Для этого стоит условие на проверку выравнивания времени (предыдущее время сравнивается с текущим).
Однако, как только время по обоим инструментам выравнивается, кусок кода, который стоит после условных блоков с обработкой данных от инструментов, не исполняется, т к уже срабатывает return, стоящий в начале коллбэка. Т. е. получается ситуация, что время выравнялось, но код до конца не успел исполниться, т к произошел новый вызов, который делает выход из коллбека до того, как успел отработать последний кусок кода.

function main()
  ............
   local i = 1
   for k,v in pairs(shares) do
      ds[i],er= CreateDataSource(v.classcode,k, INTERVAL_H1)
      v.idx = i
      if er==nil then
         ds[i]:SetUpdateCallback(function(index) cb(index,v.idx, v.classcode,k) end)
         toLog(log,"ds added i="..i.." classcode:"..v.classcode.." seccode:"..k)
         i=i+1
      end
      if er~=nil then
         Log(log,"er="..er)
      end
   end

   while is_run do
       sleep(1000)
   end

..................
end



function cb( index , ds_index, classcode, seccode)

   local t = ds[ds_index]:T(index-1)
   local h = t.hour
   local curhms = h*100

   if (curhms==oldt_si and curhms==oldt_eu ) then return end

   if (ds_index==1 and curhms~=oldt_eu) then
           oldt_eu=curhms
...........................
    end

   if (ds_index==2 and curhms~=oldt_si) then
           oldt_si=curhms
...........................
    end
--этот кусок кода не исполняется
if (curhms==oldt_si and curhms==oldt_eu and data.eq==0 and GetEquity==true) then
      ..............
       
   end

end
   
Синхронизация данных от SetUpdateCallback
 
Попробую еще раз) Очередной вызов коллбэка происходит тогда,  когда еще не закончились обрабатываться предыдущие данные, которые его вызвали. как с этим бороться?
Синхронизация данных от SetUpdateCallback
 
Добрый день!
Следующая ситуация: я получаю данные через SetUpdateCallback(function(index) cb(index,v.idx, v.classcode,k) end), там два инструмента. Данные приходят с разными задержками (в смысле срабатывания котировок). Это приводит к тому, что определенный кусок кода в функции cb (index,v.idx, v.classcode,k) у меня не исполняется, т к новые данные уже успели изменить значения переменных, но сама ф-я до конца не исполнилась. Наверняка есть локеры, которые не позволяют срабатывать коллбэку, пока не обработались старые значения. Наверное это не слишком оптимально, с точки зрения быстродействия, но в моем случае это не критично...
Спасибо.
ЗЫ заранее прошу прощения, если эта тема уже обсуждалась, т к проблема актуальная. но я не нашел.
Автоматический запуск скрипта при запуске QUIK
 
Имеется в виду, если квик полностью перегружается, по разным причинам. Например, перегрузилась операционка незапланированно.
Автоматический запуск скрипта при запуске QUIK
 
Добрый день!

Есть ли возможность задать квику натройку, чтобы он при своем запуске запускал также и луа-скрипт?
Спасибо.
Индикатор с метками на графике
 
Цитата
s_mike@rambler.ru пишет:
Цитата
Максим пишет:
Цитата
Максим пишет:
Цитата
s_mike@rambler.ru пишет:
1. Поставить метку можно только на том времени, на котором существует свеча.
2. Раскрашивать свечи невозможно.
1.Т. е. метки расставить без привязки ко времени и, соответственно, к таймфрейму - нельзя. Т. е таймфрейм задается жестко. В общем, логично)
2. Жаль. Спасибо
Дезинформировал себя и, возможно, не только. В общем, к таймфрейму привязки здесь нет - при его изменении пересчет тоже меняется, все просто зависит от того, на сколько дискретизируем время.
Единственный недостаток - не удаляются старые метки с прошлого таймфрейма, приходится перегружать индюк. Может есть возможность этого не делать?)
function oncalculate(indx)
if indx == 1 then delete_labels() end
..........
end
Да, действительно) Спасибо!
Индикатор с метками на графике
 
Цитата
Максим пишет:
Цитата
s_mike@rambler.ru пишет:
1. Поставить метку можно только на том времени, на котором существует свеча.
2. Раскрашивать свечи невозможно.
1.Т. е. метки расставить без привязки ко времени и, соответственно, к таймфрейму - нельзя. Т. е таймфрейм задается жестко. В общем, логично)
2. Жаль. Спасибо
Дезинформировал себя и, возможно, не только. В общем, к таймфрейму привязки здесь нет - при его изменении пересчет тоже меняется, все просто зависит от того, на сколько дискретизируем время.
Единственный недостаток - не удаляются старые метки с прошлого таймфрейма, приходится перегружать индюк. Может есть возможность этого не делать?)  
Индикатор с метками на графике
 
Цитата
s_mike@rambler.ru пишет:
1. Поставить метку можно только на том времени, на котором существует свеча.
2. Раскрашивать свечи невозможно.
1.Т. е. метки расставить без привязки ко времени и, соответственно, к таймфрейму - нельзя. Т. е таймфрейм задается жестко. В общем, логично)
2. Жаль. Спасибо
Индикатор с метками на графике
 
Здравствуйте!
Есть ли возможность создать индикатор на LUA,чтобы он мог ставить метки на график в определенных точках (выявленный свечной паттерн), независимо от временного масштаба, т. е., например, привязка к дате и времени в функции AddLabel зависят от времени и привязывеются к ней жестко (минутки и часы разделить здесь не получится). И еще вопрос, тоже может чайниковский, можно ли окрашивать определенные свечки на графике (выявленные паттерн). Все это как индикатор.
Спасибо  
Время отклика заявки
 
Спасибо
Время отклика заявки
 
Добрый день!
Подскажите пожалуйста, как получить время выставления заявки в торговую систему биржи. Можно ли это сделать вообще?
На сколько я понимаю, OnTransReply () может вернуть время выставления заявки на сервер QUIK?
Индикатор связывающий два инструмента
 
Добрый день!
А можно ли сделать так, чтобы индикатор пересчитывался по тикам, а не по ценам закрытия?
Вопрос по ЛУА (округление)
 
Цитата
Дмитрий пишет:
А то, какие выражения вы используете при сравнении этих чисел, никак не повлияет на Ваши дальнейшие вычисления, так как значения этих чисел в результате сравнения все равно не изменятся.
Значения не изменятся, но мне нужно чтобы сами числа были такие, какие я для себя вижу, без дополнительных значений в n-цатом разряде.
Вопрос по ЛУА (округление)
 
Цитата
Дмитрий пишет:
Цитата
Максим пишет:
но потом нужно делать арифметические операции, и вновь эта проблема всплывет
А что мешает делать эти операции с исходными числами, без всяких преобразований?
Мне нужно оценить, отличатся ли цена на шаг цены или более. Шаг цены 0.0001. допустим идет сравнение по разности текщей цены и текущего бида в стакане. Дополнительные разряды искажают инфу.  
 
Вопрос по ЛУА (округление)
 
Цитата
Дмитрий пишет:
Выражение даже можно упростить:
qt.bid.price*PRICE_SCALE == math.floor(current_order_price_buy*PRICE_SCALE + 0.5)


Дмитрий, для сравнения это подойдет, но потом нужно делать арифметические операции, и вновь эта проблема всплывет.
Я тут нашел функцию:

math.modf (x)
Возвращает два числа, Целую чать x и дробную часть x.

Как она возвращает дробную часть - я не совсем понял, но целую часть она возвращает хорошо). Если теперь записать так:
math.modf(qt.bid[i].price*PRICE_SCALE)/PRICE_SCALE==math.modf(current_order_price_buy*PRICE_SCALE)/PRICE_SCALE

то числа будут совпадать.
Вопрос по ЛУА (округление)
 
Цитата
Дмитрий пишет:
Можно вместо tonumber(qt.bid.price)==tonumber(current_order_price_buy) попробовать написать
qt.bid.price == tostring(current_order_price_buy)
Так тоже не проходит. нужно отрубить все разряды вплоть до 4-го после запятой
Вопрос по ЛУА (округление)
 
Цитата
Дмитрий пишет:
И кстати значение current_order_price_buy=91.7027 откуда берется? Если в результате какой-то арифметической операции, то разряды. дающие разницу между этими переменными, могут быть просто не видны, т.к. больше 6 разрядов после точки не отображается.
Да, Вы верно говорите, мне кажется все дело именно в это переменной. А как просто взять и обрубить эти разряды?
Вопрос по ЛУА (округление)
 
Цитата
Дмитрий пишет:
А если умножать оба числа на 10000 перед сравнением ?
Это делал
math.floor((math.floor(tonumber(qt.bid[i].price)*PRICE_SCALE)/PRICE_SCALE
В итоге получается число меньше: вместо 91.7027 получилось 91.7026
Вопрос по ЛУА (округление)
 
Здравствуйте!
Довольно чайниковский вопрос, но разобраться не могу.
Возникает проблема со сравнением двух чисел и арифметическими операциями.
Есть цена из стакана qt.bid[i].price=91.702700. И есть цена current_order_price_buy=91.7027 (визуально совпадают)
Однако их сравнение tonumber(qt.bid[i].price)==tonumber(current_order_price_buy) не происходит! При этом разность этих чисел равна diff=-1.4210854715202e-014
Как сделать так, чтобы они все же совпадали, т е какими видятся, такими были и фактически.

Спасибо
Задержка в исполнении кода, Как оформить программную задержку
 
Цитата
Серж пишет:
Цитата
Максим пишет:
терминал после этого виснет.
Что есть "виснет"? Не отвечает на время задержки или зависает "намертво" так, что нужно снимать задачу из диспетчераН
Не отвечает на время задержки. Хотелось бы этого избежать, т к работа квика на это время парализована.
Задержка в исполнении кода, Как оформить программную задержку
 
Цитата
Серж пишет:
Цитата
Максим пишет:
Подскажите пожалуйста, как в исполнении кода вставить задержку, только не sleep(), иначе терминал после этого виснет.
Выставляйте заявку в теле main(), а не в колбеках.
Такая уж архитектура программы. Хотелось бы ее сохранить.
Задержка в исполнении кода, Как оформить программную задержку
 
Добрый день!

Подскажите пожалуйста, как в исполнении кода вставить задержку, только не sleep(), иначе терминал после этого виснет.
Например, нужна задержка в 1 мин, которая вставляется перед исполнением заявки.

Спасибо.
Страницы: 1
Наверх