[SOLVED] Gli indicatori non vengono istanziati correttamente quando vengono chiamati/creati da un indicatore di un diverso time-frame di lavoro. - pagina 4

 
nicholishen:

...

Voglio soprattutto ringraziarti per tutto il tuo aiuto... se non fosse stato per la tua condiscendenza non so dove avrei trovato la motivazione per continuare! /s

Ho visto decine di persone come te qui. Sanno tutto meglio degli altri, non ascoltano, attribuiscono le proprie colpe ad altri (un altro utente, un moderatore, un broker, una piattaforma, Metaquotes, il sistema operativo, o altro...).

Sembra che qui non si impari nulla. Questo NON è un bug, è il modo in cui gli sviluppatori hanno concepito la loro piattaforma. Capisco perché dici che è un bug, ho scoperto MT5 e come funziona anni fa. Se tu avessi questo in mente e lo accettassi, avresti visto molto prima quale era il problema: il tuo approccio e la tua comprensione.

Ma non è così, continuate a dire che è un "bug" o un "difetto grave", questo è semplicemente ridicolo. L'architettura di MT5 che utilizza il comportamento delle funzioni asincrone è ciò che rende questa piattaforma molto più veloce di MT4, naturalmente non è sempre facile da gestire. Il principale difetto di Metaquotes qui è la documentazione incompleta, incomprensibile o mancante.

Quando non capisci qualcosa, dovresti ascoltare gli altri (Stanislav e me per esempio), e certamente non insultare le persone che stanno cercando di aiutarti.

 
Alain Verleyen:

Ho visto decine di persone come te qui. Sanno tutto meglio degli altri, non ascoltano, attribuiscono le proprie colpe ad altri (un altro utente, un moderatore, un broker, una piattaforma, Metaquotes, il sistema operativo, o altro...).

Sembra che qui non si impari nulla. Questo NON è un bug, è il modo in cui gli sviluppatori hanno concepito la loro piattaforma. Capisco perché dici che è un bug, ho scoperto MT5 e come funziona anni fa. Se tu avessi questo in mente e lo accettassi, avresti visto molto prima quale era il problema: il tuo approccio e la tua comprensione.

Ma non è così, continui a dire che è un "bug" o un "difetto grave", questo è semplicemente ridicolo. L'architettura di MT5 che utilizza il comportamento delle funzioni asincrone è ciò che rende questa piattaforma molto più veloce di MT4, naturalmente non è sempre facile da gestire. Il principale difetto di Metaquotes qui è la documentazione incompleta, incomprensibile o mancante.

Quando non capisci qualcosa, dovresti ascoltare altri (Stanislav e me per esempio), e certamente non insultare le persone che stanno cercando di aiutarti.

Eseguire tutti gli indicatori su un singolo thread senza un metodo per chiamare ricorsivamente l'iterazione successiva, a parte impostare un timer, è un difetto. Vuoi parlare di velocità? Invece di rimettere l'elaborazione in coda ho appena speso un ms in più per un workaround. Probabilmente non è la fine del mondo, ma richiede comunque un workaround. Sono molto grato a coloro che mi hanno aiutato a capire il workaround e perché era necessario dato il vincolo della piattaforma. Sto ancora cercando di capire cosa avete portato alla discussione oltre alla condiscendenza, comunque.
 
nicholishen:
Eseguire tutti gli indicatori su un unico thread senza un metodo per chiamare ricorsivamente l'iterazione successiva che non sia impostare un timer è un difetto. Vuoi parlare di velocità? Invece di rimettere l'elaborazione in coda ho appena speso un ms in più per un workaround. Probabilmente non è la fine del mondo, ma richiede comunque un workaround. Sono molto grato a coloro che mi hanno aiutato a capire il workaround e perché era necessario dato il vincolo della piattaforma. Sto ancora cercando di capire cosa avete portato alla discussione oltre alla condiscendenza, comunque.

Vi trovo molto aggressivi. Fin dall'inizio stavo solo cercando di spiegarvi cosa sta succedendo, in base ai miei anni di esperienza con MT5. Non sono accondiscendente, sono esperto e ho sperimentato, e merito rispetto (come tutti). Solo che dal post #14 vedo che vuoi farlo funzionare senza un nuovo tick, ma nello stesso post mi sono sentito assalito dalla tua parola "furiosamente", quindi ho rinunciato.

Comunque il topic è chiuso, grazie per avermi spinto ad imparare qualcosa di nuovo.

 

Mi sono grattato la testa per anni su questo.

Per chiunque altro incontri questo problema, sembra esserci un semplice work around.

Aggiungere una variabile a livello di modulo (RunOnce) per determinare quando stiamo eseguendo OnCalculate per la prima volta. Su quella prima esecuzione, restituire zero e impostare la variabile true per prevenire ulteriori interruzioni.


bool RunOnce = false;

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[]) {
               
   if (rates_total == prev_calculated) return (rates_total);
   if (!RunOnce) {
      RunOnce = true;
      return (0);
   }
  
REST OF YOUR CODE HERE.


Ha funzionato molto bene per me, spero che aiuti anche voi.

[SOLVED]Indicators are not properly instantiated when called/created from an Indicator of different working time-frame.
[SOLVED]Indicators are not properly instantiated when called/created from an Indicator of different working time-frame.
  • 2017.01.30
  • www.mql5.com
UPDATE: See the workaround below CopyBuffer() throws an error of 4806 (Indicator data not accessible) when calling an indicator with a different Ti...
 
Tks per la soluzione