Article publié Systèmes de trading les plus simples utilisant des indicateurs sémaphores:
Auteur : Nikolay Kositsin
Une petite remarque en passant : il y a une faute de frappe mécanique dans le fragment de code donné dans l'exemple, qui a été copié-collé :
//---- Déclarer des variables locales double TrendVelue[2];
J'ai compilé quelques signaux et redémarré, comme "Candles_SmoothedSignal.mqh" (..MQL5\Include\Expert\MySignals\Candles_SmoothedSignal.mqh), mais MetaEditor ne peut pas le voir pour créer un Conseiller Expert dans l'Assistant.
Comment puis-je résoudre ce problème ?
Merci pour cette explication excellente et complète... !
daveM
J'ai tout téléchargé et décompressé comme indiqué dans les instructions, mais le testeur donne une erreur sur tous les systèmes :
le testeur s'est arrêté car OnInit a échoué
CExpert::ValidationSettings : erreur dans les paramètres de l'argent
CMoneyFixedLot::ValidationSettings : le montant des lots doit être compris entre 1.000000 et 1000000.000000
Merci de me dire ce qu'il faut modifier.
Bonjour !
J'essaie d'ajouter le module de signal de trading ASCtrendSignal (situé dans le fichier compressé mysignals.zip) créé sur la base de l'indicateur ASCtrend (situé dans le fichier compressé indicators.zip) à l'assistant MQL5, mais rien ne fonctionne. Je place le module de signal de trading ASCtrendSignal dans IncludeExpert\Signal, et je place l'indicateur ASCtrend dans le package Indicators, tout semble correct, mais le module ne veut toujours pas s'afficher dans l'assistant MQL5. Voici le code du module de signal de trading ASCtrendSignal :
//+------------------------------------------------------------------+ //|ASCtrendSignal.mqh | //|Copyright © 2011, Nikolay Kositsin | //|Khabarovsk, farria@mail.redcom.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2011, Nikolay Kositsin. #property link "farria@mail.redcom.ru" //+------------------------------------------------------------------+ //| Fichiers inclus| //+------------------------------------------------------------------+ #property tester_indicator "ASCtrend.ex5" #include <Expert\ExpertSignal.mqh> //--- description de l'assistant début //+------------------------------------------------------------------+ //| Déclaration des constantes| //+------------------------------------------------------------------+ #define OPEN_LONG 80 // La constante qui renvoie la commande d'achat à l'Expert Advisor #define OPEN_SHORT 80 // La constante qui renvoie l'ordre de vente à l'Expert Advisor #define CLOSE_LONG 40 // La constante qui renvoie la commande de fermeture d'une position longue à l'Expert Advisor #define CLOSE_SHORT 40 // La constante qui renvoie la commande de fermeture d'une position courte à l'Expert Advisor #define REVERSE_LONG 100 // La constante qui renvoie l'ordre d'inverser une position longue au Conseiller Expert. #define REVERSE_SHORT 100 // La constante qui renvoie l'ordre d'inverser une position courte au conseiller expert. #define NO_SIGNAL 0 // La constante qui renvoie l'absence de signal à l'Expert Advisor //+----------------------------------------------------------------------+ //| Description de la classe| //| Titre=Les signaux basés sur l'indicateur ASCtrend | //| Type=SignalAdvanced.| //| Nom=ASCtrend| //| Classe=CASCtrendSignal| //| Page=| //| Paramètre=BuyPosOpen,bool,true,Permission d'acheter | //| Paramètre=SellPosOpen,bool,true,Permission de vendre | //| Paramètre=BuyPosClose,bool,true,Permission de sortir d'une position longue. //| Paramètre=SellPosClose,bool,true,Permission de sortir d'une position courte | //| Paramètre=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4, Timeframe | //| Paramètre=RISK,int,4,Niveau de risque| //| Paramètre=SignalBar,uint,1,Indice de barre pour le signal d'entrée. //+----------------------------------------------------------------------+ //--- description de l'assistant fin //+----------------------------------------------------------------------+ //| Classe CASCtrendSignal.| //| Objet : Classe de générateurs de signaux de trading basés sur l'utilisation de la technologie de l'information et de la communication. //| ASCtrend indicator values http://www.mql5.com/ru/code/491/. | //| est dérivé de la classe CExpertSignal. //+----------------------------------------------------------------------+ class CASCtrendSignal : public CExpertSignal { protected: CiCustom m_indicator; // l'objet pour l'accès aux valeurs ASCtrend //--- paramètres ajustés bool m_BuyPosOpen; // autorisation d'achat bool m_SellPosOpen; // autorisation de vente bool m_BuyPosClose; // autorisation de sortir d'une position longue bool m_SellPosClose; // autorisation de sortir d'une position courte ENUM_TIMEFRAMES m_Ind_Timeframe; // Indicateur ASCtrend timeframe uint m_RISK; // Niveau de risque uint m_SignalBar; // indice de barre pour le signal d'entrée public: CASCtrendSignal(); //--- méthodes de réglage des paramètres 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éthode de validation des paramètres ajustables virtual bool ValidationSettings(); //--- méthode de validation des paramètres ajustables virtual bool InitIndicators(CIndicators *indicators); // initialisation des indicateurs //--- méthode de génération de signaux d'entrée sur le marché virtual int LongCondition(); virtual int ShortCondition(); bool InitASCtrend(CIndicators *indicators); // Méthode d'initialisation de l'indicateur ASCtrend protected: }; //+------------------------------------------------------------------+ //|CASCtrendSignal constructor.| //| INPUT : non.| //| OUTPUT : no.| //|| REMARQUE : non.| //+------------------------------------------------------------------+ void CASCtrendSignal::CASCtrendSignal() { //--- définition des paramètres par défaut m_BuyPosOpen=true; m_SellPosOpen=true; m_BuyPosClose=true; m_SellPosClose=true; //--- paramètres d'entrée de l'indicateur 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; } //+------------------------------------------------------------------+ //| Vérification des paramètres ajustables.| //| INPUT : non.| //| OUTPUT : true (vrai) si les paramètres sont valides, false (faux) s'ils ne le sont pas. //|| REMARQUE : non.| //+------------------------------------------------------------------+ bool CASCtrendSignal::ValidationSettings() { //--- vérification des paramètres if(m_RISK<=0) { printf(__FUNCTION__+": Risk level must be above zero"); return(false); } //--- achèvement réussi return(true); } //+------------------------------------------------------------------+ //| Initialisation des indicateurs et des séries temporelles. || //| INPUT : indicateurs - pointeur sur une collection d'objets | //| d'indicateurs et de séries temporelles.| //| OUTPUT : true - en cas de succès, sinon - false. || OUTPUT : true - en cas de succès, sinon - false. || //|| REMARQUE : non.| //+------------------------------------------------------------------+ bool CASCtrendSignal::InitIndicators(CIndicators *indicators) { //--- vérification du pointeur if(indicators==NULL) return(false); //--- Initialisation de l'indicateur if(!InitASCtrend(indicators)) return(false); //--- achèvement réussi return(true); } //+------------------------------------------------------------------+ //| Initialisation de l'indicateur ASCtrend.| //| INPUT : indicateurs - pointeur sur une collection d'objets | //| d'indicateurs et de séries temporelles.| //| OUTPUT : true - en cas de succès, sinon - false. || OUTPUT : true - en cas de succès, sinon - false. || //|| REMARQUE : non.| //+------------------------------------------------------------------+ bool CASCtrendSignal::InitASCtrend(CIndicators *indicators) { //--- vérification du pointeur if(indicators==NULL) return(false); //--- ajouter un objet à la collection if(!indicators.Add(GetPointer(m_indicator))) { printf(__FUNCTION__+": error of adding the object"); return(false); } //--- réglage des paramètres de l'indicateur 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; //--- Initialisation de l'objet if(!m_indicator.Create(m_symbol.Name(),m_Ind_Timeframe,IND_CUSTOM,2,parameters)) { printf(__FUNCTION__+": object initialization error"); return(false); } //--- nombre de tampons if(!m_indicator.NumBuffers(2)) return(false); //--- L'indicateur ASCtrend a été initialisé avec succès return(true); } //+------------------------------------------------------------------+ //| Vérification des conditions d'ouverture d'une position longue et d'une position de change. //| et fermeture d'un court| //| INPUT :no| //| OUTPUT : Poids du vote de 0 à 100| //|| REMARQUE : non.| //+------------------------------------------------------------------+ int CASCtrendSignal::LongCondition() { //--- le signal d'achat est déterminé par le tampon 1 de l'indicateur ASCtrend double Signal=m_indicator.GetData(1,m_SignalBar); //--- obtention d'un signal de négociation 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); } } //--- recherche de signaux pour clôturer une position courte 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); } //--- pas de signal de négociation return(NO_SIGNAL); } //+------------------------------------------------------------------+ //| Vérification des conditions d'ouverture d'une position courte et | //| fermeture d'un long dossier| //| INPUT :no| //| OUTPUT : Poids du vote de 0 à 100| //|| REMARQUE : non.| //+------------------------------------------------------------------+ int CASCtrendSignal::ShortCondition() { //--- le signal de vente est déterminé par le tampon 0 de l'indicateur ASCtrend double Signal=m_indicator.GetData(0,m_SignalBar); //--- obtention d'un signal de négociation 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); } } //--- recherche de signaux pour clôturer une position longue 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); } //--- pas de signal de négociation return(NO_SIGNAL); } //+------------------------------------------------------------------+
Pouvez-vous me dire quel est le problème ?
Cordialement, Vladimir
Bonjour !
J'essaie d'ajouter le module de signal de trading ASCtrendSignal (situé dans le fichier compressé mysignals.zip) créé sur la base de l'indicateur ASCtrend (situé dans le fichier compressé indicators.zip) à l'assistant MQL5, mais rien ne fonctionne. Je place le module de signal de trading ASCtrendSignal dans IncludeExpert\Signal, et je place l'indicateur ASCtrend dans le package Indicators, tout semble correct, mais le module ne veut toujours pas s'afficher dans l'assistant MQL5. Voici le code du module de signal de trading ASCtrendSignal :
Pouvez-vous me dire quel est le problème ?
Cordialement, Vladimir
Je voudrais ajouter que ce même problème se produit avec d'autres modules de signaux de trading écrits sur la base d'indicateurs. Apparemment, ils ont le même problème. Merci de m'aider à résoudre ces problèmes.
Cordialement, Vladimir.
P.S. Certains indicateurs que j'ai décompressés à partir du fichier compressé indicators.zip sont installés sur le terminal et fonctionnent normalement.
C'est l'ordre qui compte :
// description de l'assistant début //+----------------------------------------------------------------------+ //| Description de la classe| //| Titre=Les signaux basés sur l'indicateur ASCtrend | //| Type=SignalAdvanced.| //| Nom=ASCtrend| //| Classe=CASCtrendSignal| //| Page=| //| Paramètre=BuyPosOpen,bool,true,Permission d'acheter | //| Paramètre=SellPosOpen,bool,true,Permission de vendre | //| Paramètre=BuyPosClose,bool,true,Permission de sortir d'une position longue. //| Paramètre=SellPosClose,bool,true,Permission de sortir d'une position courte | //| Paramètre=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4, Timeframe | //| Paramètre=RISK,int,4,Niveau de risque| //| Paramètre=SignalBar,uint,1,Indice de barre pour le signal d'entrée. //+----------------------------------------------------------------------+ // description de l'assistant end
pas
//--- wizard description start //--- wizard description end
et entre le début et la fin, seulement un bloc de service - pas de variables ni de substitutions de macros.
C'est ainsi que le module doit commencer :
//+------------------------------------------------------------------+ //|ASCtrendSignal.mqh | //|Copyright © 2011, Nikolay Kositsin | //|Khabarovsk, farria@mail.redcom.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2011, Nikolay Kositsin. #property link "farria@mail.redcom.ru" //+------------------------------------------------------------------+ //| Fichiers inclus| //+------------------------------------------------------------------+ //#propriété tester_indicateur "ASCtrend.ex5" #include <Expert\ExpertSignal.mqh> // description de l'assistant début //+----------------------------------------------------------------------+ //| Description de la classe| //| Titre=Les signaux basés sur l'indicateur ASCtrend | //| Type=SignalAdvanced.| //| Nom=ASCtrend| //| Classe=CASCtrendSignal| //| Page=| //| Paramètre=BuyPosOpen,bool,true,Permission d'acheter | //| Paramètre=SellPosOpen,bool,true,Permission de vendre | //| Paramètre=BuyPosClose,bool,true,Permission de sortir d'une position longue. //| Paramètre=SellPosClose,bool,true,Permission de sortir d'une position courte | //| Paramètre=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4, Timeframe | //| Paramètre=RISK,int,4,Niveau de risque| //| Paramètre=SignalBar,uint,1,Indice de barre pour le signal d'entrée. //+----------------------------------------------------------------------+ // description de l'assistant end //+------------------------------------------------------------------+ //| Déclaration des constantes| //+------------------------------------------------------------------+ #define OPEN_LONG 80 // La constante qui renvoie la commande d'achat à l'Expert Advisor #define OPEN_SHORT 80 // La constante qui renvoie l'ordre de vente à l'Expert Advisor #define CLOSE_LONG 40 // La constante qui renvoie la commande de fermeture d'une position longue à l'Expert Advisor #define CLOSE_SHORT 40 // La constante qui renvoie la commande de fermeture d'une position courte à l'Expert Advisor #define REVERSE_LONG 100 // La constante qui renvoie l'ordre d'inverser une position longue au Conseiller Expert. #define REVERSE_SHORT 100 // La constante qui renvoie l'ordre d'inverser une position courte au conseiller expert. #define NO_SIGNAL 0 // La constante qui renvoie l'absence de signal à l'Expert Advisor //+----------------------------------------------------------------------+ //| Classe CASCtrendSignal.| //| Objet : Classe de générateurs de signaux de trading basés sur l'utilisation de la technologie de l'information et de la communication. //| ASCtrend indicator values http://www.mql5.com/ru/code/491/. | //| est dérivé de la classe CExpertSignal. //+----------------------------------------------------------------------+ class CASCtrendSignal : public CExpertSignal {
recharger MetaEditor après avoir effectué des modifications
C'est l'ordre qui compte :
pas
et entre le début et la fin, seulement un bloc de service - pas de variables ni de substitutions de macros.
C'est ainsi qu'un module doit commencer :
recharger MetaEditor après avoir effectué des modifications
Merci, Vladimir !
Tout a fonctionné.
Cordialement, Vladimir.
Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading
Discussion autour de l'article "Systèmes de trading simples utilisant des indicateurs sémaphores"
Vladimir Karputov, 2019.10.30 08:50
L'ordre est important :
// description de l'assistant début //+----------------------------------------------------------------------+ //| Description de la classe| //| Titre=Les signaux basés sur l'indicateur ASCtrend | //| Type=SignalAdvanced| //| Nom=ASCtrend| //| Classe=CASCtrendSignal| //| Page=| //| Paramètre=BuyPosOpen,bool,true,Permission d'acheter | //| Paramètre=SellPosOpen,bool,true,Permission de vendre | //| Paramètre=BuyPosClose,bool,true,Permission de sortir d'une position longue. //| Paramètre=SellPosClose,bool,true,Permission de sortir d'une position courte | //| Paramètre=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4, Timeframe | //| Paramètre=RISK,int,4,Niveau de risque| //| Paramètre=SignalBar,uint,1,Indice de barre pour le signal d'entrée. //+----------------------------------------------------------------------+ // description de l'assistant end
mais pas
//--- wizard description start //--- wizard description end
et entre le début et la fin, seulement le bloc de service - pas de variables ni de substitutions de macros.
C'est le début que le module devrait avoir :
//+------------------------------------------------------------------+ //|ASCtrendSignal.mqh | //|Copyright © 2011, Nikolay Kositsin | //|Khabarovsk, farria@mail.redcom.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2011, Nikolay Kositsin". #property link "farria@mail.redcom.ru" //+------------------------------------------------------------------+ //| Fichiers inclus| //+------------------------------------------------------------------+ //#propriété tester_indicateur "ASCtrend.ex5" #include <Expert\ExpertSignal.mqh> // description de l'assistant début //+----------------------------------------------------------------------+ //| Description de la classe| //| Titre=Les signaux basés sur l'indicateur ASCtrend | //| Type=SignalAdvanced| //| Nom=ASCtrend| //| Classe=CASCtrendSignal| //| Page=| //| Paramètre=BuyPosOpen,bool,true,Permission d'acheter | //| Paramètre=SellPosOpen,bool,true,Permission de vendre | //| Paramètre=BuyPosClose,bool,true,Permission de sortir d'une position longue. //| Paramètre=SellPosClose,bool,true,Permission de sortir d'une position courte | //| Paramètre=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4, Timeframe | //| Paramètre=RISK,int,4,Niveau de risque| //| Paramètre=SignalBar,uint,1,Indice de barre pour le signal d'entrée. //+----------------------------------------------------------------------+ // description de l'assistant end //+------------------------------------------------------------------+ //| Déclaration des constantes| //+------------------------------------------------------------------+ #define OPEN_LONG 80 // La constante qui renvoie la commande d'achat à l'Expert Advisor #define OPEN_SHORT 80 // La constante qui renvoie l'ordre de vente à l'Expert Advisor #define CLOSE_LONG 40 // La constante qui renvoie la commande de fermeture d'une position longue à l'Expert Advisor #define CLOSE_SHORT 40 // La constante qui renvoie la commande de fermeture d'une position courte à l'Expert Advisor #define REVERSE_LONG 100 // La constante qui renvoie l'ordre d'inverser une position longue au Conseiller Expert #define REVERSE_SHORT 100 // La constante qui renvoie l'ordre d'inverser une position courte au conseiller expert. #define NO_SIGNAL 0 // La constante qui renvoie l'absence de signal à l'Expert Advisor //+----------------------------------------------------------------------+ //| Classe CASCtrendSignal.| //| Objet : Classe de générateurs de signaux de trading basés sur l'utilisation de la technologie de l'information et de la communication. //| ASCtrend indicator values http://www.mql5.com/ru/code/491/. | //| Est dérivé de la classe CExpertSignal.| //+----------------------------------------------------------------------+ class CASCtrendSignal : public CExpertSignal {
redémarrer le MetaEditor après avoir fait des changements
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
Un nouvel article Systèmes de trading simples utilisant des indicateurs de sémaphore a été publié :
Si nous examinons en profondeur tout système de trading complexe, nous verrons qu’il est basé sur un ensemble de signaux de trading simples. Par conséquent, il n’est pas nécessaire que les développeurs novices commencent à écrire des algorithmes complexes immédiatement. Cet article fournit un exemple de système de trading qui utilise des indicateurs de sémaphore pour effectuer des transactions.
Les indicateurs de sémaphore ou de signal sont de simples détecteurs qui indiquent les moments d’entrée ou de sortie du marché. Dans le cas où il y a un signal d’entrée à la barre actuelle, une étiquette appropriée apparaît sur un graphique de symboles. Cette étiquette peut ensuite être utilisée comme condition pour effectuer une transaction.
Il existe de nombreux indicateurs de ce type, mais l’essence même du système de trading original basé sur de tels indicateurs n’a pas changé du tout. Par conséquent, c’est une bonne idée de l’implémenter sous la forme la plus simple et la plus universelle. Cela permettra une utilisation plus poussée du résultat obtenu lors de l’utilisation d’indicateurs similaires sans modifications considérables.
Auteur : Nikolay Kositsin