Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 794
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
Questo è un esempio di come farlo in un indicatore. La domanda riguardava Expert Advisor.
Forum sul trading, sistemi di trading automatico e test di strategia
Tutte le domande dei neofiti su MQL4, aiuto e discussione su algoritmi e codici
Nord-ovest, 2019.03.28 03:54
Buona giornata a tutti!
Ho perso due ore ma non ho trovato nulla.
Potete dirmi per favore come in mq4, nell'EA, per correggere
costruire un indicatore utilizzando i dati di un altro utilizzando le funzioni integrate
e dovrebbe essere visualizzato nei test nella sottofinestra come dovrebbe essere,
per esempio MA su dati RSI?
Ma, in generale, è quasi giusto. È più facile scrivere un indicatore e prenderne i valori che riempire un array per iMAOnArray. Ma perché due cicli?
Ma perché due cicli?
non controllare la prima esecuzione dell'indicatore o il caricamento dei dati storici
a volte è più compatto ed efficiente usare il controllo delle condizioni in while/for piuttosto che fare un ulteriore if e poi usare gli operatori di loop dopo che la condizione è soddisfatta
se "infilate" il codice di calcolo di iMAOnArray() in un ciclo che riempie l'array di dati RSI, causerà calcoli errati degli elementi non ancora riempiti dell'array rsiBuffer[]
nota, ho usato nel calcolo di esempio iMAOnArray() per tutti gli elementi dell'array (totale = 0). Ho studiato questa domanda alcuni mesi fa, ma ahimè, non ci sono informazioni specifiche su come utilizzare correttamente iMAOnArray() e il parametrohttps://docs.mql4.com/ru/indicators/imaonarray in esso
int totale, // numero di elementi
argomento iMAOnArray() https://www.mql5.com/ru/forum/303372/page2#comment_10617854
Questo è un esempio di come farlo in un indicatore. La domanda riguardava l'Expert Advisor.
Sei sicuro che questa fosse la domanda?
Si può vedere nella sottofinestra durante i test,
)))))
non controllare la prima esecuzione dell'indicatore o il caricamento dei dati storici
A volte è più compatto ed efficiente usare il controllo delle condizioni nel codice while/for piuttosto che fare un ulteriore if e poi usare gli operatori di loop dopo che la condizione è soddisfatta
Sei sicuro che è quello che volevi chiedere?
)))))
)))) Non è la prima volta che vengo colto un po' distratto. Non sono nemmeno arrivato alla fine dell'indicatore.
Ma circa l'ulteriore se
può essere scritto come
Non usate dischi come questo?Igor Makanu:
...Ho studiato questa domanda qualche mese fa, ma ahimè non ci sono informazioni specifiche su come utilizzare correttamente iMAOnArray() e il suo parametrohttps://docs.mql4.com/ru/indicators/imaonarray
int totale, // numero di elementi
Il numero di elementi è importante quando non hai bisogno di una media semplice. Non riesco a ricordare quali tipi di MA usano il loro valore precedente nei loro calcoli a colpo d'occhio. In questo caso il numero di elementi influenzerà il risultato. In generale, si risolve in mql5 in mezzo tick e non mi interessa più.
Non usate queste voci?
Lo uso, ma di solito scrivo i miei codici "in due passaggi" - quando scrivo da zero, uso costruzioni che sono chiare per il "parsing fonetico" (cioè essenzialmente per la lettura ad alta voce), con le condizioni if() è più facile dire tutto )))
poi, sì, posso "riordinare il codice" un po' e fare costituzioni simili, ma di solito lo uso nella mia libreria di esempi già pronti (codici)
SZS: ho visto da qualche parte delle informazioni sull'aumento della produttività dei programmi C#. So per certo che si raccomandava di cercare di evitare di usare foreach() e questo operatore ? come l'operatore if() è più produttivo, ma penso che non sia critico - lo uso come mi pare
Il numero di elementi è importante quando non hai bisogno di una media semplice. Non riesco a ricordare quali IA usano il loro valore precedente nei loro calcoli a colpo d'occhio. In questo caso il numero di elementi influenzerà il risultato. In generale, in mql5 si risolve in mezzo tick e non mi interessa.
È un problema più profondo, ho cercato sia su questo forum che sul forum inglese, c'era una discussione ed esempi di utilizzo, il parametro totale = 0 o totale !=0 può rendere il calcolo di iMAOnArray() diverso - in una discussione con Igor (link sopra), ho deciso di usare iMAOnArray() solo con il parametro totale = 0 - la stessa soluzione era usata in vecchie discussioni
C'è un problema più profondo, ho cercato sia su questo forum che sul forum inglese, c'era una discussione ed esempi di utilizzo, dal parametro totale = 0 o totale !=0 il calcolo di iMAOnArray() può essere diverso - nella discussione con Igor (link sopra), ho deciso di usare iMAOnArray() solo con il parametro totale = 0 - nelle vecchie discussioni veniva usata la stessa soluzione
Proprio così. Se non si prendono tutti gli elementi dell'array e si cerca di ottenere anche EMA senza errori, sarà difficile.
Media mobile esponenziale (EMA)
La media mobile esponenzialmente lisciata è determinata aggiungendo al valore della media mobile precedente una certa parte del prezzo di chiusura corrente. Con le medie mobili lisciate esponenzialmente, l'ultimo prezzo di chiusura ha più peso. Una media mobile esponenziale percentuale P avrà la seguente forma:
EMA = (CLOSE (i) * P) + (EMA (i - 1) * (100 - P))
Dove:
CLOSE (i) - prezzo di chiusura del periodo corrente;
EMA (i - 1) - valore della media mobile del periodo precedente;
P - quota di utilizzo del valore del prezzo.
Di conseguenza, se leggete l'EMA del periodo 30 dall'array di 30 elementi, otterrete una semplice MA invece dell'EMA.
Giusto. Se non si prendono tutti gli elementi di un array e si cerca di ottenere anche EMA senza errori, sarà difficile.
Pertanto, se calcolate l'EMA del periodo 30 da un array di 30 elementi, otterrete una semplice MA invece dell'EMA.
Ho controllatoiMAOnArray() - i risultati sono imprevedibili, a volte 2 * periodo MA può essere usato, a volte è necessario di più. Se totale = 0, potete usarlo una volta per il calcolo, ma se lo usate troppo spesso, il terminale si blocca
Uso raramente iMAOnArray()
if (response == 0) {
Print("Что-то пошло не так");
// потом уже добавите диагностику из WinAPI
return false;
}
e prima del ritorno normale, stampare anche il risultato
Print(" всё хорошо, результат:" toStr);
return toStr;
ed eseguire tutto il codice in un timer, ad esempio una volta al minuto. Fai pratica su una risorsa che è sicura di non essere bannata e dà tempi diversi ma prevedibili, in modo da poter controllare.
----
telepaticamente - se c'è davvero un problema,
o l'inizializzazione è sbagliata (non ricordo se WinSOCK deve essere inizializzato per InternetOpenW o no)
O qualche risorsa non viene liberata.
tutti aggiunti! Nella stampa non compare nulla!!!
Come faccio a far uscire la variabile nella finestra dei dati senza visualizzarla sul grafico?
Non riesco a trovarlo nella documentazione per qualche motivo.
Come faccio a far uscire la variabile nella finestra dei dati senza visualizzarla sul grafico?
Non riesco a trovarlo nella documentazione per qualche motivo.