In realtà, sono appena arrivato da lì e gli errori di compilazione che ho menzionato nel mio messaggio precedente sono accaduti dopo aver letto la sezione precedente.
Ora l'ho riletto attentamente - è tutta una questione di cost e dove metterlo.
InOnCalculate posso facilmente usare elementi di array come high by index. È anche possibile accedere agli elementi dell'indice di questo array in ExtFunc? Quando chiamo la mia funzione, dovrei passare l'array-argomento per riferimento, tramite puntatore o qualcos'altro? Finora sono riuscito a ridurre al minimo i messaggi di errore a: "'alto' - la conversione dei parametri non è consentita" e "'alto' - la variabile costante non può essere passata come riferimento" per quanto riguarda la stessa linea della mia chiamata di funzione con l'argomento array di OnCalculate. È senza speranza o c'è una soluzione?
Finora in OnCalculate ho fatto ricorso alla copia di alto in un altro array:
e poi usare CopyOfHigh in ExtFunc invece di usare direttamente high-array.
Dovete solo passare l'array alla vostra funzione per riferimento
bool ExtFunc (string str, int P, int i, double & high[])
{
if (high[i] < high[i-1]) return(false);
return(true);
}
intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
int i=0;
if ExtFunc("s",60,i,high) == 1)
Buffer[i] = high[i];
}
La funzioneSymbolInfoInteger() restituisce un valore di tipo long (vedi Reference), mentre DIGITS è dichiarato come int. Questa è una conversione implicita di tipo. Vedere "Conversione del tipo".
Il significato di questo messaggio varia a seconda del contesto in cui viene considerato.
Per esempio:
1. "Fai una conversione esplicita del tipo!".
int DIGITS = (int) SymbolInfoInteger(Symb,SYMBOL_DIGITS);
2. "Possibile contrazione dei dati con conversione implicita dei tipi" // Questa è una traduzione letterale.
Questo è comprensibile, poiché il tipo lungo restituito dalla funzione ha una dimensione maggiore e copre una gamma più ampia di valori.
Un'altra opzione che mi viene in mente più spesso ultimamente:
3. "Lo staff di MetaQuotes non capisce quanto sarebbe bello, attraente ed efficace imparare se i messaggi di errore e gli avvertimenti del compilatore mql5 fossero dati nella lingua nativa dell'utente".
... quanto sarebbe bello, attraente ed efficace imparare se i messaggi di errore del compilatore mql5 e gli avvertimenti fossero dati nella lingua nativa dell'utente".
Sì, non sarebbe male. Anche se personalmente sono già un po' esperto in inglese, e i traduttori sono una decina al giorno d'oggi, ma di nuovo, questo richiede tempo prezioso, che non è così tanto. Alcune persone non ne hanno abbastanza per usare un traduttore per un argomento così complicato come il trading sui mercati finanziari + la programmazione. MetaTrader 5 è una piattaforma multilingue. Vorrei che i messaggi e i commenti negli esempi di aiuto (a volte li incontriamo) fossero nella lingua che è stata selezionata nel terminale.
Ho il sospetto che se l'indicatore è attivato tramite iCustom, viene calcolato su ogni tick. E non dipende dalle chiamate ad esso attraverso il CopyBuffer. È corretto?
Se è corretto, allora è possibile disabilitare il calcolo dell'indicatore e abilitarlo solo prima di chiamare il CopyBuffer?
Ho il sospetto che se l'indicatore è attivato tramite iCustom, viene calcolato su ogni tick. E non dipende dalle chiamate ad esso attraverso il CopyBuffer. È corretto?
Dipende dalla logica dell'indicatore personalizzato. In realtà, può ricalcolare i suoi valori una volta al giorno, saltando tutti gli altri tick. Per così dire, secondo la volontà dell'autore.
masharov:
Se è così, è possibile disabilitare il ricalcolo dell'indicatore e abilitarlo solo prima di chiamare il CopyBuffer?
Fondamentalmente, alcune persone cercano di usare questo approccio mostruoso: creare una copia dell'indicatore tramite iCustom, copiare i dati richiesti, cancellare la copia dell'indicatore. La procedura viene ripetuta secondo necessità.
C'è anche la funzione OnTimer(), non ci ho lavorato io stesso, ma forse puoi adattarla al tuo compito.
Quando chiamo la mia funzione, devo passare l'array per riferimento, tramite puntatore o qualcos'altro?
Leggete la sezione sul passaggio di parametri per valore e per riferimento:
Riferimento a MQL5 / Fondamenti del linguaggio / Funzioni / Passaggio di parametri
Leggete la sezione del Manuale di riferimento sul passaggio di parametri per valore e per riferimento:
Riferimento a MQL5 / Fondamenti del linguaggio / Funzioni / Passaggio di parametri
In realtà, sono appena arrivato da lì e gli errori di compilazione che ho menzionato nel mio messaggio precedente sono accaduti dopo aver letto la sezione precedente.
Ora l'ho riletto attentamente - è tutta una questione di cost e dove metterlo.
Grazie, l'ho capito.
InOnCalculate posso facilmente usare elementi di array come high by index. È anche possibile accedere agli elementi dell'indice di questo array in ExtFunc? Quando chiamo la mia funzione, dovrei passare l'array-argomento per riferimento, tramite puntatore o qualcos'altro? Finora sono riuscito a ridurre al minimo i messaggi di errore a: "'alto' - la conversione dei parametri non è consentita" e "'alto' - la variabile costante non può essere passata come riferimento" per quanto riguarda la stessa linea della mia chiamata di funzione con l'argomento array di OnCalculate. È senza speranza o c'è una soluzione?
Finora in OnCalculate ho fatto ricorso alla copia di alto in un altro array:
e poi usare CopyOfHigh in ExtFunc invece di usare direttamente high-array.Dovete solo passare l'array alla vostra funzione per riferimento
Saluti a tutti!
Cosa significa l'avvertimento:
possibile perdita di dati a causa della conversione del tipo expert.mq5
durante la compilazione? Dice questo:
Cosa c'è che non va?
Passate semplicemente l'array alla vostra funzione per riferimento
Non esattamente:
Saluti a tutti!
Cosa significa l'avvertimento:
possibile perdita di dati a causa della conversione del tipo expert.mq5
durante la compilazione? Dice questo:
Cosa c'è che non va?
Cosa significa l'avvertimento:
possibile perdita di dati a causa della conversione del tipo
Il significato di questo messaggio varia a seconda del contesto in cui viene considerato.
Per esempio:
1. "Fai una conversione esplicita del tipo!".
2. "Possibile contrazione dei dati con conversione implicita dei tipi" // Questa è una traduzione letterale.
Questo è comprensibile, poiché il tipo lungo restituito dalla funzione ha una dimensione maggiore e copre una gamma più ampia di valori.
Un'altra opzione che mi viene in mente più spesso ultimamente:
3. "Lo staff di MetaQuotes non capisce quanto sarebbe bello, attraente ed efficace imparare se i messaggi di errore e gli avvertimenti del compilatore mql5 fossero dati nella lingua nativa dell'utente".
... quanto sarebbe bello, attraente ed efficace imparare se i messaggi di errore del compilatore mql5 e gli avvertimenti fossero dati nella lingua nativa dell'utente".
Ho il sospetto che se l'indicatore è attivato tramite iCustom, viene calcolato su ogni tick. E non dipende dalle chiamate ad esso attraverso il CopyBuffer. È corretto?
Se è corretto, allora è possibile disabilitare il calcolo dell'indicatore e abilitarlo solo prima di chiamare il CopyBuffer?
Ho il sospetto che se l'indicatore è attivato tramite iCustom, viene calcolato su ogni tick. E non dipende dalle chiamate ad esso attraverso il CopyBuffer. È corretto?
Dipende dalla logica dell'indicatore personalizzato. In realtà, può ricalcolare i suoi valori una volta al giorno, saltando tutti gli altri tick. Per così dire, secondo la volontà dell'autore.
Se è così, è possibile disabilitare il ricalcolo dell'indicatore e abilitarlo solo prima di chiamare il CopyBuffer?
Fondamentalmente, alcune persone cercano di usare questo approccio mostruoso: creare una copia dell'indicatore tramite iCustom, copiare i dati richiesti, cancellare la copia dell'indicatore. La procedura viene ripetuta secondo necessità.
C'è anche la funzione OnTimer(), non ci ho lavorato io stesso, ma forse puoi adattarla al tuo compito.