Domande da un "manichino" - pagina 65

 
x100intraday:

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

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Основы языка / Функции / Передача параметров - Документация по MQL5
 
Yedelkin:

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.

 
x100intraday:

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);   
  }

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[])
  {
   int i=0;
   if ExtFunc("s",60,i,high) == 1)
     Buffer[i] = high[i];
  }
 

Saluti a tutti!

Cosa significa l'avvertimento:

possibile perdita di dati a causa della conversione del tipo expert.mq5

durante la compilazione? Dice questo:

   string Symb="EURJPY";
   int DIGITS = SymbolInfoInteger(Symb,SYMBOL_DIGITS);

Cosa c'è che non va?

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
sergey1294:

Passate semplicemente l'array alla vostra funzione per riferimento

Non esattamente:

bool ExtFunc (string str, int P, int i, const double & high[])
  {
   if (high[i] < high[i-1]) return(false);
   return(true);   
  }

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[])
  {
   int i=0;
   if ExtFunc("s",60,i,high) == 1)
     Buffer[i] = high[i];
  }
 
RomanS:

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?

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".
 
RomanS:

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!".

   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".

 
MetaDriver:

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

 
masharov:

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.