Salve,
Questo oscillatore è ottimo, ma ho dei problemi con esso.
La fine della linea del segnale, che è calcolata dall'ultima candela, non viene mostrata, quindi mostra sempre il rosso al momento attuale. Quando resetto l'oscillatore, per un momento mostra valori buoni con la fine della linea del segnale, ma poi torna al rosso (anche se deve mostrare il verde).
Cosa devo fare per eliminare questo problema?
Ho provato a rifare il debug ma non è servito.
Saluti,
InfiniteDesign
Grazie mille per questo grande indicatore.
Ho trovato la versione precedente altrettanto interessante e utile di quella nuova, se non addirittura di più...
Potreste per favore portare il vecchio indicatore anche su mq5? Apprezzerei molto se si potesse fare.
Salute e grazie in anticipo!!!
Salve,
Questo oscillatore è ottimo, ma ho dei problemi con esso.
La fine della linea del segnale, che è calcolata dall'ultima candela, non viene mostrata, quindi mostra sempre il rosso al momento attuale. Quando resetto l'oscillatore, per un momento mostra valori buoni con la fine della linea del segnale, ma poi torna al rosso (anche se deve mostrare il verde).
Cosa devo fare per eliminare questo problema?
Ho provato a rifare il debug ma non è servito.
Saluti,
InfiniteDesign
Ho provato a creare un segnale da questo indicatore, ma non ci sono riuscito...
Qualche aiuto?
//+------------------------------------------------------------------+ //|COG.mqh | //|Bruno Pio | //| http://www.mql5.com //+------------------------------------------------------------------+ #property copyright "Bruno Pio" #property link "http://www.mql5.com" #property version "1.00" #include "..\ExpertSignal.mqh" // CExpertSignal si trova nel file ExpertSignal #property tester_indicator "CenterOfGravity.ex5" // avvio della descrizione della procedura guidata //+------------------------------------------------------------------+ //| Descrizione della classe| //| Titolo=Segnali del centro di gravità| //| Tipo=SegnaleAvanzato| //| Nome=Mio_COG| //| Nome breve=CG| //| Classe=COG| //| Pagina=Non necessario| //| Parametro=Periodo_,int,10,Periodo di mediazione dell'indicatore. //| Parametro=SmoothPeriod,int,3,Periodo di lisciatura della linea del segnale | //| Parametro=MA_Method_,ENUM_MA_METHOD,MODE_EMA,Signal Method | //| Parametro=Prezzo applicato,int,1,Prezzo costante | //+------------------------------------------------------------------+ // descrizione della procedura guidata fine //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ class COG : public CExpertSignal { private: CiCustom m_COG; // L'indicatore come oggetto //--- Parametri configurabili del modulo int m_Period_; // Periodo di mediazione dell'indicatore int m_SmoothPeriod; // Periodo di lisciatura della linea del segnale ENUM_MA_METHOD m_MA_Method_; // Metodo di mediazione della linea del segnale int m_AppliedPrice; // Costante di prezzo public: COG(void); ~COG(void); //--- Verifica della correttezza dei dati in ingresso bool ValidationSettings(); //--- Creazione di indicatori e serie temporali per il modulo dei segnali bool InitIndicators(CIndicators *indicators); //--- Accesso ai dati dell'indicatore double CG(const int index) const { return(m_COG.GetData(0,index)); } double Signal(const int index) const { return(m_COG.GetData(1,index)); } //--- Verifica delle condizioni di acquisto e vendita virtual int LongCondition(); virtual int ShortCondition(); //--- Metodi per impostare void Period_(int value) { m_Period_=value; } void SmoothPeriod(int value) { m_SmoothPeriod=value; } void MA_Method_(ENUM_MA_METHOD value) { m_MA_Method_=value; } void AppliedPrice(int value) { m_AppliedPrice=value; } protected: //--- Creazione dell'indicatore bool CreateCOG(CIndicators *indicators); }; //+------------------------------------------------------------------+ //| Costruttore| //+------------------------------------------------------------------+ COG::COG(void) : m_Period_(10), // Periodo di mediazione dell'indicatore m_SmoothPeriod(3), // Periodo di lisciatura della linea del segnale m_MA_Method_(MODE_EMA), // Metodo di mediazione della linea del segnale m_AppliedPrice(1) // Costante di prezzo { } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ COG::~COG() { } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Controlla i parametri di input e restituisce true se tutto è OK | //+------------------------------------------------------------------+ bool COG:: ValidationSettings() { //--- Chiamare il metodo della classe base if(!CExpertSignal::ValidationSettings()) return(false); //--- Controllo dei periodi, numero di barre per il calcolo della MA >=1 if(m_Period_<1) { PrintFormat("Incorrect value set for one of the period! Period_=%d", m_Period_); return false; } //--- Controllo dei periodi, numero di barre per il calcolo della MA >=1 if(m_SmoothPeriod<1) { PrintFormat("Incorrect value set for one of the period! m_SmoothPeriod=%d", m_SmoothPeriod); return false; } //--- Il tipo di lisciatura veloce MA deve essere uno dei quattro valori dell'enumerazione if(m_MA_Method_!=MODE_SMA && m_MA_Method_!=MODE_EMA && m_MA_Method_!=MODE_SMMA && m_MA_Method_!=MODE_LWMA) { PrintFormat("Invalid type of smoothing of the fast MA!"); return false; } //--- m_AppliedPrice deve essere valido if(m_AppliedPrice<1 || m_AppliedPrice>11) { PrintFormat("Invalid type of Price!"); return false; } //--- Tutti i controlli sono stati completati, tutto è ok return true; } //+------------------------------------------------------------------+ //| Crea indicatori| //| Ingresso: un puntatore a una collezione di indicatori | //| Uscita: true se ha successo, altrimenti false | //+------------------------------------------------------------------+ bool COG::InitIndicators(CIndicators *indicators) { //--- Controllo standard della collezione di indicatori per NULL if(indicators==NULL) return(false); //--- Inizializzazione degli indicatori e delle serie temporali nei filtri aggiuntivi if(!CExpertSignal::InitIndicators(indicators)) return(false); //--- Creazione degli indicatori if(!CreateCOG(indicators)) return(false); //--- Raggiunta questa parte, la funzione ha avuto successo, restituire true return(true); } //+------------------------------------------------------------------+ //| Crea l'indicatore "COG| //+------------------------------------------------------------------+ bool COG::CreateCOG(CIndicators *indicators) { //--- Controllo del puntatore if(indicators==NULL) return(false); //--- Aggiunta di un oggetto alla collezione if(!indicators.Add(GetPointer(m_COG))) { printf(__FUNCTION__+": Error adding an object of the COG"); return(false); } //--- Impostazione dei parametri del COG MqlParam parameters[5]; //--- parameters[0].type=TYPE_STRING; parameters[0].string_value="CenterOfGravity.ex5"; parameters[1].type=TYPE_INT; parameters[1].integer_value=m_Period_; // Periodo parameters[2].type=TYPE_INT; parameters[2].integer_value=m_SmoothPeriod; // Periodo di lisciatura della linea del segnale parameters[3].type=TYPE_INT; parameters[3].integer_value=m_MA_Method_; // Metodo di mediazione della linea del segnale parameters[4].type=TYPE_INT; parameters[4].integer_value=m_AppliedPrice; // Costante di prezzo //--- Inizializzazione dell'oggetto if(!m_COG.Create(m_symbol.Name(),0,IND_CUSTOM,5,parameters)) { printf(__FUNCTION__+": Error initializing the object of the COG"); return(false); } //--- Numero di buffer if(!m_COG.NumBuffers(2)) return(false); //--- Raggiunta questa parte, la funzione ha avuto successo, restituire true return(true); } //+------------------------------------------------------------------+ //| Restituisce l'intensità del segnale di acquisto| //+------------------------------------------------------------------+ int COG::LongCondition() { int signal=0; //--- Per operazioni con tick idx=0, per operazioni con barre formate idx=1 int idx=StartIndex(); //--- Valori delle COG all'ultima barra formata double last_fast_value=CG(idx); double last_slow_value=Signal(idx); //--- Valori delle COG nella penultima barra formata double prev_fast_value=CG(idx+1); double prev_slow_value=Signal(idx+1); //---Se CG > Segnale && CG-1 < Segnale-1 if((last_fast_value>last_slow_value) && (prev_fast_value<prev_slow_value)) { signal=100; // C'è un segnale di acquisto } //--- Restituzione del valore del segnale return(signal); } //+------------------------------------------------------------------+ //| Restituisce la forza del segnale di vendita| //+------------------------------------------------------------------+ int COG::ShortCondition() { int signal=0; //--- Per operazioni con tick idx=0, per operazioni con barre formate idx=1 int idx=StartIndex(); //--- Valori delle COG all'ultima barra formata double last_fast_value=CG(idx); double last_slow_value=Signal(idx); //--- Valori delle COG nella penultima barra formata double prev_fast_value=CG(idx+1); double prev_slow_value=Signal(idx+1); //---Se CG < Segnale && CG-1 > Segnale-1 if((last_fast_value<last_slow_value) && (prev_fast_value>prev_slow_value)) { signal=100; // C'è un segnale di vendita } //--- Restituzione del valore del segnale return(signal); }
- 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


Centro di gravità di Ehlers - Centro di gravità J. F. Ehlers:
Il Centro di gravità è un oscillatore sviluppato da John Ehlers e pubblicato nel numero di maggio 2002 di Stocks & Commodities.
Author: Nikolay Kositsin