Discussione sull’articolo "Estensione della MQL5 Standard Library e riutilizzo del codice"

 

Il nuovo articolo Estensione della MQL5 Standard Library e riutilizzo del codice è stato pubblicato:

MQL5 Standard Library semplifica la tua vita come sviluppatore. Tuttavia, non implementa tutte le esigenze di tutti gli sviluppatori del mondo, quindi se ritieni di aver bisogno di altre personalizzazioni puoi fare un ulteriore passo avanti ed estendere. Questo articolo illustra l'integrazione dell'indicatore tecnico Zig-Zag di MetaQuotes nella Libreria standard. Ci ispiriamo alla filosofia di design di MetaQuotes per raggiungere il nostro obiettivo.

In poche parole, con API MQL5 potrai riutilizzare il codice. In più esso offre affidabilità, flessibilità e facilità di manutenzione. Questo è cosa dice la teoria, ma al di là di tutto questo, se hai intenzione di continuare ad avanzare in MQL5 e sviluppare cose più sofisticate, come Expert Advisor multi-valuta, prima dovresti essere in grado di codificare in modalità libreria standard in modo che le tue app abbiano possano riuscire bene.

Man mano che i tuoi EA e indicatori diventano sempre più complessi, questo è sempre più necessario per padroneggiare i concetti coinvolti nello sviluppo di un framework. Come esempio di applicazione nel mondo reale, è il mio bisogno personale di sviluppare un EA complesso e multi-valuta che detta la necessità di rafforzare la base del mio progetto da zero.

Figura 1. I poliedri regolari sono oggetti perfetti. Descrivono bene l'approccio di costruire app su concetti solidi.


Autore: Jordi Bassaganas

[Eliminato]  

Grazie. Molto istruttivo.

 

Cerco di capire cosa significa questo codice in questo articolo perché abbiamo un * vicino al CINDICATOBUFFER e poi usiamo at.

((CIndicatorBuffer*)At(0)).Name("ZIGZAG");
((CIndicatorBuffer*)At(1)).Name("HIGH");
((CIndicatorBuffer*)At(2)).Name("LOW");

Gradirei una spiegazione dettagliata

grazie

 
rodlivar:<br/ translate="no">

Cerco di capire cosa significa questo codice in questo articolo perché abbiamo un * vicino al CINDICATOBUFFER e poi usare at.

((CIndicatorBuffer*)At(0)).Name("ZIGZAG");
((CIndicatorBuffer*)At(1)).Name("HIGH");
((CIndicatorBuffer*)At(2)).Name("LOW");

Gradirei una spiegazione dettagliata

grazie

* indica un puntatore. Spiegazione dettagliata in questo articolo Utilizzo dei puntatori agli oggetti in MQL5
 

stringa

m_handle=iCustom(symbol,period,zigzag,depth,deviation_create,backstep);

Non riesco a trovare il percorso dell'indicatore.

Qual è il modo corretto di specificare il percorso? Gli indicatori che sto cercando di richiamare si trovano nella cartella standard.

 
Tango_X:

stringa

m_handle=iCustom(symbol,period,zigzag,depth,deviation_create,backstep);

Non riesco a trovare il percorso dell'indicatore.

Qual è il modo corretto di specificare qui, gli indicatori che sto cercando di chiamare si trovano nella cartella standard.

Zigzag standard si trova nella cartella Examples: è necessario aggiungere il nome della cartella al percorso.


 
Rashid Umarov:

Lo Zigzag standard si trova nella cartella Examples - occorre aggiungere il nome della cartella nel percorso



2017.07.12 10:38:05.703 Proba2(EURUSD.m,M1) non può caricare l'indicatore personalizzato 'Examples\ZigZag' [4302]

Cosa c'è che non va? Tutto è come nella tua immagine.
 
Tango_X:

2017.07.12 10:38:05.703 Proba2 (EURUSD.m,M1) non può caricare l'indicatore personalizzato 'Examples\ZigZag'[4302]

