Блог им. Nemo_2000

Сообщение Quik "Вы не можете снять данную заявку"

Пишу простенького робота на qlua. Сейчас возникла проблема со снятием активной стопзаявки. Выставляю ордер со стопом и пытаюсь снять стоп для модификации вот этим скриптом

p_account = «SPBFUT00521»
p_clientcode = «101326»
p_classcode = «SPBFUT»
p_seccode = «SiM6»

TRANS_ID = 0

is_run = true
count=1
function main()
while is_run do
message(«Hello, World! №»..tostring(count),1)
count=count+1
for Index = 0,getNumberOf(«stop_orders») — 1 do
any = getItem(«stop_orders»,Index)
if bit.band(any.flags, 1) > 0 then
Stop_Order = any.order_num
--message(tostring(Stop_Order),1)
KILL_STOP_ORDER(p_classcode, p_seccode, p_account, Stop_Order)
end
end
sleep(5000)
end
end


function OnStop(stop_flag)
is_run=false
end

function KILL_STOP_ORDER(_MARKET, _TICKER, _ACCOUNT, _NUMBER)
TRANS_ID = TRANS_ID + 1
t =
{
[«TRANS_ID»]= tostring(TRANS_ID),
[«ACCOUNT»] = tostring(_ACCOUNT),
[«CLASSCODE»] = tostring(_MARKET),
[«SECCODE»] = tostring(_TICKER),
[«ACTION»] = «KILL_ORDER»,
[«ORDER_KEY»] = tostring(_NUMBER)
}
message(t.TRANS_ID.." "..t.ACCOUNT.." "..t.CLASSCODE.." "..t.SECCODE.." "..t.ACTION.." "..t.ORDER_KEY,1)
res=sendTransaction(t)
end

Ну и получаю сообщение от квика «Вы не можете снять данную заявку» Все параметры в транзакцию передаются правильно. Похоже это проблемы квика, а не клуа

Сообщение Quik "Вы не можете снять данную заявку"

Может кто подскажет, что с этим делать, 
Спасибо.
★4
47 комментариев
Проверьте наличие заявки на данном сервере, может выставляли на другом. По заявочке правой кнопкой мыши и сделать заявку своей, если есть такая строка.
avatar
Sofiy, строка такая есть, но она не активна. Ну и я ставлю и пытаюсь снять сразу, без разрыва соединения… Перерыл тут весь поиск со справками и форумами. Ничего по этой теме нет. Всё это происходит при использовании демо версии 7.1.0 на седьмой винде.. 
avatar
Не мучайтесь, позвоните брокеру.
avatar
Sofiy, это демо. На форуме qlua где поддержка на этот вопрос не ответили. Подозреваю мне как-то опять невероятно повезло открыть какую-то редкость…
avatar
Nemo_2000, тогда попробуйте так еще если версия 7, то система, перезаказать данные, если не получится опять, закройте квик, перезагрузите компьютер, предварительно сохранив данные.
avatar
забей на это сообщение, есть таблица заявок а в ней статус, заявка либо активна либо снята
Osen, ясен пень, что она активна, если я не могу её снять )))
avatar
Nemo_2000, я ты проверь в таблице ) просто это квик косячит заявку снимает и сообщение кидает)
Osen, проверяю )))
avatar
никогда не снимал заявки.
но есть KILL_ORDER — снятие заявки
и есть KILL_STOP_ORDER — снятие стоп-заявки.

avatar
ПBМ, попробовал KILL_STOP_ORDER. Транзакция не проходит. Ну и в форумах для снятия стопзаявок используют KILL_ORDER
avatar
а вручную заявка снимается?
avatar
Eldar Shaymardanov, снимается без проблем…
avatar
кстати на демке может просто не быть лимиток
Osen, шо ето тогда за демка? 
avatar
Osen, кроме того, стоп выставляется, а проблемы с его отменой.
avatar
Nemo_2000, если вручную снимается, то ковыряй в сторону сохранения транзакции в файл. там в файле будет тебе корректный текст, только идентификаторы транзакции и заявки поменять.
вообще я думал стоп и лимитная заявка должны по разному убиваться.
потому что стоп может породить лимитку. если лимитка уже есть, стоп убивать безсмысленно, надо убивать лимитку.
как узнать номер лимитки по номеру стоп-заявки, я без понятия.
а если лимитки ещё нет, то надо убивать стоп.

стоп убивается так
CLASSCODE=SPBFUT; SECCODE=RIM1; TRANS_ID=50624875; ACTION=KILL_STOP_ORDER; STOP_ORDER_KEY=186080;

а ты явно лимитку пытаешься прибить.
avatar
ПBМ, лимитки я пока не пробовал. Но этот код для отмены стопзаявок  собран из примеров с форума клуа, в которрых подобные задачи решались…
avatar
Nemo_2000, это демо там вообще по идее нет стоп заявок)

на демо счёте пытаюсь автоматически выставить заявку, пишет - Вам запрещена работа по данному торговому счету

