Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 486

 

Domanda: il tester tiene conto dello swap?

Calcolato in Excel (conto in centesimi) e ottenuto uno strano risultato

P.P. Data Type Lot Price MaxHigh MaxEqDrd
1 2014.06.12 09:52 vendere 0,1 1,6824 0,16824 1,7179 -3,55
2 2014.06.12 15:18 vendere 0,2 1,6831 0,33662 1,7179 -6,96
3 2014.06.12 17:52 vendere 0,3 1,6836 0,50508 1,7179 -10,29
4 2014.06.12 19:10 vendere 0,5 1,6839 0,84195 1,7179 -17,00
5 2014.06.12 23:00 vendere 0,8 1,6845 1,3476 1,7179 -26,72
6 2014.06.16 09:59 vendere 1,3 1,6985 2,20805 1,7179 -25,22
7 2014.06.19 09:58 vendere 2.1 1.7017 3.57357 1.7179 -34.02
8 2014.06.19 11:21 vendere 3.4 1.7018 5.78612 1.7179 -54.74
9 2014.06.19 20:40 vendere 5,5 1,7033 9,36815 1,7179 -80,30
10 2014.06.19 22:12 vendere 8,9 1,7036 15,16204 1,7179 -127,27
11 2014.06.20 05:10 vendere 14.4 1.7047 24.54768 1.7179 -190.08
12 2014.06.20 05:22 vendere 23.3 1.7049 39.72417 1.7179 -302.90
13 2014.06.26 12:38 vendere 37.7 1.7030 64.2031 1.7179 -561.73
14 2014.06.26 15:18 vendere 61,0 1,7033 103,9013 1,7179 -890,60
15 2014.06.27 06:51 vendere 98,7 1,7050 168,2835 1,7179 -1273,23
16 2014.06.30 17:37 vendere 100.0 1.7079 170.79 1.7179 -1000.00
17 2014.06.06.30 17:37 vendere 59,7 1,7079 101,96163 1,7179 -597,00
18 2014.07.01 09:03 vendere 100,0 1,7100 171 1,7179 -790,00
19 2014.07.01 09:03 vendere 100,0 1.7100 171 1.7179 -790,00
20 2014.07.01 09:03 vendere 58,4 1.7100 99.864 1.7179 -461,36
21 2014.07.01 11:30 vendere 100,0 1,7110 171,1 1,7179 -690,00
22 2014.07.01 11:30 vendere 100,0 1,7110 171,1 1,7179 -690,00
23 2014.07.01 11:30 vendere 100,0 1,7110 171,1 1,7179 -690,00
24 2014.07.01 11:30 vendere 100,0 1,7110 171,1 1,7179 -690,00
25 2014.07.01 11:30 vendere 18.1 1 1.7110 30.9691 1.7179 -124.89
26 2014.07.02 02:33 vendere 100.0 1.7145 171.45 1.7179 -340.00
27 2014.07.02 02 02:33 vendere 100.0 1.7145 171.45 1.7179 -340.00
28 2014.07.02 02:33 vendere 100,0 1,7145 171,45 1,7179 -340,00
29 2014.07.02 02:33 vendere 100,0 1,7145 171,45 1,7179 -340,00
30 2014.07.02.02:33 vendere 100.0 1.7145 171.45 1.7179 -340.00
31 2014.07.02 02:33 vendere 100,0 1,7145 171,45 1,7179 -340,00
32 2014.07.02 02:33 vendere 76,5 1,7145 131,15925 1,7179 -260,10
33 2014.07.02.02 11:32 vendere 100,0 1,7176 171,76 1,7179 -30,00
34 2014.07.02 11:32 vendere 100,0 1,7176 171,76 1,7179 -30,00
35 2014.07.02 11:32 vendere 100.0 1.7176 171.76 1.7179 -30.00
36 2014.07.02 11:32 vendere 100,0 1,7176 171,76 1,7179 -30,00
37 2014.07.02 11:32 vendere 100,0 1,7176 171,76 1,7179 -30,00
38 2014.07.02 11:32 vendere 100,0 1,7176 171,76 1,7179 -30,00
39 2014.07.02 11:32 vendere 100,0 1,7176 171,76 1,7179 -30,00
40 2014.07.0202 11:32 vendere 100,0 1,7176 171,76 1,7179 -30,00
41 2014.07.02 11:32 vendere 100,0 1,7176 171,76 1,7179 -30,00
42 2014.07.0202 11:32 vendere 100.0 1.7176 171.76 1.7179 -30.00
43 2014.07.02 11:32 vendere 94.6 1.7176 162.48496 1.7179 -28.38
Totale:2865.5 4909.88611 -12756.34
Prezzo medio di apertura -> 1.7134

