Nevalyashka_BreakdownLevel: Estrategia de Trading para MetaTrader 5

Mike 2017.08.10 21:51 23 0 0
Archivos adjuntos

Autor de la ideaVladimir Khlystov, autor del código MQL5barabashkakvn.

La estrategia de trading se basa en la ruptura de un máximo/mínimo en el intervalo de tiempo seleccionado. Para recuperar posiciones perdedoras, el System Trading utiliza la estrategia "Nevalyashka" junto con una técnica de martingala para aumentar el lote.

El System Trading calcula el precio máximo y mínimo en el intervalo de tiempo especificado desde "Hora inicio" hasta "Hora fin":

Nevalyashka BreakdownLevel

Si el precio supera el máximo de este período, se abre una posición de COMPRA. Si el precio está por debajo del mínimo, se abre una posición de VENTA. El StopLoss se establece en el borde opuesto del período, es decir, en el precio mínimo para posiciones de COMPRA y en el precio máximo para posiciones de VENTA. El TakeProfit se establece en función de la altura del período de control.

Si la opción "Usar cierre por tiempo" está activada, el parámetro "Hora cierre" (hora para cerrar todas las posiciones) estará activo.

Solo se consideran horas y minutos para los parámetros "Hora inicio", "Hora fin" y "Hora cierre".

El cierre por StopLoss se monitorea en OnTradeTransaction.

Cuando se detecta "DEAL_ENTRY_OUT", se debe revisar el campo de comentario de este trato. Si el comentario contiene "sl", significa que el trato fue cerrado por StopLoss:

      if(deal_symbol==m_symbol.Name() && deal_magic==m_magic)
         if(deal_entry==DEAL_ENTRY_OUT)
           {
            MqlDateTime str1;
            TimeToStruct(TimeCurrent(),str1);
            //--- hay una posibilidad de que esto fuera un cierre en el TakeProfit
            if(StringFind(deal_comment,"tp",0)!=-1 || deal_profit>=0.0)
              {
               TradeDey=str1.day;
               return;
              }
            //--- hay una posibilidad de que esto fuera un cierre en el StopLoss            if(StringFind(deal_comment,"sl",0)!=-1)
              {
               if(TradeDey!=str1.day)
                 {
                  Print("¡Se ha detectado un cierre por StopLoss!");

                  double loss=MathAbs(deal_profit/m_symbol.TickValue()/deal_volume);

                  if(deal_type==DEAL_TYPE_SELL) // la posición de compra se cierra
                {
                    double SL=m_symbol.Bid()+loss*m_symbol.Point();
                    double TP=m_symbol.Bid()-loss*m_symbol.Point();
                    double Lot=LotCheck(deal_volume*InpK_martin);
                    if(Lot==0.0)
                        return;
                     OpenSell(SL,TP,Lot,"Nevalyashka");

                  if(deal_type==DEAL_TYPE_BUY) // la posición de venta se cierra
                    {
                    double SL=m_symbol.Ask()-loss*m_symbol.Point();
                    double TP=m_symbol.Ask()+loss*m_symbol.Point();
                    double Lot=LotCheck(deal_volume*InpK_martin);
                    if(Lot==0.0)
                        return;
                     OpenBuy(SL,TP,Lot,"Nevalyashka");
                    }
                  return;
               }
           }
       }

Abre una posición opuesta a la cerrada (si el tipo de trato es "DEAL_TYPE_SELL", entonces se cerró una posición de COMPRA; "DEAL_TYPE_BUY" significa que se cerró una posición de VENTA), con un lote incrementado multiplicado por K. martin. Si se cerró una posición con un beneficio positivo, el System Trading espera el inicio del siguiente período "Hora fin", y repite el procedimiento anterior.

El parámetro "Sin pérdida" significa el breakeven; cuando se alcanza la mitad del beneficio de la posición, el StopLoss se mueve al precio de apertura de la posición.

Ejemplo si se prueba en EUR/USD, M30:

Nevalyashka BreakdownLevel test EURUSD M30

Lista
Comentarios 0