Запоминание номера заявки не устраняет проблему задвоения заявок при перегрузке терминала. Написал код для сканирования активных заявок по определенному инструменту, если есть активные заявки, то запускается функция снятия. Количество активных заявок и их номера неважны:
Код |
---|
function scanoforder(whatsorder) - функция сканирования активных заявок по определенному инструменту
local transaction,bs,res={},{},""
local iTorF=0
local iSorB=""
for i=0,(tonumber(getNumberOf("orders"))-1) do
bs=getItem("orders",i)
if whatsorder=="TorF" then
if bit.band(bs["flags"],1)~=0 and bs["sec_code"]==p_seccode then
iTorF=iTorF+1
end
elseif whatsorder=="SorB" then
if bit.band(bs["flags"],1)~=0 and bs["sec_code"]==p_seccode then
if bit.band(bs["flags"],4)>0 then
iSorB="S" --break
else
iSorB="B"
end
elseif bit.band(bs["flags"],1)==0 then
iSorB="nil"
end
end
end
if whatsorder=="TorF" then
if iTorF>0 then
return true
else
return false
end
end
if whatsorder=="SorB" then
return iSorB
end
end |
Функция снятия всех активных заявок по определенному инструменту:
Код |
---|
function delete_order()
local transaction,bs,res={},{},""
for i=0,(tonumber(getNumberOf("orders"))-1) do
bs=getItem("orders",i)
if bit.band(bs["flags"],1)~=0 and bs["sec_code"]==p_seccode then
local tr={
["CLASSCODE"]=p_classcode,
["SECCODE"]=p_seccode,
["ACTION"]="KILL_ORDER",
["ACCOUNT"]=p_account,
["CLIENT_CODE"]=p_client_code,
["TYPE"]="L",
["OPERATION"]=l_oper,
["TRANS_ID"]=p_trans_ID,
["ORDER_KEY"]=tostring(bs["order_num"])
}
-- ЕСЛИ функция вернула строку диагностики ошибки, ТО значит транзакция не прошла
Result = sendTransaction(tr)
end
end
end
|
То же самое сделано по заявкам тейк-профит, выложу, если будет нужно