Подскажите команду

 

Вот кусок закрытия позиции что нужно сюда вставить чтобы закрыть позици лишь в том случае когда она положительная

TotalOrders=OrdersTotal();
        for (i=0; i<=TotalOrders; i++){
                 if (OrderSelect(0,SELECT_BY_POS)==true){
                    if (OrderType()==OP_BUY)&& (???????????) OrderClose(OrderTicket(),OrderLots(),Bid,5,Red);
                 if (OrderSelect(0,SELECT_BY_POS)==true){   
                    if (OrderType()==OP_SELLSTOP) OrderDelete(OrderTicket(),Green);
                 }   

Буду примного благодарен!!!!

 
nikelodeon:

Вот кусок закрытия позиции что нужно сюда вставить чтобы закрыть позици лишь в том случае когда она положительная

Буду примного благодарен!!!!


OrderProfit()>0
 

Спасибо большое!!!!

Блин а как сделать чтоб закрывались только положительные ордера и отрицительные оставались. А так он кроет только когда они все становяться положительными...Чёт ума не могу приложить как это сделать....

 
nikelodeon:

Спасибо большое!!!!

Блин а как сделать чтоб закрывались только положительные ордера и отрицительные оставались. А так он кроет только когда они все становяться положительными...Чёт ума не могу приложить как это сделать....


OrderSelect(0,SELECT_BY_POS)

д.б

OrderSelect(i,SELECT_BY_POS)

 

Ааа понятно, только всё равно фигня получаеться...... Он как то пропускает позиции. Тоесть закрывает положительные но не все...... Пропускает, и только потом уже закрывает её в следующий приход сигнала....

 
nikelodeon:

Ааа понятно, только всё равно фигня получаеться...... Он как то пропускает позиции. Тоесть закрывает положительные но не все...... Пропускает, и только потом уже закрывает её в следующий приход сигнала....


при закрытии ордера позиции всех остальных смещаются, поэтому некоторые пропускаются. Попробуйте типа

  int i=0;
  while (i<OrdersTotal()){
     if (OrderSelect(i,SELECT_BY_POS)==true){
       if ((OrderType()==OP_BUY)&& (OrderProfit()>0)){
        OrderClose(OrderTicket(),OrderLots(),Bid,5,Red);
        i--;
       } 
     }
     i++;
   }   
 
nikelodeon:

Ааа понятно, только всё равно фигня получаеться...... Он как то пропускает позиции. Тоесть закрывает положительные но не все...... Пропускает, и только потом уже закрывает её в следующий приход сигнала....

Да Вы что ? не может быть......

Вы, наверное, первый и единственный за все время существования форума, у кого появилась такая задача. Как Вам это удалось ? ума не приложу.

Приложите тогда Вы: например, воспользуйесь учебником и поиском по форуму ;). И пишите в ветку для новичков - она специально для подобных вопросов.

Удачи.

ЗЫ Вы Вроде, и не первый год на форуме.......

TotalOrders=OrdersTotal();
        for (i=0; i<=TotalOrders; i++){
                 if (OrderSelect(0,SELECT_BY_POS)==true){
                    if (OrderType()==OP_BUY)&& (???????????) OrderClose(OrderTicket(),OrderLots(),Bid,5,Red);
                 if (OrderSelect(0,SELECT_BY_POS)==true){   
                    if (OrderType()==OP_SELLSTOP) OrderDelete(OrderTicket(),Green);
                 }   

Порядок перебора ордеров неверный. И еще - выбрать ордер достаточно один раз. Все есть на форуме в ответах, в учебнике и примерах.

 
Avals:


при закрытии ордера позиции всех остальных смещаются, поэтому некоторые пропускаются. Попробуйте типа

Вот так и появляются легенды, что если в индикаторе\советнике\скрипте есть цикл for(), то он (индикатор\советник\скрипт) или заглядывает в будущее, или совсем неверно работает и что нужно использовать исключительно while(){} ;) ...... Недавно читал на форуме )))))))))))))))))))))

Удачи.

 
P.S. вы уже подымали тему закрытия всех ордеров https://www.mql5.com/ru/forum/131954 нужно только добавить одно условие
 
VladislavVG:

Вот так и появляются легенды, что если в индикаторе\советнике\скрипте есть цикл for(), то он (индикатор\советник\скрипт) или заглядывает в будущее, или совсем неверно работает и что нужно использовать исключительно while(){} ;) ...... Недавно читал на форуме )))))))))))))))))))))

Удачи.


да можно и с for сделать

for(int i=TotalOrders-1;i>=0;i--)

чтоб небыло легенд)))

 
VladislavVG:

Вот так и появляются легенды, что если в индикаторе\советнике\скрипте есть цикл for(), то он (индикатор\советник\скрипт) или заглядывает в будущее, или совсем неверно работает и что нужно использовать исключительно while(){} ;) ...... Недавно читал на форуме )))))))))))))))))))))

:)))))))))
Причина обращения: