perfeccionamiento de la estrategia del asesor - página 5

 
https://www.mql5.com/ru/code/7108 Aquí también hay material interesante sobre las redes de arrastre
 

3. el arrastre del "paso" estándar.

void TrailingStairs(int ticket,int trldistance,int trlstep)

Este tipo de arrastre es una modificación del estándar. Si no me equivoco, una vez el modelo similar fue creado porKimIV(pero porque lo relativo es más bonito... :) Se diferencia del trailing estándar, en que el trailing stop-loss no se transfiere por puntos (por ejemplo, el trailing stop-loss a la distancia de 30 puntos a +31, a +32 - por +2, etc.).Por ejemplo, trailing a una distancia de 40 pips y la distancia de stoploss de 10 pips, cuando lleguemos a +40 el stoploss se moverá a +10 pips y no cambiará nada hasta que lleguemos a +50 de beneficio (40 pips + paso) (es decir, le damos cierta libertad al precio, que es el sentido de este algoritmo), y sólo a +50 el stoploss se moverá de +10 a +20 pips, a +60 el stoploss se moverá a +30 pips y así sucesivamente.

Parámetros:
ticket -
el número de orden único (elegido antes de llamar a la función withOrderSelect());
trldistance - la distancia de la tasa actual (puntos) a la que "arrastramos" (no menos de MarketInfo(Symbol(),MODE_STOPLEVEL));
trlstep - el "paso" de cambio del stop loss (puntos) (no menos de 1).

Sitrlstep=1, esta función no se diferenciará del trailing stop estándar. La principal "característica" de este algoritmo, una vez más, es la de proporcionar a la tasa cierta "libertad de movimiento" - el Stop Loss se eleva sólo después de que el precio haya "vagado". Este algoritmo de arrastre lo encontré por primera vez en la descripción de las reglas tácticas de "Canales Móviles" ya mencionadas por V. Barishpolts.

=================

Este en el Asesor Experto es interesante

 
//+------------------------------------------------------------------+
//| ТРЕЙЛИНГ СТАНДАРТНЫЙ-СТУПЕНЧАСТЫЙ                                |
//| Функции передаётся тикет позиции, расстояние от курса открытия,  |
//| на котором трейлинг запускается (пунктов) и "шаг", с которым он  |
//| переносится (пунктов)                                            |
//| Пример: при +30 стоп на +10, при +40 - стоп на +20 и т.д.        |
//+------------------------------------------------------------------+
 
void TrailingStairs(int ticket,int trldistance,int trlstep)
   { 
   
   double nextstair; // ближайшее значение курса, при котором будем менять стоплосс
 
   // проверяем переданные значения
   if ((trldistance<MarketInfo(Symbol(),MODE_STOPLEVEL)) || (trlstep<1) || (trldistance<trlstep) || (ticket==0) || (!OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)))
      {
      Print("Трейлинг функцией TrailingStairs() невозможен из-за некорректности значений переданных ей аргументов.");
      return(0);
      } 
   
   // если длинная позиция (OP_BUY)
   if (OrderType()==OP_BUY)
      {
      // расчитываем, при каком значении курса следует скорректировать стоплосс
      // если стоплосс ниже открытия или равен 0 (не выставлен), то ближайший уровень = курс открытия + trldistance + спрэд
      if ((OrderStopLoss()==0) || (OrderStopLoss()<OrderOpenPrice()))
      nextstair = OrderOpenPrice() + trldistance*Point;
         
      // иначе ближайший уровень = текущий стоплосс + trldistance + trlstep + спрэд
      else
      nextstair = OrderStopLoss() + trldistance*Point;
 
      // если текущий курс (Bid) >= nextstair и новый стоплосс точно лучше текущего, корректируем последний
      if (Bid>=nextstair)
         {
         if ((OrderStopLoss()==0) || (OrderStopLoss()<OrderOpenPrice()) && (OrderOpenPrice() + trlstep*Point<Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)) 
            {
            if (!OrderModify(ticket,OrderOpenPrice(),OrderOpenPrice() + trlstep*Point,OrderTakeProfit(),OrderExpiration()))
            Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError());
            }
         }
      else
         {
         if (!OrderModify(ticket,OrderOpenPrice(),OrderStopLoss() + trlstep*Point,OrderTakeProfit(),OrderExpiration()))
         Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError());
         }
      }
      
   // если короткая позиция (OP_SELL)
   if (OrderType()==OP_SELL)
      { 
      // расчитываем, при каком значении курса следует скорректировать стоплосс
      // если стоплосс ниже открытия или равен 0 (не выставлен), то ближайший уровень = курс открытия + trldistance + спрэд
      if ((OrderStopLoss()==0) || (OrderStopLoss()>OrderOpenPrice()))
      nextstair = OrderOpenPrice() - (trldistance + MarketInfo(Symbol(),MODE_SPREAD))*Point;
      
      // иначе ближайший уровень = текущий стоплосс + trldistance + trlstep + спрэд
      else
      nextstair = OrderStopLoss() - (trldistance + MarketInfo(Symbol(),MODE_SPREAD))*Point;
       
      // если текущий курс (Аск) >= nextstair и новый стоплосс точно лучше текущего, корректируем последний
      if (Ask<=nextstair)
         {
         if ((OrderStopLoss()==0) || (OrderStopLoss()>OrderOpenPrice()) && (OrderOpenPrice() - (trlstep + MarketInfo(Symbol(),MODE_SPREAD))*Point>Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
            {
            if (!OrderModify(ticket,OrderOpenPrice(),OrderOpenPrice() - (trlstep + MarketInfo(Symbol(),MODE_SPREAD))*Point,OrderTakeProfit(),OrderExpiration()))
            Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError());
            }
         }
      else
         {
         if (!OrderModify(ticket,OrderOpenPrice(),OrderStopLoss()- (trlstep + MarketInfo(Symbol(),MODE_SPREAD))*Point,OrderTakeProfit(),OrderExpiration()))
         Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError());
         }
      }      
   }

