Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 30

Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Non lo capisco affatto...
Creo un handle di un AO standard nell'indicatore, ma con un timeframe impostato. Quando ricevo dati da AO con un timeframe che non corrisponde a quello attuale, ottengo ... Non ottengo nulla - errore 4806.
Domanda: Qual è il modo corretto per ottenere dati da indicatori standard con tempi che non coincidono con quello attuale?
Non lo capisco affatto...
Creo un handle di un AO standard nell'indicatore, ma con un timeframe impostato. Quando ricevo dati da AO con un timeframe che non corrisponde a quello attuale, ottengo ... Non ottengo nulla - errore 4806.
Qual è la domanda, qual è il modo corretto per ottenere i dati da indicatori standard con timeframes che non coincidono con quello attuale?
Su come ottenere i valori dell'INDICATORE nell'INDICATORE:
Forum sul trading, sistemi di trading automatico e test di strategia
Come prendere dati da un altro indicatore in un indicatore
Vladimir Karputov, 2016.12.27 08:41
Tenendo presente che negli indicatori MQL5, la barra con indice "0" è di default la barra di SINISTRA del grafico, proviamo ad ottenere i dati nel nostro indicatore da altri due indicatori - MA e Alligator(questo esempio nell'indicatore "IndicatorFromIndicators.mql5").
Proviamo a ricevere dati da MA e Alligator sulla barra con indice "0", "1" e "2":
//---
Comment("Проверка: time[0]=",time[0],"\n",
"rates_total-1: ",rates_total,"\n",
"BarsCalculated(iMA): ",BarsCalculated(handle_iMA),"\n",
"BarsCalculated(iAlligator): ",BarsCalculated(handle_iAlligator),"\n",
"MA[",0,"]=",StringFormat("%."+IntegerToString(Digits()+1)+"f",iMAGet(0)),"\n",
"MA[",1,"]=",StringFormat("%."+IntegerToString(Digits()+1)+"f",iMAGet(1)),"\n",
"MA[",2,"]=",StringFormat("%."+IntegerToString(Digits()+1)+"f",iMAGet(2)),"\n",
"Jaws[",0,"]=",StringFormat("%."+IntegerToString(Digits())+"f",iAlligatorGet(GATORJAW_LINE,0)),"\n",
"Jaws[",1,"]=",StringFormat("%."+IntegerToString(Digits())+"f",iAlligatorGet(GATORJAW_LINE,1)),"\n",
"Jaws[",2,"]=",StringFormat("%."+IntegerToString(Digits())+"f",iAlligatorGet(GATORJAW_LINE,2)));
//--- return value of prev_calculated for next call
return(rates_total);
}
Colleghiamo l'indicatore di prova"IndicatorFromIndicators.mql5" al grafico e impostiamo il mirino sulla barra più a destra - cioè non è la barra zero. Questo è quello che sembra:
Anche se il mirino è impostato sulla barra più a destra - cioè sicuramente non una barra con indice "0", quando si usaCopyBuffer si deve essere consapevoli cheCopyBuffer copierà i dati dal presente al passato, cioè la barra con indice "0" significa la barra corrente.
CopyBuffer: gli elementi di dati da copiare (buffer di indicatori con un indice buffer_num) sono contati dalla posizione iniziale dal presente al passato, cioè la posizione iniziale di 0 significa la barra attuale (valore dell'indicatore per la barra attuale).
Cioè, nell'indicatore MQL5, se usa l'operazione CopyBuffer, bisogna capovolgere l'array (ArraySetAsSeries), in modo che la barra più a destra nel grafico corrisponda all'indice "0" nel buffer dell'indicatore (ora nell'esempio "iMTF_AO.mq5", la barra più a destra nel grafico corrisponde a rates_total-1).
Per ottenere i valori di INDICATOR in INDICATOR:
CopyBuffer: gli elementi dei dati copiati (buffer indicatore con un indice buffer_num) sono contati dalla posizione di partenza dal presente al passato, cioè la posizione di partenza uguale a 0 significa la barra corrente (valore dell'indicatore per la barra corrente).
Cioè, nell'indicatore MQL5, se usa l'operazione CopyBuffer, bisogna capovolgere l'array (ArraySetAsSeries), in modo che la barra più a destra nel grafico corrisponda all'indice "0" nel buffer dell'indicatore (ora nell'esempio "iMTF_AO.mq5", la barra più a destra nel grafico corrisponde a rates_total-1).
Ottengo solo una barra. E l'indicatore sul timeframe "nativo" visualizza i dati normalmente. Sul valore "non nativo" - vuoto. Ho capito empiricamente che viene restituito un valore vuoto fino a quando non viene caricata l'intera cronologia per il lasso di tempo in cui ricevo i dati da AO.
La domanda sarebbe allora: come evitare di entrare nel ciclo mentre la storia viene caricata per il timeframe? È solo un test, in generale l'indicatore esegue i calcoli in base alla storia del timeframe specificato e non c'è bisogno di provare a eseguirli mentre la storia non è presente.
Ho solo una barra. E l'indicatore sul timeframe "nativo" visualizza i dati normalmente. Su quello "non nativo" mostra un valore vuoto. Ho capito empiricamente che un valore vuoto sarà restituito fino a quando tutta la storia è caricata per il timeframe, da cui ricevo i dati da AO.
Allora la domanda suonerà in modo diverso: come non entrare nel loop, mentre la storia per il timeframe è in caricamento? Questo è solo un test. In generale, l'indicatore esegue i calcoli in base alla storia di un determinato timeframe e non c'è bisogno di provare ad eseguirli finché non c'è storia.
La "i" non è "0", ma qualche valore esorbitante. In conclusione: diciamo che eseguiamo l'esempio su M15 - abbiamo 5000 barre su questo periodo. Richiediamo i dati di H4 - abbiamo solo 400 barre su di esso. Poi proviamo a richiedere "AO(4999)".
Cioè, dal periodo H4 cerchiamo di richiedere la barra con l'indice "4999" - ma non c'è nessuna barra del genere su H4, ci sono solo 400 barre, ma richiediamo la barra "0", e se l'indicatore usa l'operazione CopyBuffer, dovremmo invertire l'array (ArraySetAsSeries), in modo che la barra più a destra nel grafico corrisponda all'indice "0" nel buffer dell'indicatore (ora nell'esempio "iMTF_AO.mq5" la barra più a destra sul grafico corrisponde a rates_total-1).
Forum sul trading, sistemi di trading automatico e test di strategie di trading
Bug, bug, domande
fxsaber, 2017.04.12 08:38
Una piccola punta di cappello. Bypassare l'operatore di assegnazioneRisultato
Qui..:
La "i" non è "0", ma qualche valore esorbitante. In conclusione: diciamo che eseguiamo l'esempio su M15 - abbiamo 5000 barre su questo periodo. Richiediamo i dati di H4 - abbiamo solo 400 barre su di esso. Poi proviamo a richiedere "AO(4999)".
Per esempio, dal periodo H4, cerchiamo di richiedere la barra con indice "4999" - ma non c'è una tale barra su H4, ci sono solo 400 barre lì, ma vogliamo la barra "0", e se l'indicatore usa l'operazione "CopyBuffer", dovremmo invertire l'array (ArraySetAsSeries), in modo che la barra più a destra nel grafico corrisponde all'indice "0" nel buffer dell'indicatore (per esempio "iMTF_AO.mq5" ora la barra più a destra nel grafico corrisponde a rates_total-1).
No, naturalmente ho cercato di calcolare il limite:
... Ma vedo che ho sbagliato in fretta - è appropriato solo per il periodo attuale
No, naturalmente ho cercato di calcolare il limite:
... Ma vedo, ho fatto un casino nella fretta - è appropriato solo per il periodo attuale
Hai almeno guardato il codice che ti ho mostrato? O l'hai eseguito?
Non ho chiesto come riempire il buffer dell'indicatore, ma perché se prendo valori da AO non dalla barra corrente, restituiscono valori vuoti.
Ho capito - non c'è storia, viene caricata e mentre viene caricata AO da un timeframe non nativo restituisce l'errore "no data".
Ora la domanda è: come sapere che la storia per il timeframe necessario è completamente caricata, in modo da non entrare nel ciclo dell'indicatore?