function OnTrade (trade)

Страницы: 1
RSS
function OnTrade (trade), почему пропускаются колл беки, или того хуже не приходят?
 
Колбек OnTrade
В теле складывал value. BUY как есть, Sell наделял "-"  
После делил на количество лотов. И получая среднюю безубыточную цену.
А да, там приходит по три пакета, поставил фильтр что бы одни и те же trade_num (Номер сделки в торговой системе)не учитывались

В общем если торгую одним лотом всё гуд.
Но стоит кинуть большим лотом. Или делать много сделок подряд. Некоторые кол беки не отрабатывают.
Такое ощущение что колбеки не приходят.

Да, бот не может просто пропустить. По тому что обращаюсь именно колл беку, той сделке что его вызвала.
А не в таблицу сделок, запрашивая количество строк и так далее.
Не пойму по чему не все сделки  вызывают кол бек?
Код
function OnTrade (trade)
if trade.trade_num ~= trade_numSave then  
message(tostring(trade.trade_num))
trade_numSave = trade.trade_num
end
end
 
и меня не интересует варианты с сохранением всех сделок, меня интересует лишь получение средней цены путем описанным выше и его стабильная работа.  
 
Цитата
В теле складывал value. BUY как есть, Sell наделял "-"  
После делил на количество лотов. И получая среднюю безубыточную цену.

Есть вариант, что дело не в кол-бэках, а в получении средней цены. Возможно, Вам нужна не средняя, а средне-взвешенная цена. Из цитаты это не понятно.

Цитата
Такое ощущение что колбеки не приходят.
Цитата
и меня не интересует варианты с сохранением всех сделок, меня интересует лишь получение средней цены путем описанным выше и его стабильная работа.
Чтобы отмести в сторону все ощущения, нужно хотя бы разок сохранить в файл все, что у Вас проходит после фильтра. И тогда будет точно ясно, грешить на кол-бэк или нет.
 
Цитата
Boris Litvinov написал:
Не пойму по чему не все сделки  вызывают кол бек?
Код
function  OnTrade (trade)
if  trade.trade_num ~ =  trade_numSave  then   
message (tostring(trade.trade_num))
trade_numSave  =  trade.trade_num
end 
end   
Глядя на такой код, я бы сказал, что дело в том, что вы сохраняете номер последней сделки в одной переменной, а не в массиве как это надо делать, и из-за этого, у вас всё перемешивается в итоге... но... совершенно непонятно, реальный это ваш код или нет... потому что, если реальный, то у вас там и повторно одни и те же сделки будут считаться, когда «тройные повторы» вперемешку пойдут. Поэтому вышеприведённый вами код в принципе не будет работать...
 
Цитата
Suntor написал:
Цитата
Boris Litvinov   написал:
Не пойму по чему не все сделки  вызывают кол бек?
Код
   function   OnTrade (trade)
 if   trade.trade_num ~  =   trade_numSave   then    
 message  (tostring(trade.trade_num))
trade_numSave   =   trade.trade_num
 end  
 end      
Глядя на такой код, я бы сказал, что дело в том, что вы сохраняете номер последней сделки в одной переменной, а не в массиве как это надо делать, и из-за этого, у вас всё перемешивается в итоге... но... совершенно непонятно, реальный это ваш код или нет... потому что, если реальный, то у вас там и повторно одни и те же сделки будут считаться, когда «тройные повторы» вперемешку пойдут. Поэтому вышеприведённый вами код в принципе не будет работать...
trade_num ограничивает повторение повторных кол беков.
В полном коде у меня и есть сохранение в файл всего что приходит, так вот кол беки не отрабатывают вск сделки.
На сколько знаю проблема известная. И много лет не решается Аркой!!! Заниматься отпиской смысла нет.
 
Код
seccode1 ="SRM8" 
seccode2 = "SiM9" 

trade_numSave = 0
function OnTrade (trade)

if trade.sec_code == seccode1 then
if trade.trade_num ~= trade_numSave then  
trade_numSave = trade.trade_num   -- что бы не повторялось, ограничиваем повторение по номеру заявки.
 message(tostring(trade.flags), 1)  
if trade.flags == 36 or trade.flags == 68 then
      value=trade.value *-1  -- Текущие    
else
      value=trade.value    