а вручную всё выставляется, из-за демо счёта такая фигня?

может и у вас что то похожее?

avatar
Igr, нет. мне работа по торговому счёту не запрещена ))) Там надо в коде счёт проверить…
avatar
Nemo_2000, счёт норм, проверил 
avatar
единственное что приходит в голову — несоответствие номера заявки и номера транзакции. (посмотрите по передаваемым типам и просто правильность передаваемых данных)
avatar
При формировании транзакции нужно указывать не «ORDER_KEY» (это для лимиток), а «STOP_ORDER_KEY=».
avatar

Karim, не, не пашет..





требует в ORDER_KEY что то отличное от nil…
avatar
Nemo_2000, Откуда поле «ORDER_KEY», вместо
[«ORDER_KEY»] = tostring(_NUMBER)  должно быть
[«STOP_ORDER_KEY»] = tostring(_NUMBER)
avatar
Karim, И покажите, что выводит месага  message(t.TRANS_ID.." "..t.ACCOUNT.." "..t.CLASSCODE.." "..t.SECCODE.." "..t.ACTION.." "..t.ORDER_KEY,1)
avatar
Karim, в общем, на мой взгляд правильно всё выводит
avatar
Nemo_2000, Должно быть не «KILL_ORDER», а «KILL_STOP_ORDER»
avatar
Karim, ну проверил уже, не работает. Вот этот скрипт не снимает заявку и транзакцию не отправляет

p_account = «SPBFUT00521»
p_clientcode = «101326»
p_classcode = «SPBFUT»
p_seccode = «SiM6»

t =
{
[«TRANS_ID»]= tostring(math.random(2000000000)),
[«ACCOUNT»] = tostring(p_account),
[«CLASSCODE»] = tostring(p_classcode),
[«SECCODE»] = tostring(p_seccode),
[«ACTION»] = «KILL_STOP_ORDER»,
[«ORDER_KEY»] = tostring(7360931)
}
message(t.TRANS_ID.." "..t.ACCOUNT.." "..t.CLASSCODE.." "..t.SECCODE.." "..t.ACTION.." "..t.ORDER_KEY,1)
res=sendTransaction(t)

avatar
Nemo_2000, ЕЩЕ РАЗ!!!
Вместо [«ORDER_KEY»] = tostring(_NUMBER)  должно быть
[«STOP_ORDER_KEY»] = tostring(_NUMBER)
avatar
Karim, вот что получилось





avatar
Nemo_2000, А почему кавычки другие? Он на них и ругается.
avatar
Karim, поправил кавычки, но транзакция не отправляется.  Параметры выводятся и всё

p_account = «SPBFUT00521»
p_clientcode = «101326»
p_classcode = «SPBFUT»
p_seccode = «SiM6»

TRANS_ID =0
TRANS_ID = TRANS_ID + 1
t =
{
[«TRANS_ID»]= tostring(math.random(2000000000)),
[«ACCOUNT»] = tostring(p_account),
[«CLASSCODE»] = tostring(p_classcode),
[«SECCODE»] = tostring(p_seccode),
[«ACTION»] = «KILL_ORDER»,
[«STOP_ORDER_KEY»] = tostring(7360931)
}
message(t.TRANS_ID.." "..t.ACCOUNT.." "..t.CLASSCODE.." "..t.SECCODE.." "..t.ACTION.." "..t.STOP_ORDER_KEY,1)
res=sendTransaction(t)

отослал письмо в поддержку, отпишусь здесь если поможет ))

avatar
Nemo_2000, ЕЩЕ РАЗ!!!
Вместо [«ACTION»] = «KILL_ORDER», нужно 
«KILL_STOP_ORDER»
БУДЬТЕ ВНИМАТЕЛЬНЕЕ!!!
avatar
Karim, ну и заявка вот она..

avatar
1. При дублировании команды на снятие (отправил команду на снятие, не получил отклика от квика о снятии, отправил повторную) такое постоянно высвечивается
2. Если пытаюсь поставить заявку вручную, но в момент набора цифр в форме робот что-то поставил — тоже такое высвечивается.
avatar
А. Г., У меня интервал обращения к 
function KILL_STOP_ORDER
5 секунд. и Сообщение о невозможности выдаётся сразу после
Hello, World! №»

так что нет там одновременности обращения…
avatar
Разжевали же проблему, не ужели не дошло?
avatar
Чужой, не дошло…
avatar
Ты пишешь действие к таблице заявок в последнем примере ACTION = «KILL_ORDER, а не к таблице стоп заявок. И почему ты рандом поставил в транс ид?
avatar
Чужой, Ты гений! Ано заработало!!!!!
Спасибо!!!
avatar
Nemo_2000,  не забудь всем объявить, что я гений ))
avatar
Чужой, каждому, кто спросит )))
avatar
Чужой, я ведь даже строку со всеми параметрами написал. но гением не признали. обидно.
avatar
ПBМ, жизнь жестока )))
avatar

теги блога Nemo_2000

....все тэги



UPDONW
Новый дизайн