Asesores Expertos: Asesor Experto Simple MA

 

Asesor Experto Simple MA:

Algo para los que quieran probar el nuevo Probador de Estrategias y no tienen ningún EA.

Asesor Experto Simple MA

Autor: Karlis Balcers

 

En el tester da un error:

2010.04.28 06:27:44 Core 1 Error de creación de proceso [2]

 
1Serg:

En el tester da un error:

2010.04.28 06:27:44 Core 1 Error de creación de proceso [2]

Por favor, actualice a la última versión y, a continuación, busque el archivo metatester.exe en la raíz del directorio del programa.
 
Renat:
Por favor, actualice a la última versión y, a continuación, busque el archivo metatester.exe en la raíz del directorio del programa.

Gracias, funciona.

Faltan el optimizador y la visualización.

 
1Serg:

Falta el optimizador y la visualización.

El optimizador está ahí: basta con aumentar la altura de la ventana del comprobador.

La visualización llegará más tarde.

 
Renat:

El optimizador está ahí: basta con aumentar la altura de la ventana del comprobador.

La visualización vendrá después.

¡Genial!

 

Saludos,

Mr/Mrs tsaktuo, He estudiado su código K_eSimpleMA y ha sido muy útil para entender cómo es la estructura de un EA, así como conceptos como trabajar con cruces SMA.

Te agradezco mucho que hayas compartido este artículo y te doy las gracias.

Por otro lado tengo un par de preguntas; ambas están relacionadas con la funciónSymbolInfoTick :


Lo que dice el manual de MQL5 sobreSymbolInfoTick(Symbol(),tick) es que devuelve los precios actuales de un símbolo especificado en una variable del tipo MqlTick y también dice que la función devuelve true si tiene éxito, en caso contrario devuelve false.

Según lo anterior, lo que entiendo es que se imprime el mensaje ("Failed to get Symbol info!") si no hay tick recibido,. ¿Es esto correcto ? Si no lo es, ¿podría decirme a qué se debe?

La otra pregunta es: ¿Qué pasa si el mensaje se imprime cada tick?

Gracias de nuevo.

 

Existe:

trReq.sl=tick.ask-_Point*sl; // Nivel de Stop Loss de la orden

trReq.tp=tick.ask+_Point*tp; // Nivel de Take Profit de la orden

necesario:

trReq.sl=tick.bid-_Point*sl; // Nivel de Stop Loss de la orden

trReq.tp=tick.bid+_Point*tp; // Nivel de Take Profit de la orden

y cambiar para VENDER en consecuencia.

La compra se realiza al precio ask, pero se cierra al precio bid.

Si desea limitar las pérdidas y ganancias, por ejemplo, a 20 puntos, entonces se deben contar exactamente 20 puntos desde el precio bid (precio de cierre) para la COMPRA y ask (precio de cierre) para la VENTA.

 

Por favor, ¿puede decirme cómo agregar a este código para que el comercio en la tendencia MACD sin paradas?

Largo: MACD está creciendo MA rápido cruzó MA lento de arriba a abajo

Croy Long: MACD crece rápido MA cruzó lento MA de abajo hacia arriba

Corto: MACD decreciente rápido MA cruzó el lento de arriba a abajo

Corto: MACD rápida decreciente MA cruzó la lenta de abajo hacia arriba

Lo intenté así:

//+------------------------------------------------------------------+
//|MACD&DEMA.mq5
//|Copyright 2010, AM2 Group. |
//| http://www.am2_group.net
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, AM2 Group."
#property link      "http://www.am2_group.net"
#property version   "1.00"

//--- parámetros de entrada
input int Periods=2;          // Media móvil del período 1
input int Shift=38;           // Media móvil del período 2
input int SL=30;              // Stop Loss
input int TP=100;             // Take Profit
input int MAGIC=3072010;      // Consejero de números mágicos

MqlTradeRequest trReq;
MqlTradeResult trRez;
int ma1Handle;
int ma2Handle;
int macdHandle;               // Asa del indicador MACD
double ma1Val[];
double ma2Val[];
double macdVal[]; // matriz dinámica para almacenar valores numéricos MACD para barras diarias
  
int sl;
int tp;
//+------------------------------------------------------------------+
//| Función de inicialización experta|
//+------------------------------------------------------------------+
int OnInit()
{
   //Establecer valores por defecto para todas las solicitudes de nuevos pedidos
      trReq.action=TRADE_ACTION_DEAL;
      trReq.magic=MAGIC;
      trReq.symbol=Symbol();                 // Símbolo comercial
      trReq.volume=0.1;                      // Volumen solicitado para una operación en lotes
      trReq.deviation=1;                     // Desviación máxima posible del precio solicitado
      trReq.type_filling=ORDER_FILLING_AON;  // Tipo de ejecución de la orden
      trReq.type_time=ORDER_TIME_GTC;        // Tiempo de ejecución de la orden
      trReq.comment="MA Sample";
   //fin
  
   //Crear asa para 2 indicadores MA
      ma1Handle=iMA(Symbol(),PERIOD_CURRENT,Periods,0,MODE_EMA,PRICE_CLOSE);
      ma2Handle=iMA(Symbol(),PERIOD_CURRENT,Periods+Shift,0,MODE_EMA,PRICE_CLOSE);
   //---Conseguir el indicador MACD
      macdHandle=iMACD(NULL,PERIOD_D1,15,26,1,PRICE_CLOSE);
   //fin
  
   //los parámetros de entrada son de sólo lectura
      tp=0;
      sl=0;
   //fin
  
   //Suplemento de cuenta con 5 decimales
      if(_Digits==5)
      {
         sl*=10;
         tp*=10;
      }
   //fin
      
   return(0);
}
//+------------------------------------------------------------------+
//| Función de desinicialización experta|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Función tick experto|
//+------------------------------------------------------------------+
void OnTick()
  {
  
   MqlTick tick; //variable para información de tick
   if(!SymbolInfoTick(Symbol(),tick))
   {
      Print("Failed to get Symbol info!");
      return;
   }
  
   //Copiar los últimos valores del indicador MA en un buffer
   int copied=CopyBuffer(ma1Handle,0,0,4,ma1Val);
   if(copied>0)
      copied=CopyBuffer(ma2Handle,0,0,4,ma2Val);
      copied=CopyBuffer(macdHandle,0,0,4,macdVal);
   if(copied>0)
   {
      //Si MAPeriod > MAPeriod + Shift -> COMPRAR
      if(ma1Val[1]>ma2Val[1] && macdVal[1]>macdVal[2])
      {
         trReq.price=tick.bid;                   // SymbolInfoDouble(NULL,SYMBOL_BID);
         trReq.sl=tick.bid-_Point*sl;            // Nivel de Stop Loss de la orden
         trReq.tp=tick.bid+_Point*tp;            // Nivel de Take Profit de la orden
         trReq.type=ORDER_TYPE_BUY;              // Tipo de orden
         OrderSend(trReq,trRez);
      }
      //Si MAPeriod < MAPeriod + Shift -> VENDER
      else if(ma1Val[1]<ma2Val[1] && macdVal[1]<macdVal[2])
      {
         trReq.price=tick.ask;
         trReq.sl=tick.ask+_Point*sl;            // Nivel de Stop Loss de la orden
         trReq.tp=tick.ask-_Point*tp;            // Nivel de Take Profit de la orden
         trReq.type=ORDER_TYPE_SELL;             // Tipo de orden
         OrderSend(trReq,trRez);
      }
   }

  }
//+------------------------------------------------------------------+
 
Automated-Trading:

Simple MA EA:

Autor: outkast

Hola Outkast,

Soy nuevo en EA Acabo de importar el Sr. tsaktuo esimpleMA, ya que realmente no entiendo el código, veo que se ejecuta en mi gráfico, pero ¿se supone que para establecer algunos de los valores de MA, no sé necesita ayuda necesita una clase o un libro. ???

 

Me alegró encontrar su ejemplo de código, ya que resolvió mi problema de almacenar la MA y hacer que aparezca en un gráfico. Gracias por publicarlo.

La única pregunta que tengo es ¿cómo se toma la decisión de cerrar la orden abierta?

Gracias