Articolo pubblicato Sistemi di trading più semplici che utilizzano indicatori semaforici:
Autore: Nikolay Kositsin
Una piccola osservazione: c'è un errore meccanico nel frammento di codice riportato nell'esempio, che è stato copiato:
//---- Dichiarare le variabili locali double TrendVelue[2];
Ho compilato alcuni segnali e riavvio, come "Candles_SmoothedSignal.mqh" (..MQL5\Include\Expert\MySignals\Candles_SmoothedSignal.mqh), ma MetaEditor non riesce a vederlo per creare un Expert Advisor nella procedura guidata.
Come posso risolvere il problema?
Grazie per questa eccellente ed esauriente spiegazione...!
daveM
Ho scaricato e scompattato tutto come indicato nelle istruzioni, ma il tester dà un errore su tutti i sistemi:
il tester si è fermato perché OnInit non è riuscito
CExpert::ValidationSettings: errore parametri denaro
CMoneyFixedLot::ValidationSettings: l'importo del lotto deve essere compreso tra 1,000000 e 1000000,000000.
Per favore, ditemi cosa modificare.
Salve!
Sto cercando di aggiungere il modulo del segnale di trading ASCtrendSignal (che si trova nel file compresso mysignals.zip) creato sulla base dell'indicatore ASCtrend (che si trova nel file compresso indicators.zip) al Wizard MQL5, ma non funziona nulla. Posiziono il modulo del segnale di trading ASCtrendSignal in Include\Expert\Signal, e inserisco l'indicatore ASCtrend nel pacchetto Indicators, tutto sembra essere corretto, ma il modulo continua a non voler essere visualizzato nel Wizard MQL5. Ecco il codice del modulo del segnale di 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" //+------------------------------------------------------------------+ //| File inclusi| //+------------------------------------------------------------------+ #property tester_indicator "ASCtrend.ex5" #include <Expert\ExpertSignal.mqh> //--- avvio della descrizione della procedura guidata //+------------------------------------------------------------------+ //| Dichiarazione delle costanti| //+------------------------------------------------------------------+ #define OPEN_LONG 80 // La costante per la restituzione del comando di acquisto all'Expert Advisor #define OPEN_SHORT 80 // La costante per la restituzione del comando di vendita all'Expert Advisor #define CLOSE_LONG 40 // La costante per restituire all'Expert Advisor il comando di chiusura di una posizione lunga. #define CLOSE_SHORT 40 // La costante per restituire all'Expert Advisor il comando di chiusura di una posizione corta. #define REVERSE_LONG 100 // La costante per restituire all'Expert Advisor il comando di inversione di una posizione long. #define REVERSE_SHORT 100 // La costante per restituire all'Expert Advisor il comando di inversione di una posizione corta. #define NO_SIGNAL 0 // La costante per restituire all'Expert Advisor l'assenza di un segnale //+----------------------------------------------------------------------+ //| Descrizione della classe| //| Titolo=I segnali basati sull'indicatore ASCtrend | //| Tipo=SegnaleAvanzato.| //| Nome=ASCtrend| //| Classe=CASCtrendSignal| //| Pagina=| //| Parametro=BuyPosOpen,bool,true,Autorizzazione all'acquisto | //| Parametro=SellPosOpen,bool,true,Autorizzazione alla vendita | //| Parametro=BuyPosClose,bool,true,Permesso di uscire da una posizione lunga | //| Parametro=SellPosClose,bool,true,Permesso di uscire da una posizione corta | //| Parametro=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe | //| Parametro=RISK,int,4,Livello di rischio| //| Parametro=SignalBar,uint,1,indice della barra per il segnale di entrata | //+----------------------------------------------------------------------+ //--- descrizione della procedura guidata fine //+----------------------------------------------------------------------+ //| Classe CASCtrendSignal.| //| Scopo: Classe di generatori di segnali di trading basati su | //| ASCtrend indicator values http://www.mql5.com/ru/code/491/. | //| È derivato dalla classe CExpertSignal. //+----------------------------------------------------------------------+ class CASCtrendSignal : public CExpertSignal { protected: CiCustom m_indicator; // l'oggetto per l'accesso ai valori di ASCtrend //--- parametri adattati bool m_BuyPosOpen; // permesso di acquisto bool m_SellPosOpen; // permesso di vendita bool m_BuyPosClose; // permesso di uscire da una posizione lunga bool m_SellPosClose; // permesso di uscire da una posizione corta ENUM_TIMEFRAMES m_Ind_Timeframe; // Timeframe dell'indicatore ASCtrend uint m_RISK; // Livello di rischio uint m_SignalBar; // indice della barra per il segnale di entrata public: CASCtrendSignal(); //--- metodi di impostazione dei parametri regolabili 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; } //--- metodo di validazione dei parametri regolabili virtual bool ValidationSettings(); //--- metodo di validazione dei parametri regolabili virtual bool InitIndicators(CIndicators *indicators); // inizializzazione degli indicatori //--- metodo di generazione dei segnali di ingresso nel mercato virtual int LongCondition(); virtual int ShortCondition(); bool InitASCtrend(CIndicators *indicators); // Metodo di inizializzazione dell'indicatore ASCtrend protected: }; //+------------------------------------------------------------------+ //Costruttore diASCtrendSignal.| //| INPUT: no.| //| OUTPUT: no.| //|| RIMPROVERO: no.| //+------------------------------------------------------------------+ void CASCtrendSignal::CASCtrendSignal() { //--- impostazione dei parametri predefiniti m_BuyPosOpen=true; m_SellPosOpen=true; m_BuyPosClose=true; m_SellPosClose=true; //--- parametri di ingresso dell'indicatore 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; } //+------------------------------------------------------------------+ //| Verifica dei parametri regolabili.| //| INPUT: no.| //| OUTPUT: vero se le impostazioni sono valide, falso - se non lo sono. || //|| RIMPROVERO: no.| //+------------------------------------------------------------------+ bool CASCtrendSignal::ValidationSettings() { //--- controllo dei parametri if(m_RISK<=0) { printf(__FUNCTION__+": Risk level must be above zero"); return(false); } //--- completamento riuscito return(true); } //+------------------------------------------------------------------+ //| Inizializzazione degli indicatori e delle serie temporali. //| INPUT: indicatori - puntatore a una collezione di oggetti | //| di indicatori e serie temporali.| //| OUTPUT: true - in caso di successo, altrimenti - false. || OUTPUT: true - in caso di successo, altrimenti - false. || //|| RIMPROVERO: no.| //+------------------------------------------------------------------+ bool CASCtrendSignal::InitIndicators(CIndicators *indicators) { //--- controllo del puntatore if(indicators==NULL) return(false); //--- inizializzazione dell'indicatore if(!InitASCtrend(indicators)) return(false); //--- completamento riuscito return(true); } //+------------------------------------------------------------------+ //| Inizializzazione dell'indicatore ASCtrend.| //| INPUT: indicatori - puntatore a una collezione di oggetti | //| di indicatori e serie temporali.| //| OUTPUT: true - in caso di successo, altrimenti - false. || OUTPUT: true - in caso di successo, altrimenti - false. || //|| RIMPROVERO: no.| //+------------------------------------------------------------------+ bool CASCtrendSignal::InitASCtrend(CIndicators *indicators) { //--- controllo del puntatore if(indicators==NULL) return(false); //--- aggiunta di un oggetto alla collezione if(!indicators.Add(GetPointer(m_indicator))) { printf(__FUNCTION__+": error of adding the object"); return(false); } //--- impostazione dei parametri dell'indicatore 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; //--- inizializzazione dell'oggetto if(!m_indicator.Create(m_symbol.Name(),m_Ind_Timeframe,IND_CUSTOM,2,parameters)) { printf(__FUNCTION__+": object initialization error"); return(false); } //--- numero di buffer if(!m_indicator.NumBuffers(2)) return(false); //--- Indicatore ASCtrend inizializzato con successo return(true); } //+------------------------------------------------------------------+ //| Verifica delle condizioni per l'apertura di una posizione lunga e //| e chiuderne uno breve| //| INPUT:no| //| USCITA: Peso del voto da 0 a 100| //|| RIMPROVERO: no.| //+------------------------------------------------------------------+ int CASCtrendSignal::LongCondition() { //--- il segnale di acquisto è determinato dal buffer 1 dell'indicatore ASCtrend double Signal=m_indicator.GetData(1,m_SignalBar); //--- ottenere un segnale di trading 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); } } //--- ricerca di segnali per la chiusura di una posizione 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); } //--- nessun segnale di trading return(NO_SIGNAL); } //+------------------------------------------------------------------+ //| Verifica delle condizioni per l'apertura di una posizione corta e //| chiusura di una lunga| //| INPUT:no| //| USCITA: Peso del voto da 0 a 100| //|| RIMPROVERO: no.| //+------------------------------------------------------------------+ int CASCtrendSignal::ShortCondition() { //--- il segnale di vendita è determinato dal buffer 0 dell'indicatore ASCtrend double Signal=m_indicator.GetData(0,m_SignalBar); //--- ottenere un segnale di trading 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); } } //--- ricerca di segnali per la chiusura di una posizione lunga 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); } //--- nessun segnale di trading return(NO_SIGNAL); } //+------------------------------------------------------------------+
Potete per favore dirmi quale può essere il problema?
Saluti, Vladimir
Ciao!
Sto cercando di aggiungere il modulo del segnale di trading ASCtrendSignal (che si trova nel file compresso mysignals.zip) creato sulla base dell'indicatore ASCtrend (che si trova nel file compresso indicators.zip) al Wizard MQL5, ma non funziona nulla. Posiziono il modulo del segnale di trading ASCtrendSignal in Include\Expert\Signal, e inserisco l'indicatore ASCtrend nel pacchetto Indicators, tutto sembra essere corretto, ma il modulo continua a non voler essere visualizzato nel Wizard MQL5. Ecco il codice del modulo del segnale di trading ASCtrendSignal:
Potete dirmi quale potrebbe essere il problema?
Saluti, Vladimir
Vorrei aggiungere che questo stesso problema si verifica con altri moduli di segnali di trading scritti sulla base di indicatori. A quanto pare, hanno lo stesso problema. Vi prego di aiutarmi a risolvere questi problemi.
Saluti, Vladimir.
P.S. Alcuni indicatori che ho scompattato dal file compresso indicators.zip sono installati sul terminale e funzionano normalmente.
È l'ordine che conta:
// avvio della descrizione della procedura guidata //+----------------------------------------------------------------------+ //| Descrizione della classe| //| Titolo=I segnali basati sull'indicatore ASCtrend | //| Tipo=SegnaleAvanzato.| //| Nome=ASCtrend| //| Classe=CASCtrendSignal| //| Pagina=| //| Parametro=BuyPosOpen,bool,true,Autorizzazione all'acquisto | //| Parametro=SellPosOpen,bool,true,Autorizzazione alla vendita | //| Parametro=BuyPosClose,bool,true,Autorizzazione a uscire da una posizione lunga | //| Parametro=SellPosClose,bool,true,Permesso di uscire da una posizione corta | //| Parametro=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe | //| Parametro=RISK,int,4,Livello di rischio| //| Parametro=SignalBar,uint,1,indice della barra per il segnale di entrata | //+----------------------------------------------------------------------+ // descrizione della procedura guidata fine
non
//--- wizard description start //--- wizard description end
e tra l'inizio e la fine solo un blocco di servizio, senza variabili o sostituzioni di macro.
Questo è il modo in cui il modulo dovrebbe iniziare:
//+------------------------------------------------------------------+ //|ASCtrendSignal.mqh | //|Copyright © 2011, Nikolay Kositsin | //|Khabarovsk, farria@mail.redcom.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2011, Nikolay Kositsin". #property link "farria@mail.redcom.ru" //+------------------------------------------------------------------+ //| File inclusi| //+------------------------------------------------------------------+ //#property tester_indicator "ASCtrend.ex5" #include <Expert\ExpertSignal.mqh> // avvio della descrizione della procedura guidata //+----------------------------------------------------------------------+ //| Descrizione della classe| //| Titolo=I segnali basati sull'indicatore ASCtrend | //| Tipo=SegnaleAvanzato.| //| Nome=ASCtrend| //| Classe=CASCtrendSignal| //| Pagina=| //| Parametro=BuyPosOpen,bool,true,Autorizzazione all'acquisto | //| Parametro=SellPosOpen,bool,true,Autorizzazione alla vendita | //| Parametro=BuyPosClose,bool,true,Autorizzazione a uscire da una posizione lunga | //| Parametro=SellPosClose,bool,true,Permesso di uscire da una posizione corta | //| Parametro=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe | //| Parametro=RISK,int,4,Livello di rischio| //| Parametro=SignalBar,uint,1,indice della barra per il segnale di entrata | //+----------------------------------------------------------------------+ // descrizione della procedura guidata fine //+------------------------------------------------------------------+ //| Dichiarazione delle costanti| //+------------------------------------------------------------------+ #define OPEN_LONG 80 // La costante per la restituzione del comando di acquisto all'Expert Advisor #define OPEN_SHORT 80 // La costante per la restituzione del comando di vendita all'Expert Advisor #define CLOSE_LONG 40 // La costante per restituire all'Expert Advisor il comando di chiusura di una posizione lunga. #define CLOSE_SHORT 40 // La costante per restituire all'Expert Advisor il comando di chiusura di una posizione corta. #define REVERSE_LONG 100 // La costante per restituire all'Expert Advisor il comando di inversione di una posizione long. #define REVERSE_SHORT 100 // La costante per restituire all'Expert Advisor il comando di inversione di una posizione corta. #define NO_SIGNAL 0 // La costante per restituire all'Expert Advisor l'assenza di un segnale //+----------------------------------------------------------------------+ //| Classe CASCtrendSignal.| //| Scopo: Classe di generatori di segnali di trading basati su | //| ASCtrend indicator values http://www.mql5.com/ru/code/491/. | //| È derivato dalla classe CExpertSignal. //+----------------------------------------------------------------------+ class CASCtrendSignal : public CExpertSignal {
ricaricare MetaEditor dopo aver effettuato le modifiche
È l'ordine che conta:
non
e tra l'inizio e la fine solo un blocco di servizio, senza variabili o sostituzioni di macro.
Questo è il modo in cui un modulo dovrebbe iniziare:
ricaricare MetaEditor dopo aver effettuato le modifiche
Grazie, Vladimir!
Tutto ha funzionato.
Saluti, Vladimir.
Forum sul trading, sui sistemi di trading automatizzati e sulla verifica delle strategie di trading
Discussione dell'articolo "Semplici sistemi di trading che utilizzano indicatori semaforici"
Vladimir Karputov, 2019.10.30 08:50
L'ordine è importante:
// avvio della descrizione della procedura guidata //+----------------------------------------------------------------------+ //| Descrizione della classe| //| Titolo=I segnali basati sull'indicatore ASCtrend | //| Tipo=SegnaleAvanzato| //| Nome=ASCtrend| //| Classe=CASCtrendSignal| //| Pagina=| //| Parametro=BuyPosOpen,bool,true,Autorizzazione all'acquisto | //| Parametro=SellPosOpen,bool,true,Autorizzazione a vendere | //| Parametro=BuyPosClose,bool,true,Autorizzazione a uscire da una posizione lunga | //| Parametro=SellPosClose,bool,true,Permesso di uscire da una posizione corta | //| Parametro=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe | //| Parametro=RISK,int,4,Livello di rischio| //| Parametro=SignalBar,uint,1,indice della barra per il segnale di entrata | //+----------------------------------------------------------------------+ // descrizione della procedura guidata fine
ma non
//--- wizard description start //--- wizard description end
e tra l'inizio e la fine solo il blocco di servizio, senza variabili e sostituzioni di macro.
Questo è l'inizio che il modulo dovrebbe avere:
//+------------------------------------------------------------------+ //|ASCtrendSignal.mqh | //|Copyright © 2011, Nikolay Kositsin | //|Khabarovsk, farria@mail.redcom.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2011, Nikolay Kositsin" #property link "farria@mail.redcom.ru" //+------------------------------------------------------------------+ //| File inclusi| //+------------------------------------------------------------------+ //#property tester_indicator "ASCtrend.ex5" #include <Expert\ExpertSignal.mqh> // avvio della descrizione della procedura guidata //+----------------------------------------------------------------------+ //| Descrizione della classe| //| Titolo=I segnali basati sull'indicatore ASCtrend | //| Tipo=SegnaleAvanzato| //| Nome=ASCtrend| //| Classe=CASCtrendSignal| //| Pagina=| //| Parametro=BuyPosOpen,bool,true,Autorizzazione all'acquisto | //| Parametro=SellPosOpen,bool,true,Autorizzazione a vendere | //| Parametro=BuyPosClose,bool,true,Autorizzazione a uscire da una posizione lunga | //| Parametro=SellPosClose,bool,true,Permesso di uscire da una posizione corta | //| Parametro=Ind_Timeframe,ENUM_TIMEFRAMES,PERIOD_H4,Timeframe | //| Parametro=RISK,int,4,Livello di rischio| //| Parametro=SignalBar,uint,1,indice della barra per il segnale di entrata | //+----------------------------------------------------------------------+ // descrizione della procedura guidata fine //+------------------------------------------------------------------+ //| Dichiarazione delle costanti| //+------------------------------------------------------------------+ #define OPEN_LONG 80 // La costante per la restituzione del comando di acquisto all'Expert Advisor #define OPEN_SHORT 80 // La costante per la restituzione del comando di vendita all'Expert Advisor #define CLOSE_LONG 40 // La costante per restituire all'Expert Advisor il comando di chiusura di una posizione lunga. #define CLOSE_SHORT 40 // La costante per restituire all'Expert Advisor il comando di chiusura di una posizione corta. #define REVERSE_LONG 100 // La costante per restituire all'Expert Advisor il comando di inversione di una posizione long. #define REVERSE_SHORT 100 // La costante per restituire all'Expert Advisor il comando di inversione di una posizione corta. #define NO_SIGNAL 0 // La costante per restituire all'Expert Advisor l'assenza di un segnale //+----------------------------------------------------------------------+ //| Classe CASCtrendSignal.| //| Scopo: Classe di generatori di segnali di trading basati su | //| ASCtrend indicator values http://www.mql5.com/ru/code/491/. | //| È derivato dalla classe CExpertSignal.| //+----------------------------------------------------------------------+ class CASCtrendSignal : public CExpertSignal {
riavviare il MetaEditor dopo aver apportato le modifiche.
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
Il nuovo articolo Sistemi di Trading Semplici che Utilizzano Indicatori Semaforici è stato pubblicato:
Se esaminiamo nel dettaglio qualsiasi sistema di trading complesso, vedremo che si basa su una serie di semplici segnali di trading. Pertanto, non è necessario che gli sviluppatori alle prime armi inizino immediatamente a scrivere algoritmi complessi. Questo articolo fornisce un esempio di un sistema di trading che utilizza indicatori semaforici per eseguire operazioni.
Gli indicatori semaforici o di segnali sono semplici rilevatori che indicano i momenti di entrata o di uscita dal mercato. Nel caso in cui vi sia un segnale di entrata sulla barra corrente, un'etichetta appropriata viene visualizzata su un grafico a simboli. Questa etichetta può, quindi, essere utilizzata come condizione per l'esecuzione di un’operazione.
Ci sono molti indicatori di questo tipo, ma l'essenza stessa del sistema di trading originale basato su tali indicatori non è cambiata affatto. Pertanto, è una buona idea implementarlo nella forma più semplice e universale. Ciò consentirà un ulteriore utilizzo del risultato ottenuto quando si lavora con indicatori simili senza notevoli alterazioni.
Autore: Nikolay Kositsin