Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 424

 
novichok2018:

Да, спасибо, страницу прочитал. Только моих познаний в МКЛ4 хватило только, чтоб заметить, что у меня в цикле позиции перебираются от нуля до последней, а в примере наоборот, от последней к нулю. А куда вставлять break так и не понял. А когда поменял у себя перебор на обратный, вообще перестали закрываться позиции.

При закрытии позиций цикл должен быть обратным чтобы не было пропусков позиций. Оператор break вам в этом цикле не нужен - это прерывание цикла и выход из его тела. Вам же нужен continue - переход на следующую итерацию цикла.

А уж почему у вас не закрывается, и что вы для этого сделали - только вам известно.

 
Artyom Trishkin:

При закрытии позиций цикл должен быть обратным чтобы не было пропусков позиций. Оператор break вам в этом цикле не нужен - это прерывание цикла и выход из его тела. Вам же нужен continue - переход на следующую итерацию цикла.

А уж почему у вас не закрывается, и что вы для этого сделали - только вам известно.


Сделал точно по указаниям. Вот исправленный код:

void ClosePoz()
  { int total=OrdersTotal();
  if(total>0)
   {
      for(int i=OrdersTotal()-1;i>=0;i--)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {double WPR0 = iWPR(NULL,PERIOD_M5,bars,0);
         if(OrderType()==OP_BUY && MathAbs(WPR0)>80)
           OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,clrNONE);                  
         }
         continue;
      }
    } 
  } 
  

Теперь закрывает обе позиции, зато не закрывает одну, а ждёт вторую. Дурдом. Думал, может я не там вставляю функцию ClosePoz().Перетасовал кучу вариантов. Результат - ноль. Крик души о помощи. Не может такого быть, чтоб никто не смог решить вопрос.

 

как обналичить первоначальный счет (100$)?

 
novichok2018:

Сделал точно по указаниям. Вот исправленный код:

Теперь закрывает обе позиции, зато не закрывает одну, а ждёт вторую. Дурдом. Думал, может я не там вставляю функцию ClosePoz().Перетасовал кучу вариантов. Результат - ноль. Крик души о помощи. Не может такого быть, чтоб никто не смог решить вопрос.

Ну не знаю. На коленке нарисовал. Проверить конечно же не могу - там ваших условий не хватает, так что - сами

//+------------------------------------------------------------------+
void ClosePoz(const string symbol_name,const int magic_number,const double wpr_buy,const double wpr_sell)
  { 
   int total=OrdersTotal();
   for(int i=total-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS))
        {
         ENUM_ORDER_TYPE type=OrderType();
         if(type>ORDER_TYPE_SELL)               continue;
         if(OrderMagicNumber()!=magic_number)   continue;
         if(OrderSymbol()!=symbol_name)         continue;
         int digits=(int)SymbolInfoInteger(OrderSymbol(),SYMBOL_DIGITS);
         if(type==ORDER_TYPE_BUY)
           {
            double close_price=SymbolInfoDouble(OrderSymbol(),SYMBOL_BID);
            if(iWPR(NULL,PERIOD_M5,bars,0))>wpr_buy)
              {
               ResetLastError();
               if(!OrderClose(OrderTicket(),OrderLots(),close_price,slippage,clrNONE);
                  Print(__FUNCTION__" > Позиция Buy #",OrderTicket()," не закрыта. Ошибка: ",GetLastError());
              }
           }                
         else
           {
            double close_price=SymbolInfoDouble(OrderSymbol(),SYMBOL_ASK);
            if(iWPR(NULL,PERIOD_M5,bars,0))<wpr_sell)
              {
               ResetLastError();
               if(!OrderClose(OrderTicket(),OrderLots(),close_price,slippage,clrNONE);
                  Print(__FUNCTION__" > Позиция Sell #",OrderTicket()," не закрыта. Ошибка: ",GetLastError());
              }
           }                
        }
     }
  } 
//+------------------------------------------------------------------+
Да и WPR внутри функции проверять - это как-то не нормально. WPR должно быть одним из условий вызова функции закрытия
 
модифицировать у отложки количество лотов, я так понял, нельзя.
 
igrok333:
модифицировать у отложки количество лотов, я так понял, нельзя.

Только открыть дополнительный, с нужным вам обьемом

 
Alekseu Fedotov:

Только открыть дополнительный, с нужным вам обьемом

Тогда уж проще удалить существующий и выставить новый. Ведь требуемый объём не обязательно должен быть больше того, что уже выставлен. Да и один ордер проще сопровождать.

 

Доброго времени суток  у меня есть вопрос  объясню как я это понимаю  

есть ли написанный  алгоритм  для советников который на покупку ставит в самом низу свечи а на продажу в самом верху 

и как его адаптировать в советник ?
 
iisvlg:  есть ли написанный  алгоритм  для советников который на покупку ставит в самом низу свечи а на продажу в самом верху и как его адаптировать в советник ?

Это было бы здорово!!!

 
iisvlg:

Доброго времени суток  у меня есть вопрос  объясню как я это понимаю  

есть ли написанный  алгоритм  для советников который на покупку ставит в самом низу свечи а на продажу в самом верху 

и как его адаптировать в советник ?

Ставите    BUY LIMIT на Low, и  SELL LIMIT на  High.

По поводу алгоритмов, копайте базу

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