Cosa c'è che non va? Tutto è come nella tua immagine.

Chi guarda il codice di errore?

ERR_MARKET_NOT_SELECTED

4302

Simbolo non selezionato in MarketWatch

 
Rashid Umarov:

Chi deve controllare il codice di errore?

ERR_MARKET_NOT_SELECTED

4302

Simbolo non selezionato in MarketWatch


Ho messo NULL - funziona, ho messo "EURUSD" - non funziona!!!!

bool CiZigZag::Create(const string symbol,const ENUM_TIMEFRAMES period,
                      const int depth,const int deviation_create,const int backstep)
  {
//--- controllare la cronologia
   if(!SetSymbolPeriod(symbol,period))
      return(false);
//--- creare
   //m_handle=iCustom(simbolo,periodo, "Esempi_ZigZag",profondità,deviazione_creata,backstep);
     //m_handle=iCustom("EURUSD",period, "Examples\\\ZigZag",depth,deviation_create,backstep); - NON funziona
     m_handle=iCustom(NULL,period,"Examples\\ZigZag",depth,deviation_create,backstep);       - работает
//--- controllare il risultato
   if(m_handle==INVALID_HANDLE)
      return(false);
//--- indicatore creato con successo
   if(!Initialize(symbol,period,depth,deviation_create,backstep))
     {
      //--- errore di inizializzazione
      IndicatorRelease(m_handle);
      m_handle=INVALID_HANDLE;
      return(false);
     }
//--- ok
   return(true);
  }
      IndicatorRelease(m_handle);
      m_handle=INVALID_HANDLE;
      return(false);
     }
//--- ok
   return(true);
  }
 
Trovato! Ho un nome di simbolo con un prefisso) - "EURUSD.m".
 
//+------------------------------------------------------------------+
//|Creare l'indicatore "Zig Zag|
//+------------------------------------------------------------------+
bool CiZigZag::Create(const string symbol,const ENUM_TIMEFRAMES period,
                      const int depth,const int deviation_create,const int backstep)
  {
//--- controllare la cronologia
   if(!SetSymbolPeriod(symbol,period))
      return(false);
//--- creare
   m_handle=iCustom(symbol,period,"zigzag",depth,deviation_create,backstep);
//--- controllare il risultato
   if(m_handle==INVALID_HANDLE)
      return(false);
//--- indicatore creato con successo
   if(!Initialize(symbol,period,depth,deviation_create,backstep))
     {
      //--- errore di inizializzazione
      IndicatorRelease(m_handle);
      m_handle=INVALID_HANDLE;
      return(false);
     }
//--- ok
   return(true);
  }
bool CiZigZag::Initialize(const string symbol,const ENUM_TIMEFRAMES period,
                        const int depth,const int deviation_init,const int backstep)
  {
   if(CreateBuffers(symbol,period,3))
     {
      //--- linea di stato del rendering
      m_name  ="ZigZag";
      m_status="("+symbol+","+PeriodDescription()+","+
               IntegerToString(depth)+","+IntegerToString(deviation_init)+","+
               IntegerToString(backstep)+") H="+IntegerToString(m_handle);
      //--- salvare le impostazioni
      m_depth=depth;
      m_deviation=deviation_init;
      m_backstep=backstep;       
      //--- creare buffer
      ((CIndicatorBuffer*)At(0)).Name("ZIGZAG");
      ((CIndicatorBuffer*)At(1)).Name("HIGH");
      ((CIndicatorBuffer*)At(2)).Name("LOW");
      //--- ok
      return(true);
     }
//--- errore
   return(false);
  }


Aiutatemi a capire come viene impostata la direzione di indicizzazione dell' array di buffer dell'indicatore, cioè la stessa di ArraySetAsSeries. La direzione predefinita è da presente a passato, ma io ho bisogno di renderla da passato a presente. Da ieri sono alle prese con questa domanda! Aiuto!