Колбек 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
Глядя на такой код, я бы сказал, что дело в том, что вы сохраняете номер последней сделки в одной переменной, а не в массиве как это надо делать, и из-за этого, у вас всё перемешивается в итоге... но... совершенно непонятно, реальный это ваш код или нет... потому что, если реальный, то у вас там и повторно одни и те же сделки будут считаться, когда «тройные повторы» вперемешку пойдут. Поэтому вышеприведённый вами код в принципе не будет работать...
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
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 написал: Чтобы отмести в сторону все ощущения, нужно хотя бы разок сохранить в файл все, что у Вас проходит после фильтра. И тогда будет точно ясно, грешить на кол-бэк или нет.
Может вы имели введу не тройной дубль колл бека, а то что одна и та же сделка, может запускать колл бек много раз? И получается так, сохранил номер, следам отработал другой колл бек и сохранился её номер, а потом снова пришла та что уже была? Может вы это имели введу? Речь не о дублях колл бека?
Suntor написал: Чтобы отмести в сторону все ощущения, нужно хотя бы разок сохранить в файл все, что у Вас проходит после фильтра. И тогда будет точно ясно, грешить на кол-бэк или нет.
Зачем такие злобные инсинуации?... я такого не писал, не надо чужие сообщения под моё имя загонять в цитатах!
Цитата
Boris Litvinov написал: Может вы имели введу не тройной дубль колл бека, а то что одна и та же сделка, может запускать колл бек много раз? И получается так, сохранил номер, следам отработал другой колл бек и сохранился её номер, а потом снова пришла та что уже была? Может вы это имели введу? Речь не о дублях колл бека?
Я имел ввиду, что в вашем коде ошибка. Как я написал в самом первом своём сообщении, вы сохраняете номер последней сделки в одной переменной trade_numSave... и это ошибка. У вас вызов по каждой следующей сделке затирает номер предыдущей в этой переменной, а повторный вызов по предыдущей сделке затирает номер следующей... так они друг друга и трут пока все «дубли» не пройдут. В итоге, у вас мешанина получается, как в самом коде, так и в логе...
Найдите пример на форуме, как правильно обрабатывать повторы OnTrade через сохранение в таблицу и перепишите свой код... и у вас там помимо этого, ещё много ошибок, начиная от проверки флагов сделки, последовательности работы с файловыми дескрипторами и т.д... про структуру и стилистику кода я вообще молчу.
ОК, завтра прикручу генератор чисел, что бы была последовательность заявок и сделок, запущу всё в таблице и посмотрю визуально есть ли повторения и всё ли отрабатывает. На этом сделаю вывод, может и правда туплю. Но тогда вопрос, не ужели S# не доперли до этого, просили Арку разобраться с багом? Ведь у них двойная сделка и асинхронен это синоним их продукта. И что только они не делали, и с бубном и без, всё равно всё что прикручивается через квик, асинхронно.
https://smart-lab.ru/blog/472380.php#comments почитайте, тут предложили решение. Все дураки получается? Suntor , будьте добры ссылочку на эталонный и правильный скрипт работы с OnTrade. Вы думаете не искал, там обращаются к таблице сделок через цикл. К нас о чем речь? В прочем ссылочку
заработало вроде, буду тестить дальше, но блин, работает!!! так и было приходили кол беки в случайном порядке, всё решил Всем спасибо за дискуссию. Получил СРЕДНЕЮ без бороды истории таблицы сделок, заявок и всей этой шляпы не нужной этому боту.
Boris Litvinov написал: Suntor , будьте добры ссылочку на эталонный и правильный скрипт работы с OnTrade. Вы думаете не искал, там обращаются к таблице сделок через цикл. К нас о чем речь? В прочем ссылочку