Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 672

 
fxsaber:
Спасибо!!!
 

пишу советник, который работает по мартингейлу.

Как заставить его закрывать все открытые им ордера при достижении максимально допустимого убытка в пунктах на одной валютной паре? 

 
RichLux:

пишу советник, который работает по мартингейлу.

Как заставить его закрывать все открытые им ордера при достижении максимально допустимого убытка в пунктах на одной валютной паре? 


double GetProfitinCurrency(string order_symbol="",int order_type=-1,int order_magic=-1)
  {
   double profit=0;
   int    i,k=OrdersTotal();

   if(order_symbol=="0") order_symbol=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(order_magic<0 || OrderMagicNumber()==order_magic)
                 {
                  profit+=OrderProfit()+OrderCommission()+OrderSwap();
                 }
              }
           }
        }
     }
   return(profit);
  }


 

функция возвращает профит в октрытых позах, можно фильтровать по символу, типу, магику

 

Далее закрываете все позиции

 

void CPD(string order_symbol="",int order_type=-1,int order_magic=-1)
  {
   int i,k=OrdersTotal();

   if(order_symbol=="0") order_symbol=Symbol();
   for(i=k-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(order_magic<0 || OrderMagicNumber()==order_magic) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),1,CLR_GREEN);
              }
           }
        }
     }
  }


 

 
Vladislav Andruschenko:

...

функция возвращает профит в октрытых позах, можно фильтровать по символу, типу, магику

 

Далее закрываете все позиции

 

 

Спасибо, но меня интересует закрытие по убытку. Как это можно реализовать?
 

ну в смысле я же Вам выше все дал, 

соответственно профит это понятие общее

-20 это -20

 if(GetProfitinCurrency(Symbol(),-1,-1)<-20)CPD(Symbol(),-1,-1);

 
Vladislav Andruschenko:

double GetProfitinCurrency(string order_symbol="",int order_type=-1,int order_magic=-1)
  {
   double profit=0;
   int    i,k=OrdersTotal();

   if(order_symbol=="0") order_symbol=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(order_magic<0 || OrderMagicNumber()==order_magic)
                 {
                  profit+=OrderProfit()+OrderCommission()+OrderSwap();
                 }
              }
           }
        }
     }
   return(profit);
  }

Спасибо теперь я понял.

 В коде еще не ясен такой момент:  (order_type<0 || OrderType()==order_type) ЭТО можно читать примерно как "и ордер на продажу или покупку"?

 
RichLux:

да order_type = OP_BUY OP_SELL -1

 

компилятор еще ругается на ClosePosBySelect.

Эту функцию отдельно надо прописать? 

 
Комментарии, не относящиеся к этой теме, были перенесены в "Вывел на график текущее время".
 

Vladislav Andruschenko

RichLux:

компилятор еще ругается на ClosePosBySelect.

Эту функцию отдельно надо прописать? 

 

void CPD(string order_symbol="",int order_type=-1,int order_magic=-1)
  {
   int i,k=OrdersTotal();

   if(order_symbol=="0") order_symbol=Symbol();
   for(i=k-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(order_magic<0 || OrderMagicNumber()==order_magic) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),1,CLR_GREEN);
              }
           }
        }
     }
  }
Причина обращения: