La soluzione via DLL è data nell'articolo"Trasferimento di dati tra indicatori - una soluzione semplice di questo problema". Ma dovete aggiungere la chiamata diGetPtr esterno al codice sorgente dell'indicatore, il che non è sempre possibile.
Senza DLL è possibile eseguire solo la lettura (senza scrivere, cosa che viene fatta anche nell'articolo) dei buffer? È cambiato qualcosa su questo argomento da quando è stato scritto l'articolo (2010)?
- docs.mql4.com
Di quanti valori avete bisogno? Che l'indicatore stesso salvi i duplicati di questi valori nelle variabili globali del terminale, nelle proprietà degli oggetti del grafico, nei file
Ho bisogno di uno script per ottenere i valori dei buffer (almeno uno) di un indicatore su un grafico. Scaricare i buffer da un indicatore a un file non è uno script che legge i buffer.
Nell'articolo qui sopra, c'è una bella soluzione tramite puntatori che permette non solo di leggere, ma anche di sovrascrivere i buffer di altri indicatori sui grafici. Questo è ciò che si chiama una lettura del buffer. Ma è una DLL.
Vedete, possiamo implementare il seguente schema
- l'indicatore attende che una variabile globale scriva i suoi buffer nel file.
- Lo script crea tale variabile a runtime e riceve i file corrispondenti.
Per qualche ragione non possono ancora fare una lettura umana dei dati dell'indicatore dal grafico! Sembra delirante, ma è così.
Purtroppo, in questo caso
non sarà d'aiuto.
Perché no? iCustom() legge il buffer dell'indicatore, indipendentemente da come questo buffer viene riempito. Dopo tutto, il buffer è dichiarato al livello delle variabili globali in ogni caso.
Perché iCustom non sa nulla degli eventi Timer e ChartEvent.
Per esempio, l'indicatore sul grafico ogni secondo (evento Timer) riempie il suo unico buffer con numeri casuali (o applica EMA ai valori precedenti del buffer). Questo è un bel po' di righe di codice. iCustom in questo caso non restituirà mai quello che vedrete sul grafico.
Perché iCustom non sa nulla degli eventi Timer e ChartEvent.
Per esempio, l'indicatore sul grafico ogni secondo (evento Timer) riempie il suo unico buffer con numeri casuali (o applica l'EMA ai valori precedenti del buffer). Questo è un bel po' di righe di codice. iCustom non restituirà mai quello che vedrete sul grafico.
Perché no? iCustom() legge il buffer dell'indicatore, indipendentemente da come questo buffer viene riempito. Dopo tutto, il buffer è dichiarato al livello delle variabili globali in ogni caso.
iCustom non legge i buffer dell'indicatore sul grafico, crea una propria copia dell'indicatore nella memoria e legge da essa, solo che le copie del buffer non vengono visualizzate sul grafico. Ma se l'indicatore disegna qualcosa sul grafico in modo indipendente, sarà disegnato quando chiamato tramite iCustom che crea problemi, a proposito
Per esempio, se l'indicatore ha il seguente codice, sarà disegnato quando si chiama iCustom, e il testo si sovrapporrà al testo dell'indicatore sul grafico
ObjectSetString(0, ShortName, OBJPROP_TEXT, "какой-то текст"); ChartRedraw();
iCustom non legge i buffer dell'indicatore sul grafico, crea una propria copia dell'indicatore nella memoria e legge da essa, solo che le copie del buffer non vengono visualizzate sul grafico. Ma se l'indicatore disegna qualcosa sul grafico in modo indipendente, sarà disegnato quando chiamato tramite iCustom che crea problemi, a proposito
Per esempio, se l'indicatore ha il seguente codice, sarà disegnato quando si chiama iCustom, e il testo si sovrapporrà al testo dell'indicatore sul grafico
- 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
Un indicatore viene posizionato sul grafico. Viene ridisegnato dagli eventi Timer, ChartEvent e Calculate.
Ho bisogno di uno script per leggere i valori attuali dei suoi buffer di indicatori(INDICATOR_DATA) che possono essere visti da CTRL+D. È possibile farlo in MT4?