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)?
¿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 expertinputstring Expert_Title ="AMA"; // Document nameulong Expert_MagicNumber =8503; //bool Expert_EveryTick =false; ////--- inputs for main signalinputint Signal_ThresholdOpen =10; // Signal threshold value to open [0...100]inputint Signal_ThresholdClose =10; // Signal threshold value to close [0...100]inputdouble Signal_PriceLevel =0; // Price level to execute a dealinputdouble Signal_StopLevel =50.0; // Stop Loss level (in points)inputdouble Signal_TakeLevel =50.0; // Take Profit level (in points)inputint Signal_Expiration =4; // Expiration of pending orders (in bars)inputint Signal_AMA_PeriodMA =10; // Adaptive Moving Average(1,1,...) Period of averaginginputint Signal_AMA_PeriodFast =2; // Adaptive Moving Average(1,1,...) Period of fast EMAinputint Signal_AMA_PeriodSlow =30; // Adaptive Moving Average(1,1,...) Period of slow EMAinputint Signal_AMA_Shift =0; // Adaptive Moving Average(1,1,...) Time shiftinputENUM_APPLIED_PRICE Signal_AMA_Applied =PRICE_CLOSE; // Adaptive Moving Average(1,1,...) Prices seriesinputdouble Signal_AMA_Weight =1.0; // Adaptive Moving Average(1,1,...) Weight [0...1.0]inputint Signal_ITF_GoodHourOfDay=-1; // IntradayTimeFilter(-1,...) Good hourinputint Signal_ITF_BadHoursOfDay=16777087; // IntradayTimeFilter(-1,...) Bad hours (bit-map)inputint Signal_ITF_GoodDayOfWeek=-1; // IntradayTimeFilter(-1,...) Good day of weekinputint Signal_ITF_BadDaysOfWeek=0; // IntradayTimeFilter(-1,...) Bad days of week (bit-map)inputdouble Signal_ITF_Weight =1.0; // IntradayTimeFilter(-1,...) Weight [0...1.0]//--- inputs for moneyinputdouble Money_FixRisk_Percent =10.0; // Risk percentage//+------------------------------------------------------------------+//| Global expert object |//+------------------------------------------------------------------+
CExpert ExtExpert;
//+------------------------------------------------------------------+//| Initialization function of the expert |//+------------------------------------------------------------------+intOnInit()
{
//--- Initializing expertif(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
{
//--- failedprintf(__FUNCTION__+": error initializing expert");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Creating signal
CExpertSignal *signal=new CExpertSignal;
if(signal==NULL)
{
//--- failedprintf(__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)
{
//--- failedprintf(__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)
{
//--- failedprintf(__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)
{
//--- failedprintf(__FUNCTION__+": error creating trailing");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Add trailing to expert (will be deleted automatically))if(!ExtExpert.InitTrailing(trailing))
{
//--- failedprintf(__FUNCTION__+": error initializing trailing");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Set trailing parameters//--- Creation of money object
CMoneyFixedRisk *money=new CMoneyFixedRisk;
if(money==NULL)
{
//--- failedprintf(__FUNCTION__+": error creating money");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Add money to expert (will be deleted automatically))if(!ExtExpert.InitMoney(money))
{
//--- failedprintf(__FUNCTION__+": error initializing money");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Set money parameters
money.Percent(Money_FixRisk_Percent);
//--- Check all trading objects parametersif(!ExtExpert.ValidationSettings())
{
//--- failed
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Tuning of all necessary indicatorsif(!ExtExpert.InitIndicators())
{
//--- failedprintf(__FUNCTION__+": error initializing indicators");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- okreturn(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Deinitialization function of the expert |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
ExtExpert.Deinit();
}
//+------------------------------------------------------------------+//| "Tick" event handler function |//+------------------------------------------------------------------+voidOnTick()
{
ExtExpert.OnTick();
}
//+------------------------------------------------------------------+//| "Trade" event handler function |//+------------------------------------------------------------------+voidOnTrade()
{
ExtExpert.OnTrade();
}
//+------------------------------------------------------------------+//| "Timer" event handler function |//+------------------------------------------------------------------+voidOnTimer()
{
ExtExpert.OnTimer();
}
//+------------------------------------------------------------------+
Captura de pantalla de "Ajustes"
Captura de pantalla de "Ajustes".
Captura de pantalla delincorrecto del filtro de tiempo (las posiciones se abren en diferentes días a las 7, 12 y 7 horas)
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).
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?
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"
***
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é.
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?
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.
¡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)?
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.
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)
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"
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é.
¿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.
¿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?
¿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?