Domande dai principianti MQL4 MT4 MetaTrader 4 - pagina 102

 
STARIJ:

Il prezzo sul grafico è sull'asse verticale dal basso verso l'alto, mentre il tempo e la numerazione delle barre sono sull'asse orizzontale a destra

La barra zero è l'ultima barra attualmente disponibile. Le seguenti barre esistono nella storia, ma non sono disponibili per il tester. Più tardi, quando questa barra sarà contata, il tester passerà alla barra successiva, che diventerà zero per lui.


Quindi, ho capito bene, non appena il prezzo di apertura della prossima barra appare nel tester, diventa null[0]. E se l'indicatore è fatto in modo da essere calcolato 500 barre prima della barra [0] corrente, significa che il tester calcolerà l'indicatore per ~ 2 anni (500 barre D1) prima della barra [0] corrente...

Questo solleva la seguente domanda:

Ora l'indicatore è basato sull'elaborazione dell'evento Start() - versione antica. Come si sente, durante i test in ogni chiamata di iCustom(), l'indicatore viene calcolato sulle 500 barre precedenti, 1600 corse del tester sono state calcolate per un'ora e mezza.
Possiamo costruire l'indicatore sull'elaborazione dell'evento OnCalculate(), che permette di calcolare solo le barre non calcolate prima del prossimo OnCalculate() - ma è possibile farlo su un flusso di dati reali in un tempo corrente - come ho capito da MQL4 Reference.
Nel tester, ridurrà il numero di barre calcolate ad ogni chiamata di iCustom() ?

 
MikeZv:

Quindi ho capito bene, non appena Open next bar price è apparso nel tester - diventa null[0]. E se l'indicatore è fatto in modo tale che inizia ad essere calcolato 500 prima della barra [0] corrente, significa che il tester calcolerà l'indicatore per ~ 2 anni (500 barre D1) prima della barra [0] corrente...

Questo solleva la seguente domanda:

Ora l'indicatore è basato sull'elaborazione dell'evento Start() - versione antica. Come si sente, durante i test in ogni chiamata di iCustom(), l'indicatore viene calcolato sulle 500 barre precedenti, 1600 corse del tester sono state calcolate per un'ora e mezza.
Possiamo costruire l'indicatore sull'elaborazione dell'evento OnCalculate(), che permette di calcolare solo le barre non calcolate prima del prossimo OnCalculate() - ma è possibile farlo su un flusso di dati reale in un tempo corrente - come ho capito dal Riferimento MQL4.
Nel tester, ridurrà il numero di barre calcolate ad ogni chiamata di iCustom() ?


L'indicatore è solo scritto storto, quindi è lento, ho bisogno di una riscrittura professionale, poi leggerà tutta la storia e molto velocemente... questo è tutto...

 
Nikolay Ivanov:


L'indicatore è solo scritto in modo storto, quindi è lento, c'è bisogno di una riscrittura professionale, poi si leggerà tutta la storia e molto velocemente... questo è tutto...


Già riscritto ... :)

 

Scritto nuovo indicatore [onCalculate()] basato su quello vecchio [on Start()], sopra è stata sollevata la questione.
Eseguo uno script che li confronta tra loro per 5 anni (periodo D1) - uno a uno, tutti i valori coincidono.
Ho copiato lo stesso ICustom() in Expert Advisor e l'ho emesso in un file durante iltest di Expert Advisor.
I vecchi valori dell'indicatore sono visualizzati come nello script, i nuovi valori dell'indicatore sono tutti diversi!!!
Perché iCustom() in un Expert Advisor per un indicatore su Start() produce gli stessi valori dello script,
ma per un indicatore su OnCalculate() l'output nell'Expert Advisor è diverso da quello dello script?


 

Ciao a tutti.

Ragazzi, potete consigliarmi chi si è imbattuto in questo?

Alcuni broker binari, ad esempio Grand Capital, accumulano reddito e addebitano il conto non attraverso il profitto di un'operazione, ma come reddito da/per il saldo del conto.


Ho diverse opzioni di lavoro alternative su come scoprire il risultato di uno scambio, ma ancora la più corretta è quella di leggere il valore della linea di bilancio e l'ammontare dei guadagni/perdite.

Quindi la domanda è - come si può fare questo "nel momento" ma su tutta la storia della transazione? Cioè, sono interessato a qualche funzione (inclusa in MQL4) che guarderebbe attraverso tutti i record del tipo di equilibrio e leggerebbe il commento e il valore stesso. È la prima volta che affronto un compito del genere in diversi anni di programmazione.

 
MikeZv:

