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

 
Alain Verleyen:

Stai ripetendo "non riuscendo a istanziare", ma non è esatto. L'indicatore viene istanziato in tutti i casi.

Il problema è che i dati non sono disponibili in modo sincrono, devi occupartene tu. NON è un bug di MT5, è una CARATTERISTICA.

Propongo di fermare la discussione e aspettare la risposta di SD.

Forse non ho articolato correttamente che non importa quanti loop e attese, non sarà possibile accedere ai dati dell'indicatore (di diversi TF) fino a dopo il primo passaggio di (*edit) OnCalculate();

Sono perfettamente disposto ad accettare che potrei sbagliarmi, ed è per questo che ho una taglia di 10 dollari se potete dimostrare il contrario. Per favore, dimostratemi che mi sbaglio. Ho bisogno di un workaround per questo stupido bug, scusate, volevo dire "caratteristica".

 
nicholishen:

Forse non ho articolato correttamente che non importa quanti loop e attese, non sarà possibile accedere ai dati dell'indicatore (di diversi TF) fino a dopo il primo passaggio di (*modifica) OnCalculate();

Sono perfettamente disposto ad accettare che potrei sbagliarmi, ed è per questo che ho una taglia di 10 dollari se potete dimostrare il contrario. Per favore, dimostratemi che mi sbaglio. Ho bisogno di un workaround per questo stupido bug, scusate, volevo dire "caratteristica".

Perché ne avete bisogno al primo "passaggio"? Se i dati necessari non sono disponibili, aspettate che lo siano, tutto qui.
 
Alain Verleyen:
Perché vi serve al primo "passaggio"? Se i dati necessari non sono disponibili, aspettate che lo siano, tutto qui.

Perché sto sviluppando un indicatore che richiede l'accesso ai dati dello stesso indicatore (stesso simbolo) su un diverso time-frame. Poiché non elaborerà fino a dopo il secondo tick, questo significa che l'indicatore non funzionerà offline, e funzionerà solo quando arriverà il secondo tick.

Perché dovremmo scendere a compromessi a causa di questo bug? Cosa c'è da difendere così furiosamente?

 
nicholishen:

Perché sto sviluppando un indicatore che richiede l'accesso ai dati dello stesso indicatore (stesso simbolo) su un diverso time-frame. Poiché non elaborerà fino a dopo il secondo tick, questo significa che l'indicatore non funzionerà offline, e funzionerà solo quando arriverà il secondo tick.

Perché dovremmo scendere a compromessi a causa di questo bug? Cosa c'è da difendere così furiosamente?

???

Io non difendo nulla, e certamente non "furiosamente". Per favore, state calmi.

 
Alain Verleyen:

???

Non difendo nulla, e certamente non "furiosamente". Per favore, state calmi.

Forum sul trading, sistemi di trading automatico e test di strategie di trading

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

Alain Verleyen, 2017.01.31 12:46

Ok non mi credi, è un tuo diritto, ma ti sbagli

Posso solo suggerirti di scrivere al ServiceDesk, e per favore riporta qui la loro risposta.


OK.

Ho postato questo lavoro nel caso in cui qualcuno sia interessato a fare un tentativo.

https://www.mql5.com/en/job/57516

 
nicholishen:

Questo significa che se i dati sono immediatamente disponibili per uno script o un EA, allora sarebbero ugualmente disponibili per l'indicatore (non è un problema di disponibilità dei dati). L'indicatore sta semplicemente fallendo nell'istanziare prima del secondo passaggio di OnCalculate() (ovvero il primo tick)

Tu capisci la parola "disponibilità" troppo letteralmente. Mentre alcuni dati possono esistere nella memoria del terminale, il terminale stesso può contenere qualche logica di sincronizzazione che blocca gli aggiornamenti per qualsiasi timeframe mentre i dati sottostanti vengono controllati per un (probabilmente un altro) timeframe. Oppure possono bloccare le richieste di dati da un indicatore fino a quando non termina la propria creazione (per favore, ricordate che gli indicatori sono gestiti da cosiddetti handle, mentre gli esperti e gli script non lo fanno) e questo mi sembra logico. Queste sono solo ipotesi, che ho fatto dal punto di vista degli sviluppatori di MQ. Puoi chiedere direttamente a loro tramite il service desk.

Il tuo lavoro è impossibile da realizzare a causa del punto 3:

3. Deve accedere al buffer all'inizializzazione

Questo è proprio contro l'architettura e la documentazione del terminale:

Non si può fare riferimento ai dati dell'indicatore subito dopo la sua creazione, perché il calcolo dei valori dell'indicatore richiede un certo tempo

Leggete anche la funzione CopyBuffer:

Nota

Quando si richiedono idati dall'indicatore, se le serie temporali richieste non sono ancora costruite o devono essere scaricate dal server, la funzione restituisce immediatamente-1, ma viene avviato il processo di download/costruzione.

Quando si richiedono dati da un Expert Advisor o da uno script, si inizierà ildownload dal server, se il terminale non ha questi dati localmente, o si inizierà la costruzione di una serie temporale richiesta, se i dati possono essere costruiti dallo storico locale ma non sono ancora pronti. La funzione restituisce la quantità di dati che saranno pronti al momento della scadenza del timeout.

Così, gli esperti e gli script vengono elaborati in modo sincrono fino a un timeout predefinito, ma gli indicatori - in modo asincrono.

Documentation on MQL5: Technical Indicators
Documentation on MQL5: Technical Indicators
  • www.mql5.com
Technical Indicators - Reference on algorithmic/automated trading language for MetaTrader 5
 
Per quanto riguarda il tuo compito specifico, può essere fatto facilmente in altro modo. Non sei il primo che costruisce un indicatore su indicatore e vuole che funzioni offline. Usa un timer.
 
Stanislav Korotky:
Per quanto riguarda il tuo compito specifico, può essere fatto facilmente in altro modo. Non sei il primo che costruisce un indicatore su indicatore e vuole che funzioni offline. Usa un timer.
Provato. Non ha funzionato.
 
nicholishen:
Provato. Non ha funzionato.
Pubblica una domanda più specifica con un codice di esempio. Potrebbe essere buggato. L'approccio funziona per me.
 
Stanislav Korotky:
Pubblica una domanda più specifica con un codice di esempio. Potrebbe essere buggato. L'approccio funziona per me.
Non capisco come posso essere più specifico di quello che ho già fatto...

Nessuna quantità di timer o loop può superare il fatto che l'indicatore non si istanzia fino a quando Oncalculate non ritorna almeno una volta. Anche la ricorsione non funziona.