Трейлинг-стопы и трейлинг-профит - страница 7

 
Arav007:

Вот он.

С уважением,


См. https://www. mql5.com/en/forum/150195/page6#924239 для лучшего способа
 

Я видел это и тоже тестировал.

Это также не решает проблему со"Стоп Лоссом" и "Фиксацией наименьшей прибыли", которые мне просто необходимы, чтобы сделать этот советник законченным.

 

Это начало вашего кода

if(OrdersTotal()>0)
   {//----------------------------------------------------------------->1
   for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)
     {//--------------------------------------------------------------->2    
     if(!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) continue;
     if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_1)
       {
       if (OrderProfit()<0.03)
         {
         if(OrderType()==OP_BUY)
           {  
           bOrderClosed = closeBuyOrder(iOrderType_Buy); //Closing Buy order    
           if(bOrderClosed)
             {
             Print("Buy Order 1 Closed");
             }
            else
               {
               iLastError = GetLastError();                                       
               }//end else if(bOrderClosed)
           }//end if(OrderType()==OP_BUY)
       if(OrderType()==OP_SELL)
          {  
          bOrderClosed = closeSellOrder(iOrderType_Sell); //Closing Sell order
          if(bOrderClosed)
            {
            Print("Sell Order 1 Closed");
            }
           else
              {
              iLastError = GetLastError();
              }//end else if(bOrderClosed)
          }//end if(OrderType()==OP_SELL)
        }// if (OrderProfit()<0.03)                          
      }// if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_1)

объясните, что делает этот код и

почему он делает это.... и когда это происходит

что вы хотите, чтобы этот код делал

знаете ли вы iLastError, если произошла ошибка?

 

Ооо, спасибо. Вы открыли мне глаза.

Он закрывает все открытые ордера всякий раз, когда он исполняется, потому что условие таково:

if (OrderProfit()<0.03 ).

Поэтому он закроет все только что открытые ордера, естественно.

Моя цель заключалась в том, чтобы если сделка идет в прибыль, скажем, $0.1, а затем, если сделка разворачивается обратно, она закрывается с наименьшей прибылью, скажем, $0.01.

Вероятно, это не возможно с помощью функции'OrderProfit()'.

Пришлось бы использовать трейлинг-стоп.

 
Arav007:

Я видел это и тоже тестировал.

Это также не решает проблему со стоп-лоссом и фиксацией наименьшей прибыли, которые мне просто необходимы, чтобы сделать этот советник законченным.


Что вы хотели закодировать???

какая проблема со стоплоссом?

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

 
deVries:


Что вы хотели закодировать?

какая проблема со стоплоссом?

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


Пожалуйста, простите меня.

Я не смог правильно установить параметры.

Да, это оно! Большое спасибо.

SL переместился для первых двух сделок и TP тоже.

Я использовал эти параметры:

extern double BreakEven =5;

extern double BreakEvenSL =1;

extern double TrailingStop =10;

extern double TrailingStep =3;

Просто для пояснения концепции:

Если рынок движется в прибыль на 5 пунктов от цены открытия, то Stop Loss будет установлен на 1 пункт прибыли. Затем начнет работать функция трейлинг-стопа.

С трейлинг-стопом 10, если рынок движется в прибыль на 10 пунктов от цены открытия, стоп-лосс будет установлен на 3 пункта прибыли, правильно?

И затем, если рынок достигнет еще 10 пунктов, т.е. 20 пунктов в сумме, SL будет на уровне 6 пунктов в прибыли?

С уважением,

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