end   

valueSave = 0   
file = io.open("volume_summa.txt", "a+") -- Opens a file in append mode
if    file ~= nil then
io.input(file)-- sets the default input file as test.lua
valueSave = io.read()-- prints the first line of the file
end
io.close(file)  -- closes the open file      

if valueSave == nil then 
valueSave = value
else
valueSave = tonumber(valueSave) + tonumber(value)
end 


file = io.open("volume_summa.txt", "w+") -- Opens a file in append mode
io.output(file) -- sets the default output file as test.lua
io.write(valueSave) -- appends a word test to the last line of the file
io.close(file)  -- closes the open file

end
end
end
 
Цитата
Boris Litvinov написал:
Код
  seccode1  =  "SRM8"  
seccode2  =   "SiM9"  

trade_numSave  =   0 
 function  OnTrade (trade)

 if  trade.sec_code  =  =  seccode1  then 
 if  trade.trade_num ~ =  trade_numSave  then   
trade_numSave  =  trade.trade_num    -- что бы не повторялось, ограничиваем повторение по номеру заявки. 
  message (tostring(trade.flags),  1 )  
 if  trade.flags  =  =   36   or  trade.flags  =  =   68   then 
      value = trade.value  *  -  1    -- Текущие     
 else 
      value = trade.value    
 end    

valueSave  =   0    
file  =   io.open ( "volume_summa.txt" ,  "a+" )  -- Opens a file in append mode 
 if     file ~ =   nil   then 
 io.input (file) -- sets the default input file as test.lua 
valueSave  =   io.read () -- prints the first line of the file 
 end 
 io.close (file)   -- closes the open file       

 if  valueSave  =  =   nil   then  
valueSave  =  value
 else 
valueSave  =  tonumber(valueSave)  +  tonumber(value)
 end  


file  =   io.open ( "volume_summa.txt" ,  "w+" )  -- Opens a file in append mode 
 io.output (file)  -- sets the default output file as test.lua 
 io.write (valueSave)  -- appends a word test to the last line of the file 
 io.close (file)   -- closes the open file 

 end 
 end 
 end   
ТАК ЧТО НИЧЕГО ТУТ ПОВТОРНО НЕ ПРИХОДИТ, ТУПА КОЛЛ БЕКИ НЕ ПРИХОДЯТ. И НЕ НУЖНО ДИЧЬ ВПАРИВАТЬ, О ПРОБЛЕМЕ АРКА ЗНАЕТ
 
Прошу правильный код, от АРКИ. Где как и у меня нет обращения к таблице сделк, где всё берется из прешедшего коол бека, рас все они последовательно отрабатываются.
УТВЕРЖДАЮ, что не все колл беки приходят, если происходит быстрый набор, То часть колл беков не имеет очареди, они ТУПА ОТМЕНЯЮТСЯ. Или не приходят вовсе.  
 
Проблема описана, и известна на СЛ программистам. Не работают колл беки должным образом. Вопрос, есть ли смысл ждать исправления и корректной работы?
Или так и будут все города городить, сохраняя всю историю сделок что бы получить среднюю?
https://smart-lab.ru/blog/472380.php#comments
 
Цитата
Boris Litvinov написал:
trade_num ограничивает повторение повторных кол беков.
спасибо что пояснили, а то бы ни в жизнь не догадался... )))

Цитата
Boris Litvinov написал:
В полном коде у меня и есть сохранение в файл всего что приходит, так вот кол беки не отрабатывают вск сделки.
в «полном коде» у вас сохранение в файл идёт в той же условной ветке, в которой вы переменную trade_numSave мучаете свою несчастную... и весь лог ваш также с ошибкой пишется не полностью и вперемешку...

Цитата
Boris Litvinov написал:
ТАК ЧТО НИЧЕГО ТУТ ПОВТОРНО НЕ ПРИХОДИТ, ТУПА КОЛЛ БЕКИ НЕ ПРИХОДЯТ. И НЕ НУЖНО ДИЧЬ ВПАРИВАТЬ, О ПРОБЛЕМЕ АРКА ЗНАЕТ
уж я не знаю, с какой вы злостью в свой бедный OnTrade столько open/close файловых понатыкали, но для начала, хотя бы форматирование сделайте отступов, тогда возможно структуру своих условий увидите и сразу поймёте где накосячили...
 
Цитата
Suntor написал:
Чтобы отмести в сторону все ощущения, нужно хотя бы разок сохранить в файл все, что у Вас проходит после фильтра. И тогда будет точно ясно, грешить на кол-бэк или нет.
Может вы имели введу не тройной  дубль колл бека, а то что одна и та же сделка, может запускать колл бек много раз?
И получается так, сохранил номер, следам отработал другой колл бек и сохранился её номер, а потом снова пришла та что уже была?
Может вы это имели введу? Речь не о дублях колл бека?
 
Цитата
Boris Litvinov написал:
Цитата
Suntor   написал:
Чтобы отмести в сторону все ощущения, нужно хотя бы разок сохранить в файл все, что у Вас проходит после фильтра. И тогда будет точно ясно, грешить на кол-бэк или нет.
Зачем такие злобные инсинуации?... я такого не писал, не надо чужие сообщения под моё имя загонять в цитатах!

Цитата
Boris Litvinov написал:
Может вы имели введу не тройной  дубль колл бека, а то что одна и та же сделка, может запускать колл бек много раз?
И получается так, сохранил номер, следам отработал другой колл бек и сохранился её номер, а потом снова пришла та что уже была?
Может вы это имели введу? Речь не о дублях колл бека?
Я имел ввиду, что в вашем коде ошибка. Как я написал в самом первом своём сообщении, вы сохраняете номер последней сделки в одной переменной trade_numSave... и это ошибка. У вас вызов по каждой следующей сделке затирает номер предыдущей в этой переменной, а повторный вызов по предыдущей сделке затирает номер следующей... так они друг друга и трут пока все «дубли» не пройдут. В итоге, у вас мешанина получается, как в самом коде, так и в логе...

Найдите пример на форуме, как правильно обрабатывать повторы OnTrade через сохранение в таблицу и перепишите свой код... и у вас там помимо этого, ещё много ошибок, начиная от проверки флагов сделки, последовательности работы с файловыми дескрипторами и т.д... про структуру и стилистику кода я вообще молчу.
 
ОК, завтра прикручу генератор чисел, что бы была последовательность заявок и сделок, запущу всё в таблице и посмотрю  визуально есть ли повторения и всё ли отрабатывает. На этом сделаю вывод, может и правда туплю.
Но тогда вопрос, не ужели S# не доперли до этого, просили Арку разобраться с багом? Ведь у них двойная сделка и асинхронен это синоним их продукта.  И что только они не делали, и с бубном и без, всё равно всё что прикручивается через квик,
асинхронно.  
 
https://smart-lab.ru/blog/472380.php#comments почитайте, тут предложили решение. Все дураки получается?
Suntor , будьте добры ссылочку на эталонный и правильный скрипт работы с OnTrade.  
Вы думаете не искал, там обращаются к таблице сделок через цикл. К нас о чем речь? В прочем ссылочку  
 
Цитата
UP
 
Цитата
Suntor написал:
Цитата
Boris Litvinov   написал:
Цитата
UP
 

заработало вроде, буду тестить дальше, но блин, работает!!!
так и было приходили кол беки в случайном порядке, всё решил
Всем спасибо за дискуссию. Получил СРЕДНЕЮ без бороды истории таблицы сделок, заявок и всей этой шляпы не нужной этому боту.
 
Suntor отдельная благодарность за выделенное время!  
 
Цитата
Boris Litvinov написал:
Suntor  , будьте добры ссылочку на эталонный и правильный скрипт работы с OnTrade.  
Вы думаете не искал, там обращаются к таблице сделок через цикл. К нас о чем речь? В прочем ссылочку
Собственно в Яндексе выкидывает второй ссылкой по счёту на запрос «trade_num site:forum.quik.ru»:
https://forum.quik.ru/messages/forum10/message16265/topic1812/#message16265
Цитата
Boris Litvinov написал:
заработало вроде, буду тестить дальше, но блин, работает!!!
 так и было приходили кол беки в случайном порядке, всё решил
Ну вот видите...
Цитата
Boris Litvinov написал:
Suntor  отдельная благодарность за выделенное время!
Да не за что...
Страницы: 1
Читают тему
Наверх