Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 794

 
Igor Makanu:

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?

 
Alexey Viktorov:

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




Alexey Viktorov:

Questo è un esempio di come farlo in un indicatore. La domanda riguardava l'Expert Advisor.

Sei sicuro che questa fosse la domanda?

Nord-ovest:

Si può vedere nella sottofinestra durante i test,

)))))

iMAOnArray - Технические индикаторы - Справочник MQL4
iMAOnArray - Технические индикаторы - Справочник MQL4
  • docs.mql4.com
В отличие от iMA(...), функция iMAOnArray не выбирает данные на основе названия инструмента, таймфрейма и используемой цены - ценовые данные должны быть подготовлены заранее...
 
Igor Makanu:

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

if(prev_calculated==0) limit=rates_total-1; else limit=rates_total-prev_calculated+1;

può essere scritto come

limit = prev_calculated == 0 ? rates_total-1 : rates_total-prev_calculated+1;
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ù.

 
Alexey Viktorov:
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


Alexey Viktorov:

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

 
Igor Makanu:

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.

 
Alexey Viktorov:

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()

 
Maxim Kuznetsov:

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.

 
psyman:

Come faccio a far uscire la variabile nella finestra dei dati senza visualizzarla sul grafico?

Non riesco a trovarlo nella documentazione per qualche motivo.

Imposta il colore del display su clrNONE.
Motivazione: