Artículo publicado Sistemas de trading más sencillos utilizando indicadores semáforos:
Autor: Nikolay Kositsin
Una pequeña observación en el camino - hay un error tipográfico mecánico en el fragmento de código dado en el ejemplo, que fue copiado-pegado:
//---- Declaración de variables locales double TrendVelue[2];
He compilado algunas señales y reiniciar, como "Candles_SmoothedSignal.mqh" (.. MQL5\Include\Expert\MySignals\Candles_SmoothedSignal.mqh), pero MetaEditor no puede verlo para hacer un Asesor Experto en el Asistente.
¿Cómo puedo solucionarlo?
¡Gracias por esta explicación tan excelente y completa ...!
daveM
He descargado y desempaquetado todo como se indica en las instrucciones, pero el probador da un error en todos los sistemas:
tester se detuvo porque OnInit falló
CExpert::ValidationSettings: error parámetros dinero
CMoneyFixedLot::ValidationSettings: la cantidad del lote debe estar en el rango de 1.000000 a 1000000.000000
Por favor, dime lo que ajustar.
¡Hola!
Estoy intentando añadir el módulo de señales de trading ASCtrendSignal (ubicado en el archivo comprimido mysignals.zip) creado en base al indicador ASCtrend (ubicado en el archivo comprimido indicators.zip) al MQL5 Wizard, pero nada funciona. Coloco el módulo de señales de trading ASCtrendSignal en Include\Expert\Signal, y coloco el indicador ASCtrend en el paquete Indicators, todo parece correcto, pero el módulo persistentemente no quiere mostrarse en el MQL5 Wizard. Aquí está el código del módulo de señales de trading ASCtrendSignal:
//+------------------------------------------------------------------+ //|ASCtrendSignal.mqh //|Derechos de autor © 2011, Nikolay Kositsin || //|Khabarovsk, farria@mail.redcom.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2011, Nikolay Kositsin". #property link "farria@mail.redcom.ru" //+------------------------------------------------------------------+ //| Archivos incluidos| //+------------------------------------------------------------------+ #property tester_indicator "ASCtrend.ex5" #include <Expert\ExpertSignal.mqh> //--- descripción del asistente inicio //+------------------------------------------------------------------+ //| Declaración de constantes| //+------------------------------------------------------------------+ #define OPEN_LONG 80 // La constante para devolver la orden de compra al Asesor Experto #define OPEN_SHORT 80 // La constante para devolver la orden de venta al Asesor Experto #define CLOSE_LONG 40 // La constante para devolver la orden de cerrar una posición larga al Asesor Experto #define CLOSE_SHORT 40 // La constante para devolver la orden de cerrar una posición corta al Asesor Experto #define REVERSE_LONG 100 // La constante para devolver la orden de invertir una posición larga al Asesor Experto #define REVERSE_SHORT 100 // La constante para devolver la orden de invertir una posición corta al Asesor Experto #define NO_SIGNAL 0 // La constante para devolver la ausencia de señal al Asesor Experto //+----------------------------------------------------------------------+ //| Descripción de la clase| //| Title=Las señales basadas en el indicador ASCtrend || //| Type=SignalAdvanced.| //| Nombre=ASCtrend| //| Class=CASCtrendSignal| //| Página=| //| Parameter=BuyPosOpen,bool,true,Permiso para comprar || //| Parameter=SellPosOpen,bool,true,Permiso para vender || //| Parameter=BuyPosClose,bool,true,Permiso para salir de una posición larga | //| Parameter=SellPosClose,bool,true,Permiso para salir de una posición corta | //| Parameter=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe | //| Parámetro=RISK,int,4,Nivel de riesgo| //| Parameter=SignalBar,uint,1,Indice de la barra para la señal de entrada || //+----------------------------------------------------------------------+ //--- descripción del asistente fin //+----------------------------------------------------------------------+ //| Clase CASCtrendSignal.| //| Propósito: Clase de generador de señales de comercio basado en | //| ASCtrend indicator values http://www.mql5.com/ru/code/491/. | //| Deriva de la clase CExpertSignal. //+----------------------------------------------------------------------+ class CASCtrendSignal : public CExpertSignal { protected: CiCustom m_indicator; // el objeto para acceder a los valores ASCtrend //--- parámetros ajustados bool m_BuyPosOpen; // permiso para comprar bool m_SellPosOpen; // autorización de venta bool m_BuyPosClose; // permiso para salir de una posición larga bool m_SellPosClose; // permiso para salir de una posición corta ENUM_TIMEFRAMES m_Ind_Timeframe; // Plazo del indicador ASCtrend uint m_RISK; // Nivel de riesgo uint m_SignalBar; // índice de barra para la señal de entrada public: CASCtrendSignal(); //--- métodos de configuración de parámetros ajustables void BuyPosOpen(bool value) { m_BuyPosOpen=value; } void SellPosOpen(bool value) { m_SellPosOpen=value; } void BuyPosClose(bool value) { m_BuyPosClose=value; } void SellPosClose(bool value) { m_SellPosClose=value; } void Ind_Timeframe(ENUM_TIMEFRAMES value) { m_Ind_Timeframe=value; } void RISK(uint value) { m_RISK=value; } void SignalBar(uint value) { m_SignalBar=value; } //--- método de validación de parámetros ajustables virtual bool ValidationSettings(); //--- método de validación de parámetros ajustables virtual bool InitIndicators(CIndicators *indicators); // inicialización de los indicadores //--- método de generación de señales de entrada al mercado virtual int LongCondition(); virtual int ShortCondition(); bool InitASCtrend(CIndicators *indicators); // Método de inicialización del indicador ASCtrend protected: }; //+------------------------------------------------------------------+ //|Constructor de CASCtrendSignal.| //| INPUT: no.| //| SALIDA: no.| //|| OBSERVACIÓN: no.| //+------------------------------------------------------------------+ void CASCtrendSignal::CASCtrendSignal() { //--- configuración de los parámetros por defecto m_BuyPosOpen=true; m_SellPosOpen=true; m_BuyPosClose=true; m_SellPosClose=true; //--- parámetros de entrada del indicador m_Ind_Timeframe=PERIOD_H4; m_RISK=4; //--- m_SignalBar=1; m_used_series=USE_SERIES_OPEN+USE_SERIES_HIGH+USE_SERIES_LOW+USE_SERIES_CLOSE; } //+------------------------------------------------------------------+ //| Comprobación de parámetros ajustables.| //| INPUT: no.| //| OUTPUT: true si la configuración es válida, false - si no lo es. ||| //|| OBSERVACIÓN: no.| //+------------------------------------------------------------------+ bool CASCtrendSignal::ValidationSettings() { //--- comprobación de parámetros if(m_RISK<=0) { printf(__FUNCTION__+": Risk level must be above zero"); return(false); } //--- completado con éxito return(true); } //+------------------------------------------------------------------+ //| Inicialización de indicadores y series temporales. //| INPUT: indicadores - puntero a una colección de objetos || //| de indicadores y series temporales.| //| OUTPUT: true - en caso de éxito, de lo contrario - false. || OUTPUT: true - en caso de éxito, de lo contrario - false. ||| //|| OBSERVACIÓN: no.| //+------------------------------------------------------------------+ bool CASCtrendSignal::InitIndicators(CIndicators *indicators) { //--- comprobación del puntero if(indicators==NULL) return(false); //--- inicialización del indicador if(!InitASCtrend(indicators)) return(false); //--- completado con éxito return(true); } //+------------------------------------------------------------------+ //| Inicialización del indicador ASCtrend.| //| INPUT: indicadores - puntero a una colección de objetos || //| de indicadores y series temporales.| //| OUTPUT: true - en caso de éxito, de lo contrario - false. || OUTPUT: true - en caso de éxito, de lo contrario - false. ||| //|| OBSERVACIÓN: no.| //+------------------------------------------------------------------+ bool CASCtrendSignal::InitASCtrend(CIndicators *indicators) { //--- comprobación del puntero if(indicators==NULL) return(false); //--- añadir un objeto a la colección if(!indicators.Add(GetPointer(m_indicator))) { printf(__FUNCTION__+": error of adding the object"); return(false); } //--- configuración de los parámetros del indicador MqlParam parameters[2]; parameters[0].type=TYPE_STRING; parameters[0].string_value="ASCtrend.ex5"; parameters[1].type=TYPE_INT; parameters[1].integer_value=m_RISK; //--- inicialización del objeto if(!m_indicator.Create(m_symbol.Name(),m_Ind_Timeframe,IND_CUSTOM,2,parameters)) { printf(__FUNCTION__+": object initialization error"); return(false); } //--- número de buffers if(!m_indicator.NumBuffers(2)) return(false); //--- Indicador ASCtrend inicializado con éxito return(true); } //+------------------------------------------------------------------+ //| Comprobación de las condiciones para la apertura de una posición larga y | //| y cerrando una corta| //| INPUT:no| //| SALIDA: Peso del voto de 0 a 100| //|| OBSERVACIÓN: no.| //+------------------------------------------------------------------+ int CASCtrendSignal::LongCondition() { //--- la señal de compra está determinada por el buffer 1 del indicador ASCtrend double Signal=m_indicator.GetData(1,m_SignalBar); //--- obteniendo una señal de negociación if(Signal && Signal!=EMPTY_VALUE) { if(m_BuyPosOpen) { if(m_SellPosClose) return(REVERSE_SHORT); else return(OPEN_LONG); } else { if(m_SellPosClose) return(CLOSE_SHORT); } } //--- buscando señales para cerrar una posición corta if(!m_SellPosClose) return(NO_SIGNAL); int Bars_=Bars(m_symbol.Name(),m_Ind_Timeframe); for(int bar=int(m_SignalBar); bar<Bars_; bar++) { Signal=m_indicator.GetData(0,bar); if(Signal && Signal!=EMPTY_VALUE) return(NO_SIGNAL); Signal=m_indicator.GetData(1,bar); if(Signal && Signal!=EMPTY_VALUE) return(CLOSE_SHORT); } //--- no hay señal de negociación return(NO_SIGNAL); } //+------------------------------------------------------------------+ //| Comprobación de las condiciones para la apertura de una posición corta y | //| cerrando una larga| //| INPUT:no| //| SALIDA: Peso del voto de 0 a 100| //|| OBSERVACIÓN: no.| //+------------------------------------------------------------------+ int CASCtrendSignal::ShortCondition() { //--- la señal de venta está determinada por el buffer 0 del indicador ASCtrend double Signal=m_indicator.GetData(0,m_SignalBar); //--- obteniendo una señal de negociación if(Signal && Signal!=EMPTY_VALUE) { if(m_SellPosOpen) { if(m_BuyPosClose) return(REVERSE_LONG); else return(OPEN_SHORT); } else { if(m_BuyPosClose) return(CLOSE_LONG); } } //--- buscando señales para cerrar una posición larga if(!m_BuyPosClose) return(NO_SIGNAL); int Bars_=Bars(m_symbol.Name(),m_Ind_Timeframe); // Здесь код исправлен с учетом подсказки от Владимира Карпутова: Symbol() заменен на m_symbol.Name() for(int bar=int(m_SignalBar); bar<Bars_; bar++) { Signal=m_indicator.GetData(1,bar); if(Signal && Signal!=EMPTY_VALUE) return(NO_SIGNAL); Signal=m_indicator.GetData(0,bar); if(Signal && Signal!=EMPTY_VALUE) return(CLOSE_LONG); } //--- no hay señal de negociación return(NO_SIGNAL); } //+------------------------------------------------------------------+
¿Puede decirme cuál puede ser el problema?
Saludos, Vladimir
¡Hola!
Estoy intentando añadir el módulo de señales de trading ASCtrendSignal (ubicado en el archivo comprimido mysignals.zip) creado en base al indicador ASCtrend (ubicado en el archivo comprimido indicators.zip) al MQL5 Wizard, pero nada funciona. Coloco el módulo de señales de trading ASCtrendSignal en Include\Expert\Signal, y coloco el indicador ASCtrend en el paquete Indicators, todo parece correcto, pero el módulo persistentemente no quiere mostrarse en el MQL5 Wizard. Aquí está el código del módulo de señal de comercio ASCtrendSignal:
¿Pueden decirme cual puede ser el problema?
Saludos, Vladimir
Me gustaría añadir que este mismo problema se produce con otros módulos de señales comerciales escritas sobre la base de indicadores. Al parecer, tienen el mismo problema. Por favor, ayuda en la solución de estos problemas.
Saludos, Vladimir.
P.D. Algunos indicadores que descomprimí del archivo comprimido indicators. zip están instalados en el terminal y funcionan normalmente.
Lo que cuenta es el orden:
// descripción del asistente inicio //+----------------------------------------------------------------------+ //| Descripción de la clase| //| Title=Las señales basadas en el indicador ASCtrend || //| Type=SignalAdvanced.| //| Nombre=ASCtrend| //| Class=CASCtrendSignal| //| Página=| //| Parameter=BuyPosOpen,bool,true,Permiso para comprar || //| Parameter=SellPosOpen,bool,true,Permiso para vender || //| Parameter=BuyPosClose,bool,true,Permiso para salir de una posición larga | //| Parameter=SellPosClose,bool,true,Permiso para salir de una posición corta | //| Parameter=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe | //| Parámetro=RISK,int,4,Nivel de riesgo| //| Parameter=SignalBar,uint,1,Indice de la barra para la señal de entrada || //+----------------------------------------------------------------------+ // descripción del asistente fin
no
//--- wizard description start //--- wizard description end
y entre el inicio y el final sólo un bloque de servicio - sin variables ni sustituciones de macros.
Así es como el módulo debe comenzar
//+------------------------------------------------------------------+ //|ASCtrendSignal.mqh //|Derechos de autor © 2011, Nikolay Kositsin || //|Khabarovsk, farria@mail.redcom.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2011, Nikolay Kositsin". #property link "farria@mail.redcom.ru" //+------------------------------------------------------------------+ //| Archivos incluidos| //+------------------------------------------------------------------+ //#property tester_indicator "ASCtrend.ex5" #include <Expert\ExpertSignal.mqh> // descripción del asistente inicio //+----------------------------------------------------------------------+ //| Descripción de la clase| //| Title=Las señales basadas en el indicador ASCtrend || //| Type=SignalAdvanced.| //| Nombre=ASCtrend| //| Class=CASCtrendSignal| //| Página=| //| Parameter=BuyPosOpen,bool,true,Permiso para comprar || //| Parameter=SellPosOpen,bool,true,Permiso para vender || //| Parameter=BuyPosClose,bool,true,Permiso para salir de una posición larga | //| Parameter=SellPosClose,bool,true,Permiso para salir de una posición corta | //| Parameter=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe | //| Parámetro=RISK,int,4,Nivel de riesgo| //| Parameter=SignalBar,uint,1,Indice de la barra para la señal de entrada || //+----------------------------------------------------------------------+ // descripción del asistente fin //+------------------------------------------------------------------+ //| Declaración de constantes| //+------------------------------------------------------------------+ #define OPEN_LONG 80 // La constante para devolver la orden de compra al Asesor Experto #define OPEN_SHORT 80 // La constante para devolver la orden de venta al Asesor Experto #define CLOSE_LONG 40 // La constante para devolver la orden de cerrar una posición larga al Asesor Experto #define CLOSE_SHORT 40 // La constante para devolver la orden de cerrar una posición corta al Asesor Experto #define REVERSE_LONG 100 // La constante para devolver la orden de invertir una posición larga al Asesor Experto #define REVERSE_SHORT 100 // La constante para devolver la orden de invertir una posición corta al Asesor Experto #define NO_SIGNAL 0 // La constante para devolver la ausencia de señal al Asesor Experto //+----------------------------------------------------------------------+ //| Clase CASCtrendSignal.| //| Propósito: Clase de generador de señales de comercio basado en | //| ASCtrend indicator values http://www.mql5.com/ru/code/491/. | //| Deriva de la clase CExpertSignal. //+----------------------------------------------------------------------+ class CASCtrendSignal : public CExpertSignal {
recargar MetaEditor después de hacer ediciones
Lo que cuenta es el orden:
no
y entre el inicio y el final sólo un bloque de servicio - sin variables ni sustituciones de macros.
Así es como debe empezar un módulo:
recargar MetaEditor después de hacer ediciones
¡Gracias, Vladimir!
Todo ha funcionado.
Saludos, Vladimir.
Foro sobre negociación, sistemas automatizados de negociación y prueba de estrategias de negociación
Discusión del artículo "Sistemas sencillos de trading utilizando indicadores semáforos"
Vladimir Karputov, 2019.10.30 08:50
El orden es importante:
// descripción del asistente inicio //+----------------------------------------------------------------------+ //| Descripción de la clase| //| Title=Las señales basadas en el indicador ASCtrend || //| Type=SignalAdvanced| //| Nombre=ASCtrend| //| Class=CASCtrendSignal| //| Página=| //| Parameter=BuyPosOpen,bool,true,Permiso para comprar || //| Parameter=SellPosOpen,bool,true,Permiso para vender || //| Parameter=BuyPosClose,bool,true,Permiso para salir de una posición larga | //| Parameter=SellPosClose,bool,true,Permiso para salir de una posición corta | //| Parameter=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe | //| Parámetro=RISK,int,4,Nivel de riesgo| //| Parameter=SignalBar,uint,1,Indice de la barra para la señal de entrada || //+----------------------------------------------------------------------+ // descripción del asistente fin
pero no
//--- wizard description start //--- wizard description end
y entre el inicio y el final sólo el bloque de servicio - sin variables y sustituciones de macros.
Este es el comienzo que debe tener el módulo:
//+------------------------------------------------------------------+ //|ASCtrendSignal.mqh //|Copyright © 2011, Nikolay Kositsin || //|Khabarovsk, farria@mail.redcom.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2011, Nikolay Kositsin" #property link "farria@mail.redcom.ru" //+------------------------------------------------------------------+ //| Archivos incluidos| //+------------------------------------------------------------------+ //#property tester_indicator "ASCtrend.ex5" #include <Expert\ExpertSignal.mqh> // descripción del asistente inicio //+----------------------------------------------------------------------+ //| Descripción de la clase| //| Title=Las señales basadas en el indicador ASCtrend || //| Type=SignalAdvanced| //| Nombre=ASCtrend| //| Class=CASCtrendSignal| //| Página=| //| Parameter=BuyPosOpen,bool,true,Permiso para comprar || //| Parameter=SellPosOpen,bool,true,Permiso para vender || //| Parameter=BuyPosClose,bool,true,Permiso para salir de una posición larga | //| Parameter=SellPosClose,bool,true,Permiso para salir de una posición corta | //| Parameter=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe | //| Parámetro=RISK,int,4,Nivel de riesgo| //| Parameter=SignalBar,uint,1,Indice de la barra para la señal de entrada || //+----------------------------------------------------------------------+ // descripción del asistente fin //+------------------------------------------------------------------+ //| Declaración de constantes| //+------------------------------------------------------------------+ #define OPEN_LONG 80 // La constante para devolver la orden de compra al Asesor Experto #define OPEN_SHORT 80 // La constante para devolver la orden de venta al Asesor Experto #define CLOSE_LONG 40 // La constante para devolver la orden de cerrar una posición larga al Asesor Experto #define CLOSE_SHORT 40 // La constante para devolver la orden de cerrar una posición corta al Asesor Experto #define REVERSE_LONG 100 // La constante para devolver la orden de invertir una posición larga al Asesor Experto #define REVERSE_SHORT 100 // La constante para devolver la orden de invertir una posición corta al Asesor Experto #define NO_SIGNAL 0 // La constante para devolver la ausencia de señal al Asesor Experto //+----------------------------------------------------------------------+ //| Clase CASCtrendSignal.| //| Propósito: Clase de generador de señales de comercio basado en | //| ASCtrend indicator values http://www.mql5.com/ru/code/491/. | //| Deriva de la clase CExpertSignal.| //+----------------------------------------------------------------------+ class CASCtrendSignal : public CExpertSignal {
reiniciar el MetaEditor después de hacer cambios
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Artículo publicado Sistemas de trading simples usando indicadores semáforo:
Si examinamos en profundidad cualquier sistema de trading complejo veremos que está basado en un conjunto de simples señales de trading. Por tanto, no es necesario que los programadores con menos experiencia comiencen a escribir complejos algorítmicos inmediatamente. Este artículo proporciona un ejemplo de un sistema de trading que utiliza indicadores semáforo para realizar las transacciones.
Autor: Nikolay Kositsin