Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 503

 
Vladimir Fionov:
Per le coppie di valute, se si mette un limite, tutto funziona, ma per il timeframe non funziona, anche se lo si mette sull'indicatore h1 non funziona

https://docs.mql4.com/ru/chart_operations/periodwindow

https://docs.mql4.com/ru/constants/chartconstants/enum_timeframes

Valore di ritornoPeriodo del grafico corrente (in minuti).

if(Period() != 60)  return(-1); // для H1

Provate, forse funzionerà.

if(Period() != PERIOD_H1)  return(-1);

O rimuovere le virgolette.

Period - Документация на MQL4
  • docs.mql4.com
Period - Документация на MQL4
 
Vladimir Zubov:

https://docs.mql4.com/ru/chart_operations/periodwindow

https://docs.mql4.com/ru/constants/chartconstants/enum_timeframes

Valore di ritornoPeriodo del grafico corrente (in minuti).

Provatelo e vedete se funziona.

Grazie mille, ha funzionato!!!
 
Un'altra domanda, quando si aggiunge una #proprietà rigorosa all'inizio l'indicatore dà un errore array fuori range in 'Indicator name' (100,41) come affrontare questo

 
Vladimir Fionov:
Un'altra domanda, quando si aggiunge all'inizio quando l'indicatore #property strict dà errore array fuori range in 'Indicator name' (100,41) come comportarsi

Dovete sistemare l'array fuori portata. Localizzazione del problema nel tuo codice: linea 100, carattere alla posizione 42.
 
Vladimir Fionov:

Cosa c'è che non va?

  1. Incolla correttamente il codice nel forum
  2. Dovresti correggere l'errore di superare i limiti dell'array"ema[]". Probabilmente state calcolando la variabile"limite" in modo errato.
 
Karputov Vladimir:
  1. Inserire correttamente il codice nel forum
  2. Dovresti correggere l'errore di superare i limiti dell'array"ema[]". Probabilmente state calcolando la variabile"limite" in modo errato.
Scusa, non sapevo dell'inserimento del codice, ma del codice stesso, perché questo succede quando inserisci #property strict e tutto funziona senza di esso
 
Vladimir Fionov:
Mi dispiace, non sapevo dell'inserimento del codice, ma per quanto riguarda il codice stesso, perché succede quando si inserisce #property strict e tutto funziona senza?

Avete visto l'aiuto in MetaEditor?

Anche il lavoro con le funzioni, lo scopo delle variabili e la liberazione della memoria negli array locali è cambiato. Poiché i cambiamenti si sono rivelati abbastanza significativi, si è deciso di introdurre una nuova proprietà #property strict per massimizzare la compatibilità con il vecchio approccio alla scrittura dei programmi MQL4. Quando si crea un nuovo programma MQL4 usando la procedura guidata MQL4, questa proprietà viene sempre aggiunta al modello.

E così via:

Tabella delle differenze tra i compilatori:

Vecchio compilatore MQL4

Nuovo compilatore MQL4

Nuovo compilatore MQL4 con #property strict

I punti di ingresso init(), start(), deinit() possono avere qualsiasi parametro e qualsiasi tipo di ritorno

init(), start(), deinit() mantenuti per compatibilità,

e i nuoviOnInit(),OnStart(),OnCalculate(),OnTick(),OnTimer(),OnChartEvent(),OnTester(),OnDeinit() devono corrispondere esattamente alle loro firme

Stesso

Il risultato di ritorno della funzione init() non è analizzato in alcun modo dal sottosistema di esecuzione

Il risultato di ritorno delle funzioni init() e OnInit() non è analizzato in alcun modo dal sottosistema di esecuzione

Quando ritorna un valore diverso da zero da OnInit(), l'esperto o l'indicatore si ferma e il programma viene scaricato

I nomi delle variabili possono essere quasi tutti (eccetto le parole riservate), compresi i caratteri speciali e i punti fermi

I nomi delle variabili non possono avere caratteri speciali e punti fermi.

La listadelle parole riservate è estesa, quindi parole comuni come short, long, const, ecc. non possono essere usate come nomi.

Stesso

Lo scopo di una variabile è dalla dichiarazione (anche in un blocco annidato) alla fine della funzione.

Stesso

Gamma di visibilità di una variabile - dalla dichiarazione alla fine del blocco in cui la variabile è dichiarata.

Inizializzazione implicita di tutte le variabili (sia globali che locali) con degli zeri.

Lo stesso

Inizializzazione delle sole variabili globali. Dalle variabili locali, solo le stringhe sono inizializzate implicitamente

Gli array locali non sono liberati quando si lascia la funzione

Gli array locali sono liberati quando si lascia la funzione

Gli array locali sono liberati in uscita {}

L'errore"Array out of range" non porta ad un errore critico*.

Lo stesso. Tranne che per gli array di strutture e classi per le quali questo errore è critico

"Array out of range" è un errore critico e causa l'arresto del programma

Nessuna struttura e classi

Ci sonostrutture e classi. Appaiono altri tipi di dati.

Stesso

Stringhe - a singolo byte.

datetime - intero a 32 bit

La variabile predefinita Volume è di tipo double

Stringhe - unicode.

datetime - intero a 64 bit

Ilvolume è una variabile predefinita di tipo lungo.

Stesso

ArrayCopyRates() produce una copia virtuale nell'array double[][6]

ArrayCopyRates() produce una copia virtuale dell'array MqlRates[]. Per compatibilità, la copia nell'array double[][6] rimane, ma questa copia non è virtuale ma reale.

Anche.

Le funzioni non possono restituire valori anche se hanno un tipo. A questo scopo, il compilatore inserisce automaticamente return(0) alla fine della funzione.

Lo stesso.

Le funzioni di qualsiasi tipo devono sempre restituire un valore

Numero di file aperti simultaneamente - 32

Numero di file aperti simultaneamente - 64

Stesso

I file sono sempre aperti in modalità condivisa **.

La modalità di condivisione deve essere dichiarata esplicitamente con FILE_SHARE_READ e/o FILE_SHARE_WRITE

Stesso

Gli script nella finestra di input mostrano i nomi delle variabiliesterne

I nomi dellevariabiliesterne e diinput sono mostrati nella finestra dei parametri di input per gli script in modalità show_inputs.

Per gli script in modalità show_inputs, i commenti alle stringhe sono mostrati nella finestra di input al posto dei nomi dellevariabiliesterne e diinput

* Dovresti prestare particolare attenzione all'errore "Array out of range" - molti vecchi indicatori personalizzati produrranno questo errore nel nuovo compilatore in modalità rigorosa quando vengono eseguiti su un grafico. È auspicabile trovare la causa ed eliminarla.

** Nel nuovo MQL4 e MQL5 i flag FILE_SHARE_READ e FILE_SHARE_WRITE sono responsabili della modalità di condivisione dei file, non esistevano nel vecchio MQL4.

Препроцессор - Документация на MQL4
  • docs.mql4.com
Препроцессор - Документация на MQL4
 
Vladimir Fionov:
dimmi cosa c'è che non va?
  int idx;
  int counted = IndicatorCounted();
  if (counted < 0) return (-1);
  if (counted > 0) counted--;
  int limit = Bars - counted;
  if(counted == 0) limit-=1;
Provate ad aggiungere una linea come questa.
 
Vladimir Fionov:

Scusa se ti disturbo, ma ora c'è questo errore

39° posizione.

Stesso errore, array fuori portata?
 
Vladimir Zubov:
Stesso errore, array fuori portata?