High 04.07.2014 1.7179

Drawdown in pip -> 0.0045
Drawdown in valuta ->12756,34

Dispersione secondo il codice -> 13823,00
Dispersione secondo il rapporto del tester ->23669,03

TP - > 1.7084
Profitto in pip -> 0.0050
Utile secondo il calcolo - > 14465.91

Utile secondo il rapporto - > 13915.05


Come fa il drawdown a non quadrare - specialmente nel rapporto del tester? Prima non c'erano posizioni chiuse!

 

Ecco come appare la situazione sul grafico



 
Ho allegato il calcolo in excel - forse sono stato stupido?
File:
Calculation.zip  104 kb
 

-Aleks-:

La variabile globale è rilevante quando si lavora davvero sul mercato - ho bisogno di informazioni di test - ecco perché non mi sono preoccupato di questo.

Non stavo parlando di GlobalVariable, ma del livello delle variabili globali.

-Aleks-:

Cos'è l'equità e il saldo - naturalmente lo so, ma non so ancora come viene calcolato il drawdown. I miei esempi di codice mostrano che ho cercato di prendere sia il saldo che i fondi come massimi e allo stesso modo ho preso il saldo e i fondi come minimi.

Non ho imparato la formula per calcolare il drawdown nel tester, ma puoi provare a calcolare la differenza tra il tuo saldo prima dell'apertura dell'ordine e il capitale minimo prima della chiusura dell'ordine. Oppure, calcolate i fondi minimi e massimi e la differenza massima sarà il massimo prelievo.

-Aleks-:

