Я, кажется, схожу с ума... Либо заработался)))

 

Вот кусок кода:

            if (OrderType()==OP_BUY)
            {
               RefreshRates();
               BuyLevel=NormalizeDouble(Bid-(BuyProfit/(TickValue*BuyLots)*Point),Digits)+NormalizeDouble(tp2*Point(),Digits());
               TPB=NormalizeDouble(OrderTakeProfit(),Digits());
               Print(BuyLevel,"    ",TPB);
               if(BuyLevel!=TPB)
               {
                  if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),BuyLevel,0))Print("Buy Order@ Not Modify! Error = ",GetLastError());
               }
            }

Вот принты:


ДА КАК ТАК ТО??!!

 
Maksim Neimerik:

Вот кусок кода:

Я бы это убрал, зачем 2 раза нормализация

BuyLevel=NormalizeDouble(Bid-(BuyProfit/(TickValue*BuyLots)*Point),Digits)+NormalizeDouble(tp2*Point(),Digits());

Сделал-бы так

BuyLevel=NormalizeDouble(Bid-(BuyProfit/(TickValue*BuyLots)*Point)+tp2*Point()),Digits());
 
Vitaly Muzichenko:

Я бы это убрал, зачем 2 раза нормализация

Сделал-бы так

Согласен, но проблему это же не решит...

 
Maksim Neimerik:

Согласен, но проблему это же не решит...

Сравнивайте не на равенство, а "не менее"

if(BuyLevel < TPB)

А вообще, здесь на форуме целая ветка посвящена "Равенство вещественных чисел"

 
BuyLevel не нормализован.
 
Maksim Neimerik:

Вот кусок кода:

Вот принты:


ДА КАК ТАК ТО??!!

Почитайте документацию о сравнении вещественных чисел.

if(NormalizeDouble(BuyLevel - TPB, _Digits) > 0)
 

во-первых нужно делать везде одинаковый Digits

BuyLevel=NormalizeDouble(Bid-(BuyProfit/(TickValue*BuyLots)*Point),Digits)+NormalizeDouble(tp2*Point(),Digits());

во-вторых, сложение нормализованных чисел дает НЕнормализованный результат

нужно делать так

BuyLevel=NormalizeDouble( (Bid-(BuyProfit/(TickValue*BuyLots)*Point))+(tp2*Point()) ,_Digits);


или так

if(NormalizeDouble(BuyLevel,_Digits) != NormalizeDouble(TPB,_Digits))
Причина обращения: