Функция выставления тейк профита

Страницы: 1
RSS
Функция выставления тейк профита, Ошибка в выставлении профита
 
Добрый день.
При выставлении заявки выставляется стоп-профит на нужный уровень, но потом с интервалом пару секунд заявка профита снимается и ставится на том же уровне. Подскажите пожалуйста как исправить?
Спасибо.
function ProfitControl(posNow,acc,emit,class,file)
   local function fn1(param1,param2,param3)
       if(param1==acc and  param2==emit and param3==class)then
           return true
       else
           return false
       end
   end
   local step = tonumber(getParamEx(class,emit,"SEC_PRICE_STEP").param_value)
   local EnterPrice = RoundForStep(EnterPriceUni(posNow,emit,class,acc),step)
   local profitPrice = EnterPrice + SignFunc(posNow) * Profit * step
   local ProfCorrect = false      
   local count = 0
   local index =  SearchItems("stop_orders", 0, getNumberOf("stop_orders")-1, fn1, "account,sec_code,class_code")
   if(index~=nil)then
       for i=1,#index do
           local row = getItem("stop_orders",index[i])
           local flag = bit.band(row.flags,1)    --проверяем активна заявка или нет
           if(flag>0)then
               if(row.stop_order_type~=6 or ProfCorrect==true)then    --6 тип тейк профит
                   local keyNumber = row.order_num
                   DeletProfitByNumber(emit,class,keyNumber,file)
                   count = count + 1
               else
                   local qtyX = row.qtyX
                   local profitPriceX = RoundForStep(row.condition_price,step)    
                   local buySellX = row.condition
                   local signPosX = 0
                   if(buySellX<=4)then                
                       signPosX = -1              
                   elseif(buySellX>=5)then          
                       signPosX = 1              
                   end
                   if(signPosX==SignFunc(posNow) and qtyX==math.abs(posNow) and profitPriceX==profitPrice)then
                       ProfCorrect = true
                   else
                       local keyNumber = row.order_num
                       DeletProfitByNumber(emit,class,keyNumber,file)
                       count = count + 1
                   end
               end
           end
       end
   end
   if(ProfCorrect==false and posNow~=0)then
       local profitSpread = 30 * step
       if(posNow>0)then
           buySell = "S"
       else
           buySell = "B"
       end
       NewStopProfit(acc,emit,class,buySell,math.abs(posNow),profitPrice,0,profitSpread,file,"Функция ProfitControl")
       count = count + 1
   end
   return count
end
 
Виталий,
У Вас в коде в цикле "for i=1,#index do" снимаются все активные стопы.
Видимо функция ProfitControl вызывается несколько раз, от этого предыдущий стоп и снимается.
либо не запускайте функцию по нескольку раз, либо предусмотрите в указанном цикле условия при которых стоп не должен сниматься.
 
Спасибо. В написании я новичок, только учусь, не могли подсказать как прописать условия при которых стоп не должен сниматься.
Страницы: 1
Читают тему
Наверх