Aquí está su código completo, que se inserta en lugar de

//+------------------------------------------------------------------+
void TrailingStairs(int ticket,int trldistance)
   {
    int Spred=Ask - Bid;
    if (OrderType()==OP_BUY)
      {
       if((Bid-OrderOpenPrice())>(Point*trldistance))
         {
          if(OrderStopLoss()<Bid-Point*trldistance || (OrderStopLoss()==0))
            {
             OrderModify(ticket,OrderOpenPrice(),Bid-Point*trldistance,OrderTakeProfit(),0,Green);
             if (PolLots)
             if (NormalizeDouble(OrderLots()/2,2)>MarketInfo(Symbol(), MODE_MINLOT))
               {
               OrderClose(ticket,NormalizeDouble(OrderLots()/2,2),Ask,3,Green);
               }
             else
               {
               OrderClose(ticket,OrderLots(),Ask,3,Green);
               }
            }
         }
       }
     else
       {
        if((OrderOpenPrice()-Ask)>(Point*trldistance))
          {
           if((OrderStopLoss()>(Ask+Point*trldistance)) || (OrderStopLoss()==0))
             {
              OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*trldistance,OrderTakeProfit(),0,Red);
             if (PolLots)
             if (NormalizeDouble(OrderLots()/2,2)>MarketInfo(Symbol(), MODE_MINLOT))
               {
               OrderClose(ticket,NormalizeDouble(OrderLots()/2,2),Bid,3,Green);
               }
             else
               {
               OrderClose(ticket,OrderLots(),Bid,3,Green);
               }
             }
          }
        }
    }


este

 

Recomiendo empezar modificando un EA que te guste, en lugar de insertarlo en el tuyo propio - el resultado será casi el mismo, pero habrá menos complicaciones.

Además, la capacidad de leer y entender el código de otra persona será muy útil...

 
ktest0:

Recomiendo empezar modificando un EA que te guste, en lugar de insertarlo en el tuyo propio - el resultado será casi el mismo, pero habrá menos complicaciones.

Además, la capacidad de leer y entender el código de otra persona será muy útil...

Mientras quiera tener, ¡no podrá!
 
borilunad:
Siempre que quiera tener, no podrá.

))) Ahí es donde todo el mundo empieza... Y entonces - cuanto más se adentra en el bosque, más gordos son los partisanos...
 

Me puedes decir por favor cómo escribir un código en un EA,
¿Cuál sería el máximo y el mínimo para un determinado periodo (por ejemplo, 10.45 - 11.15)?

He encendido el EA a las 9.00 -> cuando a las 10.45 se encendió y comenzó a monitorear. Cuando una barra se cerró (por ejemplo, el gráfico de 15 min) 11.15 lee y continúa monitoreando, por ejemplo, he identificado el Alto y el Bajo y poner órdenes no muy lejos de estas líneas.

Le agradezco de antemano sus comentarios.

 
Bueno, puedes hacer girar al concejal....
 

No puedo entender qué principio se utiliza para conectar el tralling.

De hecho, sólo debería funcionar

 
IRIP:

No puedo entender qué principio se utiliza para conectar el tralling.

Al fin y al cabo, debería funcionar sin más.


Nada ni nadie "funcionará sin más".

Hay que entender qué busca este rastro en particular, en qué condiciones rastrea, con qué paso, si hay alguna condición adicional.

Si se desmonta el código de arrastre, todo queda claro, pero el principio "plug and play" no conduce a buenos resultados....

Razón de la queja: