Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 429

 
Trader7777:

Ребят, проверьте пожалуйста функцию, меня терзают смутные сомнения по ее поводу


ну так если идет закрытие, то лучше цикл в обратном порядке делать.
 
splxgf:

ну так если идет закрытие, то лучше цикл в обратном порядке делать.

нет, закрывать должно от старого к новому ордеру
 
Trader7777:

нет, закрывать должно от старого к новому ордеру

Вот порядок поменяй, тогда и будет от старого к новому. А так пока от нового к старому, да ещё и через один иногда может получиться.
 
evillive:

Вот порядок поменяй, тогда и будет от старого к новому. А так пока от нового к старому, да ещё и через один иногда может получиться.

если сделать for (int i = OrdersTotal()-1; i>0; i--) то будет закрывать от нового к старому!
 
evillive:

Вот порядок поменяй, тогда и будет от старого к новому. А так пока от нового к старому, да ещё и через один иногда может получиться.

я вот не понимаю, если лень подсказать ошибки, зачем навязывать мне функцию, которая по моей ТС мне не нужна?
 

Доброго вечера ...

вот этот https://www.mql5.com/ru/code/9767 индикатор в советнике прописать так будет верно?

if(iCustom( NULL,0, "wave(MACD_FZR)",1,0)<Low[1] )

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"macd sample",16384,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError());

return(0);

}

// check for short position (SELL) possibility

if(iCustom( NULL, 0, "wave(MACD_FZR)",1,1)>High[1] )

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"macd sample",16384,0,Red);

 
Trader7777:

я вот не понимаю, если лень подсказать ошибки, зачем навязывать мне функцию, которая по моей ТС мне не нужна?

Ну тогда смотрим вашу функцию, берется к примеру первый ордер и поскольку он подходит под условие он удаляется... Его место займет второй ордер.

На следующем цикле проверятся будет третий ордер, а второй будет пропущен.

Поэтому и указали на неправильность перебора...

Если уж важен собственный порядок, то можно декрементировать переменную цикла при удалении.

 
Trader7777:

я вот не понимаю, если лень подсказать ошибки, зачем навязывать мне функцию, которая по моей ТС мне не нужна?

Я ж советовал - через while. Типа (апдейт 3):

void CloseHalfOrders(int otype) {
   int count = 0;
   double CTexisting = CountTrades(otype), nCloseOrdersCnt = NormalizeDouble(CTexisting/2,1), price;
   int i = 0;
   while (i < OrdersTotal()) {
      if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) {
         if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType() == otype) {
            if (otype == OP_BUY) price = Bid;
            else if (otype == OP_SELL) price = Ask;
            else return;//работаем только с OP_BUY/OP_SELL
            if (count < nCloseOrdersCnt) {
               OrderClose(OrderTicket(),OrderLots(),price,0,Lime);
               count++;
               Sleep(1000);
               i = 0;
               continue;
            } else i = OrdersTotal();
         }
      }
      i++;
   }
}
 

Или

           OrderClose(OrderTicket(),OrderLots(),Bid,0,Lime);
           i--;
 
                    if (count<n)

Почему k и n сравниваются с общим количеством закрытых ордеров?

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