Ho scritto un nuovo indicatore [su OnCalculate()] basato su quello vecchio [su Start()], questo problema è stato sollevato sopra.
Eseguo lo script confrontandoli tra loro per 5 anni (periodo D1) - uno a uno, tutti i valori coincidono.
Ho copiato lo stesso ICustom() in Expert Advisor e l'ho visualizzato in un file durante iltest di Expert Advisor.
I vecchi valori dell'indicatore sono visualizzati come nello script, i nuovi valori dell'indicatore sono tutti diversi!!!
Perché iCustom() in un Expert Advisor per l'indicatore su Start() emette gli stessi valori dello script?
e per l'indicatore su OnCalculate() l'output nell'Expert Advisor è diverso dall'output nello script?


Ci può volere molto tempo per indovinare.

Controllerei il codice per una conversione errata del tipo di dati, raddoppio dei nomi delle variabili (cioè nel vecchio codice si usano i nomi che ora sono riservati) - come risultato la variabile non sta ottenendo i valori che dovrebbe ottenere (prima di tutto, controlla i nomi delle variabili usati in OnCalculate - open, high, low, close, ecc. - Si possono incontrare abbastanza spesso nel vecchio codice).
E per quanto riguarda iCustom, è la variante più semplice, e gli errori qui molto probabilmente possono essere legati a parametri passati in modo errato (di nuovo, per le ragioni date sopra).

Stampa tutti i valori, o esegui in modalità debug e controlla dove c'è una discrepanza.
 
Artyom Kuraev:

Ci può volere molto tempo per indovinare.

Controllerei il codice per una conversione errata del tipo di dati, nomi di variabili duplicati (cioè il vecchio codice usa nomi che ora sono riservati) - come risultato la variabile sta raccogliendo valori sbagliati che dovrebbe ottenere (prima di tutto controlla i nomi delle variabili usate in OnCalculate - open, high, low, close, ecc. - Si possono incontrare abbastanza spesso nel vecchio codice).
E per quanto riguarda iCustom, è la variante più semplice, e gli errori qui molto probabilmente possono essere legati a parametri passati in modo errato (di nuovo, per le ragioni menzionate sopra).

Stampa tutti i valori, o esegui in modalità debug e controlla dove va la discrepanza.
L'output di entrambi gli indicatori nello script è lo stesso.

Expert ha linee COOPERATE con iCustom() dallo script. Vengono passati gli stessi parametri.

 
MikeZv:

L'Esperto copia le linee con iCustom() dallo script. Vengono passati gli stessi parametri.

Il fatto che siano copiati può causare errori. Ho solo suggerito le possibili cause e ciò che controllerei prima.

Il secondo punto, e questa è probabilmente la risposta più ovvia, è che l'indicatore stesso è sopravvalutato e darà un valore quando viene applicato alla storia e un altro quando lavora in modalità strategy tester. Ne ho scritto una volta, lo si può vedere in due foto.

Non insisto assolutamente su nulla, e la mia risposta sarà basata sulla mia esperienza. Se sei sicuro che nessuna delle opzioni che ho suggerito è adatta, aspetta altre risposte o dai molte più informazioni di base :)

 
Artyom Kuraev:

Ciao a tutti.

Ragazzi, potete consigliarmi chi si è imbattuto in questo?

Alcuni broker binari, ad esempio Grand Capital, addebitano il reddito e addebitano il conto non attraverso il profitto di un'operazione, ma come reddito da/per il saldo del conto.


Ho diverse opzioni di lavoro alternative su come scoprire il risultato di uno scambio, ma ancora la più corretta è quella di leggere il valore della linea di bilancio e l'importo dei guadagni/perdite.

Quindi la domanda è - come si può fare questo "nel momento" ma su tutta la storia della transazione? Cioè, sono interessato a qualche funzione (inclusa in MQL4) che guarderebbe attraverso tutti i record del tipo di equilibrio e leggerebbe il commento e il valore stesso. È la prima volta che affronto un compito del genere in diversi anni di programmazione.


#define  OP_BALANCE 6
#define  OP_CREDIT  7

Più

OrdersHistoryTotal
StringFind(OrderComment(),txt,0)
 
Taras Slobodyanik:

più

GRAZIE!

Ha funzionato tutto!
Motivazione: