Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1134

 
Hola, ¿podría decirme cómo hacer esto? Cómo se escribe correctamente la condición: *si hay una nueva hora*?
 
MrBrooklin:

¡Hola!

Ayúdame. Tengo una pregunta sobre el módulo de señales comerciales "Filtro de tiempo".

El caso es que he generado un EA usando este módulo y lo he configurado para que sólo permita una hora de trading al día. Principalmente opera de esa manera, pero hay días en los que mi Asesor Experto abre posiciones a la hora que quiera. He probado el módulo de señales comerciales "Filtro de tiempo" en varias combinaciones con otros módulos de señales comerciales (por ejemplo, estocástico, WPR, etc.) pero ocurre lo mismo. Además, si se establecen 2 horas consecutivas de trabajo permitido, no hay problemas, funciona bien.

¿Con qué puede estar relacionado? ¿Tal vez hay un error en el código del módulo de señales de comercio "Filtro de tiempo"? Como no soy un experto en programación, os pido que me ayudéis a resolverlo o que me deis una pista, quizás estoy haciendo algo mal.

Sinceramente, Vladimir.


Este es un ejemplo sencillo en la imagen. Un día, abre a las 7; otro día, abre a las 5; el tercer día, vuelve a abrir a las 7.


¿Puedes adjuntar un Asesor Experto mq5 a este post y especificar los parámetros del probador (dos capturas de pantalla: pestañas Configuración y Parámetros)?

 
Snajper007:
Hola, ¿podría decirme por favor. Cómo se escribe correctamente la condición: *si hay una nueva hora*?

¿Te refieres a la hora (por ejemplo, el reloj mostraba las 15:00) o a que ha nacido una nueva barra en el marco temporal H1?

 

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategia

FAQ de principiantes MQL5 MT5 MetaTrader 5

Vladimir Karputov, 2019.10.14 12:04

¿Puedes adjuntar un Asesor Experto mq5 a un mensaje y especificar los parámetros del probador (dos capturas de pantalla: pestañas Configuración y Parámetros)?


Para no ser infundado, por ejemplo, ahora mismo he generado en MQL5 Wizard el primer módulo disponible de señales de comercio AMA y un filtro de tiempo.

//+------------------------------------------------------------------+
//|                                                          AMA.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Include                                                          |
//+------------------------------------------------------------------+
#include <Expert\Expert.mqh>
//--- available signals
#include <Expert\Signal\SignalAMA.mqh>
#include <Expert\Signal\SignalITF.mqh>
//--- available trailing
#include <Expert\Trailing\TrailingNone.mqh>
//--- available money management
#include <Expert\Money\MoneyFixedRisk.mqh>
//+------------------------------------------------------------------+
//| Inputs                                                           |
//+------------------------------------------------------------------+
//--- inputs for expert
input string             Expert_Title            ="AMA";                  // Document name
ulong                    Expert_MagicNumber      =8503;                   //
bool                     Expert_EveryTick        =false;                  //
//--- inputs for main signal
input int                Signal_ThresholdOpen    =10;                     // Signal threshold value to open [0...100]
input int                Signal_ThresholdClose   =10;                     // Signal threshold value to close [0...100]
input double             Signal_PriceLevel       =0;                      // Price level to execute a deal
input double             Signal_StopLevel        =50.0;                   // Stop Loss level (in points)
input double             Signal_TakeLevel        =50.0;                   // Take Profit level (in points)
input int                Signal_Expiration       =4;                      // Expiration of pending orders (in bars)
input int                Signal_AMA_PeriodMA     =10;                     // Adaptive Moving Average(1,1,...) Period of averaging
input int                Signal_AMA_PeriodFast   =2;                      // Adaptive Moving Average(1,1,...) Period of fast EMA
input int                Signal_AMA_PeriodSlow   =30;                     // Adaptive Moving Average(1,1,...) Period of slow EMA
input int                Signal_AMA_Shift        =0;                      // Adaptive Moving Average(1,1,...) Time shift
input ENUM_APPLIED_PRICE Signal_AMA_Applied      =PRICE_CLOSE;            // Adaptive Moving Average(1,1,...) Prices series
input double             Signal_AMA_Weight       =1.0;                    // Adaptive Moving Average(1,1,...) Weight [0...1.0]
input int                Signal_ITF_GoodHourOfDay=-1;                     // IntradayTimeFilter(-1,...) Good hour
input int                Signal_ITF_BadHoursOfDay=16777087;               // IntradayTimeFilter(-1,...) Bad hours (bit-map)
input int                Signal_ITF_GoodDayOfWeek=-1;                     // IntradayTimeFilter(-1,...) Good day of week
input int                Signal_ITF_BadDaysOfWeek=0;                      // IntradayTimeFilter(-1,...) Bad days of week (bit-map)
input double             Signal_ITF_Weight       =1.0;                    // IntradayTimeFilter(-1,...) Weight [0...1.0]
//--- inputs for money
input double             Money_FixRisk_Percent   =10.0;                   // Risk percentage
//+------------------------------------------------------------------+
//| Global expert object                                             |
//+------------------------------------------------------------------+
CExpert ExtExpert;
//+------------------------------------------------------------------+
//| Initialization function of the expert                            |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Initializing expert
   if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing expert");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Creating signal
   CExpertSignal *signal=new CExpertSignal;
   if(signal==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating signal");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//---
   ExtExpert.InitSignal(signal);
   signal.ThresholdOpen(Signal_ThresholdOpen);
   signal.ThresholdClose(Signal_ThresholdClose);
   signal.PriceLevel(Signal_PriceLevel);
   signal.StopLevel(Signal_StopLevel);
   signal.TakeLevel(Signal_TakeLevel);
   signal.Expiration(Signal_Expiration);
//--- Creating filter CSignalAMA
   CSignalAMA *filter0=new CSignalAMA;
   if(filter0==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter0");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
   signal.AddFilter(filter0);
//--- Set filter parameters
   filter0.PeriodMA(Signal_AMA_PeriodMA);
   filter0.PeriodFast(Signal_AMA_PeriodFast);
   filter0.PeriodSlow(Signal_AMA_PeriodSlow);
   filter0.Shift(Signal_AMA_Shift);
   filter0.Applied(Signal_AMA_Applied);
   filter0.Weight(Signal_AMA_Weight);
//--- Creating filter CSignalITF
   CSignalITF *filter1=new CSignalITF;
   if(filter1==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter1");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
   signal.AddFilter(filter1);
//--- Set filter parameters
   filter1.GoodHourOfDay(Signal_ITF_GoodHourOfDay);
   filter1.BadHoursOfDay(Signal_ITF_BadHoursOfDay);
   filter1.GoodDayOfWeek(Signal_ITF_GoodDayOfWeek);
   filter1.BadDaysOfWeek(Signal_ITF_BadDaysOfWeek);
   filter1.Weight(Signal_ITF_Weight);
//--- Creation of trailing object
   CTrailingNone *trailing=new CTrailingNone;
   if(trailing==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating trailing");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Add trailing to expert (will be deleted automatically))
   if(!ExtExpert.InitTrailing(trailing))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing trailing");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Set trailing parameters
//--- Creation of money object
   CMoneyFixedRisk *money=new CMoneyFixedRisk;
   if(money==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating money");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Add money to expert (will be deleted automatically))
   if(!ExtExpert.InitMoney(money))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing money");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Set money parameters
   money.Percent(Money_FixRisk_Percent);
//--- Check all trading objects parameters
   if(!ExtExpert.ValidationSettings())
     {
      //--- failed
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Tuning of all necessary indicators
   if(!ExtExpert.InitIndicators())
     {
      //--- failed
      printf(__FUNCTION__+": error initializing indicators");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- ok
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Deinitialization function of the expert                          |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ExtExpert.Deinit();
  }
//+------------------------------------------------------------------+
//| "Tick" event handler function                                    |
//+------------------------------------------------------------------+
void OnTick()
  {
   ExtExpert.OnTick();
  }
//+------------------------------------------------------------------+
//| "Trade" event handler function                                   |
//+------------------------------------------------------------------+
void OnTrade()
  {
   ExtExpert.OnTrade();
  }
//+------------------------------------------------------------------+
//| "Timer" event handler function                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   ExtExpert.OnTimer();
  }
//+------------------------------------------------------------------+

Captura de pantalla de "Ajustes"


Captura de pantalla de "Ajustes".

Captura de pantalla del incorrecto del filtro de tiempo (las posiciones se abren en diferentes días a las 7, 12 y 7 horas)


 
MrBrooklin:

Para no ser infundado, por ejemplo, ahora mismo he generado en MQL5 Wizard el primer módulo disponible de señales de comercio AMA y un filtro de tiempo.

Captura de pantalla de "Ajustes"


Captura de pantalla de "Ajustes".

Captura de pantalla del funcionamiento incorrecto del filtro horario (posiciones de apertura en diferentes días a las 7, 12 y 7 horas)


1. Imagen con un gráfico - al hacer una captura de pantalla, hágalo con la herramienta "Crosshair" - no está claro de qué año se trata.

2. Cuando trabaje con las órdenes pendientes - recuerde que la orden pendiente puede activarse en un momento completamente diferente (hora y minutos) en relación con la hora de ajuste.

3. Cuando utilice módulos de señal, restablezca los parámetros a los valores por defecto y compruebe el trabajo en el mercado - sin órdenes pendientes (si el punto 2 no está claro).

 

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategia

FAQ de principiantes MQL5 MT5 MetaTrader 5

Vladimir Karputov, 2019.10.14 13:28

1. Imagen de la carta - cuando se hace un screnshot hacerlo junto con la herramienta "Crosshair" - de lo contrario no está claro qué año.

2. Cuando trabaje con órdenes pendientes - recuerde que una orden pendiente puede activarse en un momento completamente diferente (hora y minutos) en relación con la hora de colocación.

3. Cuando utilice módulos de señal, restablezca los parámetros a los valores por defecto y compruebe el trabajo en el mercado - sin las órdenes pendientes (esto es si el punto 2 no está claro).


1. En cuanto a la retícula, es comprensible. En la captura de pantalla el año es 2019 y el mes es octubre.

2. No entiendo muy bien lo de la orden pendiente. ¿Cómo sabes que el EA tiene una orden pendiente y no abre una posición al principio de la hora? ¿Puede ser más específico?

3. El Asesor Experto funciona bien con los valores por defecto de los módulos de señal. ¿Podemos modificar los valores de los parámetros?

Sinceramente, Vladimir.

 

***

1. En cuanto a la retícula, está claro. En la captura de pantalla, el año es 2019 y el mes es octubre.

***

Gracias por la aclaración.

***

2. No entiendo muy bien lo de la orden pendiente. ¿Cómo determinó que el EA ha establecido una orden pendiente y no ha abierto una posición inmediatamente al comienzo de la hora? ¿Puede ser más específico?

***

En el probador visual, basta con mirar la pestaña "Historia"

Pestaña Historia

***

3. Con los valores por defecto de los módulos de señal, el Asesor Experto funciona bien. ¿No es posible cambiar los valores de los parámetros?

***

Por supuesto que puedes, pero sólo si entiendes lo que estás haciendo y si comprendes qué parámetro es responsable de qué.

 
Vladimir Karputov:

¿Te refieres a la hora (por ejemplo, el reloj mostraba las 15:00) o a que ha nacido una nueva barra en el marco temporal H1?

El reloj marcaba las 15:00.
 
Snajper007:
El reloj marcaba las 15:00.

¿Y con qué grado de certeza quieres el resultado?

Sólo un ejemplo: Quieres ver la hora en el reloj como 3pm. Y tú lo esperas. Pero en ese momento no había ningún tick o no había conexión con el servidor. Y entonces tienes los ticks, pero el tiempo es de 15 horas 00 minutos y 36 segundos. ¿Qué vas a hacer?

 
Vladimir Karputov:

¿Y con qué grado de certeza quieres el resultado?

Sólo un ejemplo: Quieres ver la hora en el reloj como 3pm. Y tú lo esperas. Pero en ese momento no había ningún tick o no había conexión con el servidor. Y luego tienes los ticks, pero el tiempo es de 15 horas 00 minutos y 36 segundos. ¿Qué vas a hacer?

¿Puede hacer que no se compruebe exactamente el 15-00, sino el comienzo de la hora? En otras palabras, el primer minuto ya mostraría que la hora anterior había terminado y la nueva hora había comenzado.