Perché pensate che la disuguaglianzase (BalansNew<BalansMax) ProfitNew=BalansNew-BalansMax; non vale mai? Solo non è soddisfatta sulla barra quando il nuovo equilibrio massimo è raggiunto (o l'equità - ancora non è vero), ma a quel punto fisso il drawdown del profittoProfitMin=ProfittoNuovo.

Questo è più rilevante in quanto il drawdown massimo di solito non viene raggiunto al momento della chiusura dell'ordine, e l'obiettivo è quello di calcolare la quantità media di denaro necessaria per il lavoro dell'EA.

Sono d'accordo, non sono stato abbastanza attento.

Ma il prelievo non è per giorno ma per la durata dell'ordine (o degli ordini) e dopo di che il capitale diventa un saldo. Questo è esattamente il punto del grafico del tester in cui le linee di equità e di equilibrio sono in un punto.

 
Alexey Viktorov:

Non stavo parlando di GlobalVariable, ma di livello di variabile globale.

A quanto pare ti ho frainteso - le mie variabili sono inizializzate prima del blocco di esecuzione del codice int start(), quindi non dovrebbero esserci problemi di mashing o qualcosa del genere... O c'è un'altra ragione?


Alexey Viktorov:

Non sono entrato nella formula di calcolo del drawdown nel tester, ma possiamo provare a calcolare la differenza tra il saldo prima dell'apertura dell'ordine e il capitale minimo prima della chiusura dell'ordine. Oppure, puoi provare a contare la differenza tra i fondi massimi e minimi e la differenza massima sarà il drawdown massimo.

E se ci sono molti ordini, dobbiamo contare per ogni ordine e scegliere il più grande? Nel mio esempio, possiamo vedere che il drawdown calcolato era due volte inferiore rispetto al risultato del tester e secondo il tuo algoritmo sarà ancora meno.

Alexey Viktorov:

La frequenza di scrittura sul file è una questione puramente personale, ma il prelievo non viene conteggiato per il giorno, ma per la durata dell'ordine o degli ordini, e poi i fondi diventano un saldo. Si tratta esattamente di quei posti sul grafico del tester dove le linee di equità e di equilibrio sono in un punto.

Non importa quando il tester prende in considerazione il drawdown - il fatto è che sarà massimo in un certo giorno e il risultato dovrebbe coincidere, e non lo fa - e questo è sorprendente.

Ho bisogno del drawdown giornaliero per testare il portafoglio di trading - per capire quanti fondi possono essere necessari in una sola volta e quanto spesso.

 

Matematicamente (il drawdown è risultato essere 23497,1 contro il 23669,03 del tester), il drawdown è vicino alla dimensione del segmento che simboleggia la variazione del deposito - cioè la differenza tra il valore massimo del capitale e il valore minimo del capitale.

 
-Aleks-:

Devo averti frainteso - le mie variabili sono inizializzate prima del blocco di esecuzione del codice int start(), quindi non dovrebbero esserci problemi di mashing o altro... O c'è un'altra ragione?


E, se ci sono molti ordini, dobbiamo calcolare per ogni ordine e selezionare il più grande? Nel mio esempio puoi vedere che il drawdown calcolato è quasi la metà di quello del tester e secondo il tuo algoritmo sarà ancora meno.

Non importa quando il tester prende in considerazione il drawdown - il fatto è che sarà massimo in un certo giorno e il risultato dovrebbe corrispondere, e non lo fa - e questo è sorprendente.

Ho bisogno del drawdown giornaliero per testare il portafoglio di trading - per capire quanti fondi potrebbero essere necessari in una sola volta e quanto spesso.

Non esattamente. Non per ogni ordine, ma dall'apertura del primo ordine alla chiusura dell'ultimo. Cioè, da OrdersTotal() == 0 a OrdersTotal() == 0.

Questo è il punto dall'apertura del primo ordine alla chiusura dell'ultimo; dobbiamo determinare il drawdown poiché il lancio reale avrà luogo in qualsiasi momento, e di conseguenza, il drawdown può avvenire durante i periodi di 24 ore.

Tutto il resto... Non mi piace guardare nelle ricerche degli altri, così come nel codice lungo, posso discutere dei modi di risolvere alcuni problemi, ma non degli esempi di codice. Ma è strano che nessuno abbia corretto le mie ipotesi su come viene calcolato il drawdown...

Comunque, non mi piace il tuo metodo di calcolo del drawdown. Mi sembra che si stampi così spesso che ci vuole molta pazienza per capirlo.

 

Karputov Vladimir:
Не кусок, а программу, которую можно скомпилировать и прогнать в режиме отладки.

Scusa se ti disturbo, mentre pulivo il programma per trovare il problema dell'arresto del tester, ho trovato nel testo del programma una violazione del suo algoritmo. La compilazione stava andando bene, ma il tester si è fermato senza indicare il punto di errore
 
Alexey Viktorov:

Non esattamente. Non per ogni ordine, ma dall'apertura del primo ordine alla chiusura dell'ultimo. Cioè, da OrdersTotal() == 0 a OrdersTotal() == 0.

Questo è il punto dal momento dell'apertura del primo ordine alla chiusura dell'ultimo; dobbiamo determinare il drawdown poiché il lancio reale avrà luogo in qualsiasi momento, non alle 0:00, quindi il drawdown può avvenire durante un periodo di 24 ore.

Quindi, in questo esempio queste condizioni sono esattamente osservate - gli ordini sono aperti e tracciati per chiudere ad ogni tick.

Se effettivamente il calcolo va dal massimo di equity al minimo di equity, allora questo showdown mi aiuterà a ripensare le letture del tester...

Alexey Viktorov:

Comunque, non mi è piaciuto il tuo metodo di calcolo del drawdown. Mi sembra che si stampi così spesso che ci vuole molta pazienza per capirlo.

Quello che mi interessa è quanto denaro serve effettivamente all'EA - cioè il drawdown reale (perdita attuale) dall'apertura dell'ordine fino alla sua chiusura meno qualsiasi profitto perso.

Stampa una volta al giorno - non è affatto frequente, ed è necessario per certi scopi.

 
Ciao!

A prima vista, il compito sembra semplice come tre centesimi. MA! ....
C'è una linea di qualsiasi oscillatore nella finestra dell'indicatore, che oscilla rispetto a "0" con diversa ampiezza.
Il problema reale è:
- All'incrocio "0" dal basso verso l'alto, disegnate una freccia sul bordo inferiore della finestra dell'indicatore,
- A "0" attraversando dall'alto verso il basso, per disegnare una freccia vicino al bordo superiore della finestra dell'indicatore,
- all'autoscala del grafico dell'oscillatore nella finestra dell'indicatore, le frecce dovrebbero rimanere automaticamente ai loro bordi della finestra dell'indicatore.
Cioè, scorrendo il grafico avanti e indietro nella storia, o cambiando la sua scala orizzontale, le frecce dovrebbero sempre rimanere automaticamente ai confini della finestra dell'indicatore.

Per favore non date consigli, "aiutatemi con i soldi")). Ho bisogno di un esempio di codice funzionante, che implementi questa funzione, o un link ad uno.

Grazie in anticipo!
Motivazione: