простенький робот со скользяшками. 
интересующие куски кода:
вопрос у меня следующего характера. сигналы получаю по идентификатору скользяшки.
НО! функция OnOrder срабатывает три или четыре раза с одинаковыми флагами
вот возвращаемая таблица по функции
withdraw_datetime={week_day=1;hour=0;ms=0;mcs=0;day=1;month=1;sec=0;year=1601;
min=0;};price=10242;value_entry_type=0;balance=0;repo_value_balance=0;value=20
484;qty=2;passive_only_order=0;class_code=SPBFUT;activation_time=0;userid=*****;expiry=-1;flags=28;linkedorder=0;ordernum=********;sec_code=SRH6;s
ide_qualifier=0;client_code=********;firmid=SPBFUT;datetime={week_day=2;hour=13
;ms=937;mcs=937000;day=15;month=12;sec=52;year=2015;min=13;};yield=0;reject_re
ason=;capacity=0;acnt_type=0;repo2value=0;start_discount=0;min_qty=0;ext_order
_flags=0;exec_type=0;order_num=******;repovalue=0;repoterm=0;accruedint=0
;account=******;seccode=SRH6;uid=******;brokerref=********;exchange_code=;settl
ecode=;price2=0;trans_id=1;bank_acc_id=;
и таких строчек несколько. соответственно несколько.
временами заявка срабатывает, а таблица FUTURES_CLIENT_HOLDINGS не обновляет количество в позиции и выставляется новая заявка, которая превышает лимит по возможному количеству.
возврат количества
как мне контролировать, чтобы только одна заявка заявка выставлялась?
				интересующие куски кода:
| Код | 
|---|
| TRANS_ID = 1
function main()
   while is_run do
        sleep(350)
        robot()
   end
end
function robot()
   --сигнал на вход
   if (price ~= 0) and (need_order) and (quantity_total() < Maximum_quantity) and (quantity_total() > 0-Maximum_quantity) then --проверка на цену, необходимость выставления заявки и что текущее количество не больше разрешенного для лонга/шорта
      SetOrder("B", price, 1) --выставляем заявку
      need_order = false --условие, что есть заявка, то новую не ставим
   end
end
function SetOrder(type, price, qua) -- подать заявку
    Status =  tonumber(getParamEx(ClassCode,  SecCode, "status").param_value);    
    if (Status ~= 1) then 
        writeToLog("Status of " .. SecCode .. " is " .. Status)
        return
    end    
    if  (qua == 0) then
        writeToLog("QUANTITY is 0")
        return
    end
    
    if  (price == 0) then
        writeToLog("Price is 0")
        return
    end
    
    local    trans = {
      ["CLASSCODE"]=ClassCode,
      ["SECCODE"]=SecCode,
      ["ACTION"]="NEW_ORDER",
      ["ACCOUNT"]=ACCOUNT,
      ["CLIENT_CODE"]=CLIENT_CODE,
      ["TYPE"]="L",
      ["OPERATION"]=type,
      ["QUANTITY"]=tostring(qua),
      ["PRICE"]=tostring(price),
      ["TRANS_ID"]=TRANS_ID
                    }        
    local res = sendTransaction(trans)
end
function OnOrder(trans_reply) -- обработка  событий по заявке
    nord = trans_reply["order_num"]  -- номер заявки ORDERNUM    
    
    if nord==nil or nord==0 or nord=="0" then
        message("Заявка не выставилась",1)
        need_order = true
        return        
    elseif tostring(trans_reply["trans_id"]) == tostring(TRANS_ID) then        
        writeToLog(table2string(trans_reply))
        if trans_reply["flags"] == 24 or trans_reply["flags"] == 26 or trans_reply["flags"] == 28 then
            if trans_reply["balance"] == 0 then
                need_order = true --здесь условие, что выставленная заявка выполнилась и дальше контроль только на превышение разрешенного от депо
            end
        end
    end
    
end | 
вопрос у меня следующего характера. сигналы получаю по идентификатору скользяшки.
НО! функция OnOrder срабатывает три или четыре раза с одинаковыми флагами
вот возвращаемая таблица по функции
withdraw_datetime={week_day=1;hour=0;ms=0;mcs=0;day=1;month=1;sec=0;year=1601;
min=0;};price=10242;value_entry_type=0;balance=0;repo_value_balance=0;value=20
484;qty=2;passive_only_order=0;class_code=SPBFUT;activation_time=0;userid=*****;expiry=-1;flags=28;linkedorder=0;ordernum=********;sec_code=SRH6;s
ide_qualifier=0;client_code=********;firmid=SPBFUT;datetime={week_day=2;hour=13
;ms=937;mcs=937000;day=15;month=12;sec=52;year=2015;min=13;};yield=0;reject_re
ason=;capacity=0;acnt_type=0;repo2value=0;start_discount=0;min_qty=0;ext_order
_flags=0;exec_type=0;order_num=******;repovalue=0;repoterm=0;accruedint=0
;account=******;seccode=SRH6;uid=******;brokerref=********;exchange_code=;settl
ecode=;price2=0;trans_id=1;bank_acc_id=;
и таких строчек несколько. соответственно несколько.
временами заявка срабатывает, а таблица FUTURES_CLIENT_HOLDINGS не обновляет количество в позиции и выставляется новая заявка, которая превышает лимит по возможному количеству.
возврат количества
| Код | 
|---|
| function quantity_total() --подсчет количество позиций
    local q_total=0
    
    for i = 0,getNumberOf("FUTURES_CLIENT_HOLDINGS") - 1 do
        if getItem("FUTURES_CLIENT_HOLDINGS",i).sec_code == SecCode then -- ЕСЛИ строка по нужному инструменту           
            q_total = getItem("FUTURES_CLIENT_HOLDINGS",i).totalnet
            if q_total== nil then
                return 0
            else
                return q_total -- возвращаем количество позиций
            end
       end;
    end;
    return 0
end | 
как мне контролировать, чтобы только одна заявка заявка выставлялась?
