Нужно добавить один ордер, а советник добавляет тысячи!!! В чем проблема?

 

Может кто подскажет? Проблема в следующем:

мне нужно установить отложенный ордер BUYSTOP с ценой например выше на N пунктов, чем открытый ордер BUY?

сначала я проверяю существует ли уже такой ордер с такой ценой:

while(c>0)
{
OrderSelect(c-1,SELECT_BY_POS,MODE_TRADES);
c=c-1;

if(OrderType()==OP_BUY){result=OrderOpenPrice();}

if (OrderOpenPrice()==result+N*Point) {x=x+1;}}
И далее делаю проверку, если количество ордеров с такой ценой равно 0 - добавить такой ордер:
        if (x==0){
        OrderSend("EURUSD!",OP_BUYSTOP,0.01,result+N*Point,2,result+N*Point-60*Point,result+N*Point+20*Point);}
И советник начинает устанавливать тысячи таких ордеров!!! В чем проблема не понимаю, а хотелось бы решить вопрос именно таким способом!!!
 

Проблема в том что алгоритм никогда не доходит до 

x=x+1;
А почему не доходит можно посмотреть, например Print'ом:
while(c>0)
{
OrderSelect(c-1,SELECT_BY_POS,MODE_TRADES);
c=c-1;
if(OrderType()==OP_BUY){result=OrderOpenPrice();}
Print("OrderOpenPrice = ",OrderOpenPrice(),"result+N*Point = ",result+N*Point);
if (OrderOpenPrice()==result+N*Point) {x=x+1;}}

Скорее всего равенство никогда не достигается, т.к. при сравнении чисел типа double часто бывают всякие заморочки... Далее методом тыка...

 
embezz:

Проблема в том что алгоритм никогда не доходит до

Скорее всего равенство никогда не достигается, т.к. при сравнении чисел типа double часто бывают всякие заморочки... Далее методом тыка...

Сколько програмировал на С++ - никогда таких проблем не было!!! И обмануть никак?
 
vetal_dnepr:
embezz:

Проблема в том что алгоритм никогда не доходит до

Скорее всего равенство никогда не достигается, т.к. при сравнении чисел типа double часто бывают всякие заморочки... Далее методом тыка...

Сколько програмировал на С++ - никогда таких проблем не было!!! И обмануть никак?

Если Вы программировали, то должны понимать, что нельзя проверять на равенство числа с плавающей точкой. Тема обсуждалась неоднократно, поэтому никто даже не хочет отвечать - воспользуйтесь поиском.

 
rsi:
vetal_dnepr:
embezz:

Проблема в том что алгоритм никогда не доходит до

Скорее всего равенство никогда не достигается, т.к. при сравнении чисел типа double часто бывают всякие заморочки... Далее методом тыка...

Сколько програмировал на С++ - никогда таких проблем не было!!! И обмануть никак?

Если Вы программировали, то должны понимать, что нельзя проверять на равенство числа с плавающей точкой. Тема обсуждалась неоднократно, поэтому никто даже не хочет отвечать - воспользуйтесь поиском.

спасибо и на этом? будем думать по-другому!
 

Кроме того, после установки отложенного ордера у Вас останется ноль ордеров OP_BUY, и, естественно, будут продолжать устанавливаться отложенники - надо проверять и наличие отложенных ордеров. У SK в учебнике посмотрите учёт ордеров.