Veröffentlichter Artikel Simplest trading systems using semaphore indicators:
Autor: Nikolay Kositsin
Eine kleine Bemerkung am Rande - es gibt einen mechanischen Tippfehler in dem Code-Fragment im Beispiel, das kopiert wurde:
//---- Deklaration lokaler Variablen double TrendVelue[2];
Ich kompilierte einige Signale und Neustart, wie "Candles_SmoothedSignal.mqh" (..MQL5\Include\Expert\MySignals\Candles_SmoothedSignal.mqh), aber MetaEditor kann es nicht sehen, um einen Expert Advisor im Assistenten zu machen.
Wie kann ich das Problem lösen?
Ich habe alles heruntergeladen und entpackt, wie in der Anleitung angegeben, aber der Tester gibt einen Fehler auf allen Systemen:
Tester gestoppt, weil OnInit fehlgeschlagen ist
CExpert::ValidationSettings: Fehler Geldparameter
CMoneyFixedLot::ValidationSettings: Lots amount must be in the range from 1.000000 to 1000000.000000
Bitte sagen Sie mir, was ich ändern muss.
Hallo!
Ich versuche, das Handelssignalmodul ASCtrendSignal (in der komprimierten Datei mysignals.zip), das auf der Grundlage des ASCtrend-Indikators (in der komprimierten Datei indicators.zip) erstellt wurde, zum MQL5-Assistenten hinzuzufügen, aber nichts funktioniert. Ich platziere das Handelssignalmodul ASCtrendSignal in Include\Expert\Signal, und platziere den ASCtrend-Indikator im Indikatorenpaket, alles scheint korrekt zu sein, aber das Modul will hartnäckig nicht im MQL5-Assistenten angezeigt werden. Hier ist der Code des ASCtrendSignal Handelssignalmoduls:
//+------------------------------------------------------------------+ //|ASCtrendSignal.mqh | //|Urheberrecht © 2011, Nikolay Kositsin | //|Chabarowsk, farria@mail.redcom.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2011, Nikolay Kositsin". #property link "farria@mail.redcom.ru" //+------------------------------------------------------------------+ //| Enthaltene Dateien| //+------------------------------------------------------------------+ #property tester_indicator "ASCtrend.ex5" #include <Expert\ExpertSignal.mqh> //--- Assistent Beschreibung Start //+------------------------------------------------------------------+ //| Deklaration von Konstanten| //+------------------------------------------------------------------+ #define OPEN_LONG 80 // Die Konstante für die Rückgabe des Kaufbefehls an den Expert Advisor #define OPEN_SHORT 80 // Die Konstante für die Rückgabe des Verkaufsbefehls an den Expert Advisor #define CLOSE_LONG 40 // Die Konstante für die Rückgabe des Befehls zum Schließen einer Long-Position an den Expert Advisor #define CLOSE_SHORT 40 // Die Konstante für die Rückgabe des Befehls zum Schließen einer Short-Position an den Expert Advisor #define REVERSE_LONG 100 // Die Konstante für die Rückgabe des Befehls zur Umkehrung einer Long-Position an den Expert Advisor #define REVERSE_SHORT 100 // Die Konstante für die Rückgabe des Befehls zur Umkehrung einer Short-Position an den Expert Advisor #define NO_SIGNAL 0 // Die Konstante für die Rückgabe des Nichtvorhandenseins eines Signals an den Expert Advisor //+----------------------------------------------------------------------+ //| Beschreibung der Klasse| //| Titel=Die Signale basierend auf dem ASCtrend-Indikator | //| Typ=SignalAdvanced.| //| Name=ASCtrend| //| Klasse=CASCtrendSignal| //| Seite=| //| Parameter=BuyPosOpen,bool,true,Kauferlaubnis | //| Parameter=SellPosOpen,bool,true,Erlaubnis zum Verkaufen | //| Parameter=BuyPosClose,bool,true,Erlaubnis zum Verlassen einer Long-Position | //| Parameter=SellPosClose,bool,true,Erlaubnis zum Verlassen einer Short-Position | //| Parameter=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe | //| Parameter=RISK,int,4,Risikostufe| //| Parameter=SignalBar,uint,1,Bar-Index für Einstiegssignal | //+----------------------------------------------------------------------+ //--- Assistentenbeschreibung Ende //+----------------------------------------------------------------------+ //| CASCtrendSignal-Klasse.| //| Zweck: Klasse der Generierung von Handelssignalen auf der Grundlage von | //| ASCtrend indicator values http://www.mql5.com/ru/code/491/. | //| Ist abgeleitet von der Klasse CExpertSignal. //+----------------------------------------------------------------------+ class CASCtrendSignal : public CExpertSignal { protected: CiCustom m_indicator; // das Objekt für den Zugriff auf ASCtrend-Werte //--- angepasste Parameter bool m_BuyPosOpen; // Erlaubnis zum Kauf bool m_SellPosOpen; // Erlaubnis zum Verkauf bool m_BuyPosClose; // Erlaubnis zum Verlassen einer Long-Position bool m_SellPosClose; // Erlaubnis zum Verlassen einer Short-Position ENUM_TIMEFRAMES m_Ind_Timeframe; // Zeitrahmen des ASCtrend-Indikators uint m_RISK; // Risikostufe uint m_SignalBar; // Balkenindex für Eingangssignal public: CASCtrendSignal(); //--- Methoden zur Einstellung einstellbarer Parameter 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; } //--- einstellbare Parameter Validierungsmethode virtual bool ValidationSettings(); //--- einstellbare Parameter Validierungsmethode virtual bool InitIndicators(CIndicators *indicators); // Initialisierung der Indikatoren //--- Methode zur Erzeugung von Markteintrittssignalen virtual int LongCondition(); virtual int ShortCondition(); bool InitASCtrend(CIndicators *indicators); // ASCtrend-Indikator-Initialisierungsmethode protected: }; //+------------------------------------------------------------------+ //|CASCtrendSignal Konstruktor.| //| INPUT: nein.| //| OUTPUT: nein.| //|| ANMERKUNG: nein.| //+------------------------------------------------------------------+ void CASCtrendSignal::CASCtrendSignal() { //--- Einstellung der Standardparameter m_BuyPosOpen=true; m_SellPosOpen=true; m_BuyPosClose=true; m_SellPosClose=true; //--- Indikator-Eingabeparameter 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; } //+------------------------------------------------------------------+ //| Überprüfung der einstellbaren Parameter.| //| INPUT: nein.| //| OUTPUT: true, wenn die Einstellungen gültig sind, false - wenn nicht. //|| ANMERKUNG: nein.| //+------------------------------------------------------------------+ bool CASCtrendSignal::ValidationSettings() { //--- Überprüfung der Parameter if(m_RISK<=0) { printf(__FUNCTION__+": Risk level must be above zero"); return(false); } //--- erfolgreicher Abschluss return(true); } //+------------------------------------------------------------------+ //| Initialisierung von Indikatoren und Zeitreihen. //| INPUT: Indikatoren - Zeiger auf eine Objekt-Sammlung | //| von Indikatoren und Zeitreihen.| //| OUTPUT: true - im Erfolgsfall, sonst - false. || OUTPUT: true - im Erfolgsfall, sonst - false. || //|| ANMERKUNG: nein.| //+------------------------------------------------------------------+ bool CASCtrendSignal::InitIndicators(CIndicators *indicators) { //--- Überprüfung des Zeigers if(indicators==NULL) return(false); //--- Initialisierung des Indikators if(!InitASCtrend(indicators)) return(false); //--- erfolgreicher Abschluss return(true); } //+------------------------------------------------------------------+ //| ASCtrend-Indikator-Initialisierung.| //| INPUT: Indikatoren - Zeiger auf eine Objekt-Sammlung | //| von Indikatoren und Zeitreihen.| //| OUTPUT: true - im Erfolgsfall, sonst - false. || OUTPUT: true - im Erfolgsfall, sonst - false. || //|| ANMERKUNG: nein.| //+------------------------------------------------------------------+ bool CASCtrendSignal::InitASCtrend(CIndicators *indicators) { //--- Überprüfung des Zeigers if(indicators==NULL) return(false); //--- Hinzufügen eines Objekts zur Sammlung if(!indicators.Add(GetPointer(m_indicator))) { printf(__FUNCTION__+": error of adding the object"); return(false); } //--- Einstellung der Indikatorparameter 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; //--- Objektinitialisierung if(!m_indicator.Create(m_symbol.Name(),m_Ind_Timeframe,IND_CUSTOM,2,parameters)) { printf(__FUNCTION__+": object initialization error"); return(false); } //--- Anzahl der Puffer if(!m_indicator.NumBuffers(2)) return(false); //--- ASCtrend-Indikator erfolgreich initialisiert return(true); } //+------------------------------------------------------------------+ //| Überprüfung der Bedingungen für die Eröffnung einer Long-Position und | //| und ein kurzes schließen| //| INPUT:no| //| OUTPUT: Stimmgewichtung von 0 bis 100| //|| ANMERKUNG: nein.| //+------------------------------------------------------------------+ int CASCtrendSignal::LongCondition() { //--- Kaufsignal wird durch Puffer 1 des ASCtrend Indikators bestimmt double Signal=m_indicator.GetData(1,m_SignalBar); //--- Erhalten eines Handelssignals 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); } } //--- Suche nach Signalen zum Schließen einer Short-Position 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); } //--- kein Handelssignal return(NO_SIGNAL); } //+------------------------------------------------------------------+ //| Überprüfung der Bedingungen für die Eröffnung einer Short-Position und | //| Schließen eines langen| //| INPUT:no| //| OUTPUT: Stimmgewichtung von 0 bis 100| //|| ANMERKUNG: nein.| //+------------------------------------------------------------------+ int CASCtrendSignal::ShortCondition() { //--- Verkaufssignal wird durch Puffer 0 des ASCtrend-Indikators bestimmt double Signal=m_indicator.GetData(0,m_SignalBar); //--- Erhalten eines Handelssignals 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); } } //--- Suche nach Signalen zum Schließen einer Long-Position 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); } //--- kein Handelssignal return(NO_SIGNAL); } //+------------------------------------------------------------------+
Können Sie mir bitte sagen, was das Problem sein könnte?
Mit freundlichen Grüßen, Vladimir
Hallo!
Ich versuche, das Handelssignalmodul ASCtrendSignal (in der komprimierten Datei mysignals.zip), das auf der Grundlage des ASCtrend-Indikators (in der komprimierten Datei indicators.zip) erstellt wurde, zum MQL5-Assistenten hinzuzufügen, aber nichts funktioniert. Ich platziere das Handelssignalmodul ASCtrendSignal in Include\Expert\Signal, und platziere den ASCtrend-Indikator im Indikatorenpaket, alles scheint korrekt zu sein, aber das Modul will hartnäckig nicht im MQL5-Assistenten angezeigt werden. Hier ist der Code des ASCtrendSignal Handelssignalmoduls:
Können Sie mir bitte sagen, was das Problem sein könnte?
Mit freundlichen Grüßen, Vladimir
Ich möchte hinzufügen, dass dieses Problem auch bei anderen Modulen von Handelssignalen auftritt, die auf der Grundlage von Indikatoren geschrieben wurden. Offenbar haben sie das gleiche Problem. Bitte helfen Sie bei der Lösung dieser Probleme.
Mit freundlichen Grüßen, Vladimir.
P.S. Einige Indikatoren, die ich aus der komprimierten Datei indicators.zip entpackt habe, sind auf dem Terminal installiert und funktionieren normal.
Es kommt auf die Reihenfolge an:
// Assistentenbeschreibung Start //+----------------------------------------------------------------------+ //| Beschreibung der Klasse| //| Titel=Die Signale basierend auf dem ASCtrend-Indikator | //| Typ=SignalAdvanced.| //| Name=ASCtrend| //| Klasse=CASCtrendSignal| //| Seite=| //| Parameter=BuyPosOpen,bool,true,Kauferlaubnis | //| Parameter=SellPosOpen,bool,true,Erlaubnis zum Verkaufen | //| Parameter=BuyPosClose,bool,true,Erlaubnis zum Verlassen einer Long-Position | //| Parameter=SellPosClose,bool,true,Erlaubnis zum Verlassen einer Short-Position | //| Parameter=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe | //| Parameter=RISK,int,4,Risikostufe| //| Parameter=SignalBar,uint,1,Bar-Index für Einstiegssignal | //+----------------------------------------------------------------------+ // Beschreibung des Assistenten Ende
nicht
//--- wizard description start //--- wizard description end
und zwischen Anfang und Ende nur ein Dienstblock - keine Variablen oder Makro-Ersetzungen.
So sollte das Modul beginnen:
//+------------------------------------------------------------------+ //|ASCtrendSignal.mqh | //|Urheberrecht © 2011, Nikolay Kositsin | //|Chabarowsk, farria@mail.redcom.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2011, Nikolay Kositsin". #property link "farria@mail.redcom.ru" //+------------------------------------------------------------------+ //| Enthaltene Dateien| //+------------------------------------------------------------------+ //#property tester_indicator "ASCtrend.ex5" #include <Expert\ExpertSignal.mqh> // Assistentenbeschreibung Start //+----------------------------------------------------------------------+ //| Beschreibung der Klasse| //| Titel=Die Signale basierend auf dem ASCtrend-Indikator | //| Typ=SignalAdvanced.| //| Name=ASCtrend| //| Klasse=CASCtrendSignal| //| Seite=| //| Parameter=BuyPosOpen,bool,true,Kauferlaubnis | //| Parameter=SellPosOpen,bool,true,Erlaubnis zum Verkaufen | //| Parameter=BuyPosClose,bool,true,Erlaubnis zum Verlassen einer Long-Position | //| Parameter=SellPosClose,bool,true,Erlaubnis zum Verlassen einer Short-Position | //| Parameter=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe | //| Parameter=RISK,int,4,Risikostufe| //| Parameter=SignalBar,uint,1,Bar-Index für Einstiegssignal | //+----------------------------------------------------------------------+ // Beschreibung des Assistenten Ende //+------------------------------------------------------------------+ //| Deklaration von Konstanten| //+------------------------------------------------------------------+ #define OPEN_LONG 80 // Die Konstante für die Rückgabe des Kaufbefehls an den Expert Advisor #define OPEN_SHORT 80 // Die Konstante für die Rückgabe des Verkaufsbefehls an den Expert Advisor #define CLOSE_LONG 40 // Die Konstante für die Rückgabe des Befehls zum Schließen einer Long-Position an den Expert Advisor #define CLOSE_SHORT 40 // Die Konstante für die Rückgabe des Befehls zum Schließen einer Short-Position an den Expert Advisor #define REVERSE_LONG 100 // Die Konstante für die Rückgabe des Befehls zur Umkehrung einer Long-Position an den Expert Advisor #define REVERSE_SHORT 100 // Die Konstante für die Rückgabe des Befehls zur Umkehrung einer Short-Position an den Expert Advisor #define NO_SIGNAL 0 // Die Konstante für die Rückgabe des Nichtvorhandenseins eines Signals an den Expert Advisor //+----------------------------------------------------------------------+ //| CASCtrendSignal-Klasse.| //| Zweck: Klasse der Generierung von Handelssignalen auf der Grundlage von | //| ASCtrend indicator values http://www.mql5.com/ru/code/491/. | //| Ist abgeleitet von der Klasse CExpertSignal. //+----------------------------------------------------------------------+ class CASCtrendSignal : public CExpertSignal {
MetaEditor nach Änderungen neu laden
Es kommt auf die Reihenfolge an:
nicht
und zwischen Anfang und Ende nur ein Dienstblock - keine Variablen oder Makro-Ersetzungen.
So sollte ein Modul beginnen:
MetaEditor nach Änderungen neu laden
Vielen Dank, Vladimir!
Alles hat funktioniert.
Mit freundlichen Grüßen, Vladimir.
Forum über Handel, automatisierte Handelssysteme und das Testen von Handelsstrategien
Diskussion über den Artikel "Einfache Handelssysteme mit Semaphor-Indikatoren"
Vladimir Karputov, 2019.10.30 08:50
Die Reihenfolge ist wichtig:
// Assistentenbeschreibung Start //+----------------------------------------------------------------------+ //| Beschreibung der Klasse| //| Titel=Die Signale basierend auf dem ASCtrend-Indikator | //| Typ=SignalAdvanced| //| Name=ASCtrend| //| Klasse=CASCtrendSignal| //| Seite=| //| Parameter=BuyPosOpen,bool,true,Kauferlaubnis | //| Parameter=SellPosOpen,bool,true,Erlaubnis zum Verkaufen | //| Parameter=BuyPosClose,bool,true,Erlaubnis zum Verlassen einer Long-Position | //| Parameter=SellPosClose,bool,true,Erlaubnis zum Verlassen einer Short-Position | //| Parameter=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe | //| Parameter=RISK,int,4,Risikostufe| //| Parameter=SignalBar,uint,1,Bar-Index für Einstiegssignal | //+----------------------------------------------------------------------+ // Beschreibung des Assistenten Ende
Aber nicht
//--- wizard description start //--- wizard description end
und zwischen Anfang und Ende nur der Service-Block - keine Variablen und Makro-Substitutionen.
Das ist der Anfang, den das Modul haben sollte:
//+------------------------------------------------------------------+ //|ASCtrendSignal.mqh | //|Urheberrecht © 2011, Nikolay Kositsin | //|Chabarowsk, farria@mail.redcom.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2011, Nikolay Kositsin" #property link "farria@mail.redcom.ru" //+------------------------------------------------------------------+ //| Enthaltene Dateien| //+------------------------------------------------------------------+ //#property tester_indicator "ASCtrend.ex5" #include <Expert\ExpertSignal.mqh> // Assistentenbeschreibung Start //+----------------------------------------------------------------------+ //| Beschreibung der Klasse| //| Titel=Die Signale basierend auf dem ASCtrend-Indikator | //| Typ=SignalAdvanced| //| Name=ASCtrend| //| Klasse=CASCtrendSignal| //| Seite=| //| Parameter=BuyPosOpen,bool,true,Kauferlaubnis | //| Parameter=SellPosOpen,bool,true,Erlaubnis zum Verkaufen | //| Parameter=BuyPosClose,bool,true,Erlaubnis zum Verlassen einer Long-Position | //| Parameter=SellPosClose,bool,true,Erlaubnis zum Verlassen einer Short-Position | //| Parameter=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe | //| Parameter=RISK,int,4,Risikostufe| //| Parameter=SignalBar,uint,1,Bar-Index für Einstiegssignal | //+----------------------------------------------------------------------+ // Beschreibung des Assistenten Ende //+------------------------------------------------------------------+ //| Deklaration von Konstanten| //+------------------------------------------------------------------+ #define OPEN_LONG 80 // Die Konstante für die Rückgabe des Kaufbefehls an den Expert Advisor #define OPEN_SHORT 80 // Die Konstante für die Rückgabe des Verkaufsbefehls an den Expert Advisor #define CLOSE_LONG 40 // Die Konstante für die Rückgabe des Befehls zum Schließen einer Long-Position an den Expert Advisor #define CLOSE_SHORT 40 // Die Konstante für die Rückgabe des Befehls zum Schließen einer Short-Position an den Expert Advisor #define REVERSE_LONG 100 // Die Konstante für die Rückgabe des Befehls zur Umkehrung einer Long-Position an den Expert Advisor #define REVERSE_SHORT 100 // Die Konstante für die Rückgabe des Befehls zur Umkehrung einer Short-Position an den Expert Advisor #define NO_SIGNAL 0 // Die Konstante für die Rückgabe des Nichtvorhandenseins eines Signals an den Expert Advisor //+----------------------------------------------------------------------+ //| CASCtrendSignal-Klasse.| //| Zweck: Klasse von Generatoren von Handelssignalen, die auf | //| ASCtrend indicator values http://www.mql5.com/ru/code/491/. | //| Ist abgeleitet von der Klasse CExpertSignal.| //+----------------------------------------------------------------------+ class CASCtrendSignal : public CExpertSignal {
Starten Sie den MetaEditor neu, nachdem Sie Änderungen vorgenommen haben.
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Neuer Artikel Elementare Handelssysteme unter Verwendung von Semaphorindikatoren :
Wenn wir ein beliebiges vielschichtiges Handelssystem gründlich untersuchen, werden wir feststellen, dass es auf einem Satz einfacher Handelssignale beruht. Deshalb ist es gar nicht erforderlich, das sich Entwickler gleich zu Beginn ihrer Tätigkeit sofort an der Programmierung komplexer Algorithmen versuchen. In diesem Beitrag wird ein Beispiel für ein Handelssystem vorgestellt, das sich zum Abschluss von Geschäften Indikatoren des Typs Semaphor bedient.
Autor: Nikolay Kositsin