Lettura dei buffer degli indicatori impostati sul grafico

 

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?

 

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)?

 
iCustom() vi aiuterà.
iCustom - Технические индикаторы - Справочник MQL4
iCustom - Технические индикаторы - Справочник MQL4
  • docs.mql4.com
iCustom - Технические индикаторы - Справочник MQL4
 
Alexey Viktorov:
iCustom() vi aiuterà.

Purtroppo, in questo caso

ridisegnare daeventi Timer, ChartEvent e Calculate.

non aiuterà.

 
Di quanti valori avete bisogno? Che l'indicatore stesso salvi i duplicati di questi valori nelle variabili globali del terminale, nelle proprietà degli oggetti sul grafico, nei file
 
Alexander Puzanov:
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.
Ma questa non è nemmeno una stampella. Non sta leggendo i buffer.

A giudicare dal silenzio, più di sette anni da quando questo problema è stato annunciato pubblicamente sul quarto forum (google ricorda), gli sviluppatori non hanno creato un funzionale.

Per qualche ragione non possono ancora fare una lettura umana dei dati dell'indicatore dal grafico! Sembra delirante, ma è così.

 
comp:

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.
 
Alexey Viktorov:
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.

 
comp:

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.

Capisco il mio malinteso, grazie.
 
Alexey Viktorov:
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();
 
Alexey Volchanskiy:

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

È strano. Ho letto da qualche parte nella guida che se l'indicatore è già lanciato, non viene creata nessuna copia. Forse non capisco qualcosa.