Questions des débutants MQL5 MT5 MetaTrader 5 - page 486

 

Question - le testeur prend-il en compte le swap ?

Calculé dans Excel (compte cent) et obtenu un résultat étrange

P.P. Data Type Lot Price MaxHigh MaxEqDrd
1 2014.06.12 09:52 vendre 0.1 1.6824 0.16824 1.7179 -3.55
2 2014.06.12 15:18 vendre 0.2 1.6831 0.33662 1.7179 -6.96
3 2014.06.12 17:52 vendre 0.3 1.6836 0.50508 1.7179 -10.29
4 2014.06.12 19:10 vendre 0.5 1.6839 0.84195 1.7179 -17.00
5 2014.06.12 23:00 vendre 0.8 1.6845 1.3476 1.7179 -26.72
6 2014.06.16 09:59 vendre 1.3 1.6985 2.20805 1.7179 -25.22
7 2014.06.19 09:58 vendre 2.1 1.7017 3.57357 1.7179 -34.02
8 2014.06.19 11:21 vendre 3.4 1.7018 5.78612 1.7179 -54.74
9 2014.06.19 20:40 vendre 5.5 1.7033 9.36815 1.7179 -80.30
10 2014.06.19 22:12 vendre 8.9 1.7036 15.16204 1.7179 -127.27
11 2014.06.20 05:10 vendre 14.4 1.7047 24.54768 1.7179 -190.08
12 2014.06.20 05:22 vendre 23.3 1.7049 39.72417 1.7179 -302.90
13 2014.06.26 12:38 vendre 37.7 1.7030 64.2031 1.7179 -561.73
14 2014.06.26 15:18 vendre 61.0 1.7033 103.9013 1.7179 -890.60
15 2014.06.27 06:51 vendre 98.7 1.7050 168.2835 1.7179 -1273.23
16 2014.06.30 17:37 vendre 100.0 1.7079 170.79 1.7179 -1000.00
17 2014.06.06.30 17:37 vendre 59.7 1.7079 101.96163 1.7179 -597.00
18 2014.07.01 09:03 vendre 100.0 1.7100 171 1.7179 -790.00
19 2014.07.01 09:03 vendre 100.0 1,7100 171 1,7179 -790.00
20 2014.07.01 09:03 vendre 58.4 1,7100 99,864 1,7179 -461.36
21 2014.07.01 11:30 vendre 100,0 1,7110 171,1 1,7179 -690.00
22 2014.07.01 11:30 vendre 100,0 1,7110 171,1 1,7179 -690.00
23 2014.07.01 11:30 vendre 100,0 1,7110 171,1 1,7179 -690,00
24 2014.07.01 11:30 vendre 100,0 1,7110 171,1 1,7179 -690,00
25 2014.07.01 11:30 vendre 18.1 1.7110 30.9691 1.7179 -124.89
26 2014.07.02 02:33 vendre 100.0 1.7145 171.45 1.7179 -340.00
27 2014.07.02 02 02:33 vendre 100.0 1.7145 171.45 1.7179 -340.00
28 2014.07.02 02:33 vendre 100.0 1.7145 171.45 1.7179 -340.00
29 2014.07.02 02:33 vendre 100.0 1.7145 171.45 1.7179 -340.00
30 2014.07.02.02:33 vendre 100.0 1.7145 171.45 1.7179 -340.00
31 2014.07.02 02:33 vendre 100.0 1.7145 171.45 1.7179 -340.00
32 2014.07.02 02:33 vendre 76.5 1.7145 131.15925 1.7179 -260.10
33 2014.07.02.02 11:32 vendre 100.0 1.7176 171.76 1.7179 -30.00
34 2014.07.02 11:32 vendre 100.0 1.7176 171.76 1.7179 -30.00
35 2014.07.02 11:32 vendre 100.0 1,7176 171.76 1,7179 -30.00
36 2014.07.02 11:32 vendre 100.0 1,7176 171.76 1,7179 -30.00
37 2014.07.02 11:32 vendre 100.0 1,7176 171.76 1,7179 -30.00
38 2014.07.02 11:32 vendre 100.0 1,7176 171.76 1,7179 -30.00
39 2014.07.02 11:32 vendre 100.0 1,7176 171.76 1,7179 -30.00
40 2014.07.0202 11:32 vendre 100.0 1,7176 171.76 1,7179 -30.00
41 2014.07.02 11:32 vendre 100.0 1,7176 171.76 1,7179 -30.00
42 2014.07.0202 11:32 vendre 100.0 1,7176 171.76 1,7179 -30.00
43 2014.07.02 11:32 vendre 94.6 1.7176 162.48496 1.7179 -28.38
Total :2865.5 4909.88611 -12756.34
Prix d'ouverture moyen -> 1.7134

Haut 04.07.2014 1.7179

Drawdown en pips -> 0.0045
Drawdown en devise ->12756,34

Prélèvement selon le code -> 13823,00
Prélèvement selon le rapport du testeur ->23669,03

TP - > 1.7084
Profit en pips -> 0.0050
Bénéfice selon le calcul - > 14465.91

Bénéfice selon le rapport - > 13915.05


Comment se fait-il que le drawdown ne corresponde pas - en particulier au rapport du testeur ? Il n'y avait pas de positions fermées auparavant !

 

Voici à quoi ressemble la situation sur le graphique



 
J'ai joint le calcul en excel - peut-être que j'ai été stupide là !?
Dossiers :
Calculation.zip  104 kb
 

-Aleks-:

La variable globale est pertinente lorsqu'on travaille vraiment sur le marché - j'ai besoin d'informations sur les tests - c'est pourquoi je ne m'en suis pas occupé.

Je ne parlais pas de GlobalVariable, je parlais du niveau des variables globales.

-Aleks:

Qu'est-ce que l'équité et le solde - bien sûr que je le sais, mais je ne sais toujours pas comment le drawdown est calculé. Mes exemples de code montrent que j'ai essayé de prendre le solde et les fonds comme maximaux et de la même manière j'ai pris le solde et les fonds comme minimaux.

Je n'ai pas maîtrisé la formule de calcul du drawdown dans le testeur, mais vous pouvez essayer de calculer la différence entre votre solde avant l'ouverture de l'ordre et l'équité minimale avant la fermeture de l'ordre. Ou bien, calculez les fonds minimum et maximum et la différence maximale sera le drawdown maximum.

-Aleks:

Pourquoi pensez-vous que l'inégalitéif (BalansNew<BalansMax) ProfitNew=BalansNew-BalansMax ; ne tient jamais ? Il n'est pas rempli sur la barre que lorsque le maximum du nouveau solde est atteint (ou l'équité - toujours pas vrai), mais à ce moment-là je fixe le drawdown de profitProfitMin=ProfitNew.

Ceci est plus pertinent car le drawdown maximal n'est généralement pas atteint au moment de la clôture de l'ordre, et le but est de calculer le montant moyen d'argent nécessaire au travail de l'EA.

Je suis d'accord, je n'ai pas été assez attentif.

Mais le prélèvement ne se fait pas par jour mais par durée de vie du ou des ordres et après cela, l'équité devient un solde. C'est exactement l'endroit sur le graphique du testeur où les lignes d'équité et d'équilibre sont en un seul point.

 
Alexey Viktorov:

Je ne parlais pas de GlobalVariable, je parlais du niveau de la variable globale.

Apparemment je vous ai mal compris - mes variables sont initialisées avant le bloc d'exécution du code int start(), donc il ne devrait pas y avoir de problèmes de mashing ou quelque chose comme ça... Ou il y a une autre raison ?


Alexey Viktorov:

Je ne suis pas entré dans la formule de calcul du drawdown dans le testeur, mais nous pouvons essayer de calculer la différence entre le solde avant l'ouverture de l'ordre et l'équité minimale avant la fermeture de l'ordre. Ou bien, vous pouvez essayer de compter la différence entre les fonds maximum et minimum et la différence maximum sera le drawdown maximum.

Et s'il y a plusieurs commandes, doit-on compter pour chaque commande et choisir la plus importante ? Dans mon exemple, nous pouvons voir que le drawdown calculé était deux fois moins important par rapport au résultat du testeur et selon votre algorithme, il sera encore moins important.

Alexey Viktorov:

La fréquence d'écriture dans le fichier est une question purement personnelle, mais le prélèvement n'est pas comptabilisé pour le jour, mais pour la durée de vie du ou des ordres, et les fonds deviennent alors un solde. Il s'agit précisément des endroits du graphique du testeur où les lignes d'équité et d'équilibre se trouvent en un seul point.

Peu importe le moment où le testeur prend en compte le drawdown - le fait est qu'il sera maximal un certain jour et le résultat devrait coïncider, et ce n'est pas le cas - et c'est surprenant.

J'ai besoin du drawdown par jour pour tester le portefeuille de trading - pour comprendre combien de fonds peuvent être nécessaires à un moment donné et à quelle fréquence.

 

Mathématiquement (le drawdown s'est avéré être de 23497.1 contre 23669.03 pour le testeur), le drawdown est proche de la taille du segment qui symbolise la variation du dépôt - c'est-à-dire la différence entre la valeur maximale et la valeur minimale de l'Equity.

 
-Aleks-:

J'ai dû mal vous comprendre - mes variables sont initialisées avant le bloc d'exécution du code int start(), donc il ne devrait pas y avoir de problèmes de mashing ou autre... Ou il y a une autre raison ?


Et, s'il y a beaucoup de commandes, doit-on calculer pour chaque commande et sélectionner la plus importante ? Dans mon exemple, vous pouvez voir que le drawdown calculé est presque la moitié de celui du testeur et selon votre algorithme, il sera encore plus faible.

Peu importe le moment où le testeur prend en compte le drawdown - le fait est qu'il sera maximal un certain jour et que le résultat devrait coïncider, et ce n'est pas le cas - et c'est surprenant.

J'ai besoin du drawdown par jour pour tester le portefeuille de trading - pour comprendre combien de fonds peuvent être nécessaires à un moment donné et à quelle fréquence.

Pas exactement. Pas pour chaque commande, mais de l'ouverture de la première commande à la fermeture de la dernière. C'est-à-dire, de OrdersTotal() == 0 à OrdersTotal() == 0.

C'est le point qui va de l'ouverture du premier ordre à la fermeture du dernier ; nous devons déterminer le drawdown puisque le lancement réel aura lieu à tout moment, et par conséquent, le drawdown peut se produire pendant des périodes de 24 heures.

Tout le reste... Je n'aime pas me pencher sur les recherches des autres, de même que dans les longs codes, je peux discuter des moyens de résoudre certains problèmes, mais pas des exemples de code. Mais il est étrange que personne n'ait corrigé mes hypothèses sur la façon dont le drawdown est calculé...

Quoi qu'il en soit, je n'aime pas votre méthode de calcul du drawdown. Il me semble qu'il s'imprime si souvent qu'il faut beaucoup de patience pour le découvrir.

 

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

Désolé de vous déranger, en nettoyant le programme pour trouver le problème de l'arrêt du testeur, dans le texte du programme j'ai trouvé une violation de son algorithme. La compilation se déroulait bien, mais le testeur s'est arrêté sans indiquer le point de défaillance.
 
Alexey Viktorov:

Pas exactement. Pas pour chaque commande, mais de l'ouverture de la première commande à la fermeture de la dernière. C'est-à-dire, de OrdersTotal() == 0 à OrdersTotal() == 0.

C'est le point entre le moment de l'ouverture du premier ordre et la fermeture du dernier ; nous devons déterminer le drawdown puisque le lancement réel aura lieu à tout moment, pas à 0:00, donc le drawdown peut se produire pendant une période de 24 heures.

Ainsi, dans cet exemple, ces conditions sont exactement respectées - les ordres sont ouverts et suivis pour être fermés à chaque tick.

Si effectivement le calcul va du maximum d'équité au minimum d'équité, alors cette épreuve de force m'aidera à repenser les lectures du testeur...

Alexey Viktorov:

Quoi qu'il en soit, je n'ai pas aimé votre méthode de calcul du drawdown. Il me semble qu'il s'imprime si souvent qu'il faut beaucoup de patience pour le découvrir.

Ce qui m'intéresse, c'est de savoir combien d'argent l'EA a réellement besoin - c'est-à-dire le drawdown réel (perte actuelle) de l'ouverture de l'ordre jusqu'à sa fermeture, moins le profit perdu.

Il s'imprime une fois par jour - ce n'est pas souvent du tout, et il en a besoin pour certains usages.

 
Bonjour !

À première vue, la tâche semble aussi simple que trois sous. MAIS ! ....
Il y a une ligne de n'importe quel oscillateur dans la fenêtre de l'indicateur, qui oscille par rapport à "0" avec une amplitude différente.
Le problème réel est le suivant :
- En croisant le "0" de bas en haut, dessinez une flèche sur le bord inférieur de la fenêtre de l'indicateur,
- En croisant "0" du haut vers le bas, pour dessiner une flèche près du bord supérieur de la fenêtre de l'indicateur,
- lors de la mise à l'échelle automatique du graphique de l'oscillateur dans la fenêtre de l'indicateur, les flèches devraient automatiquement rester à leurs limites dans la fenêtre de l'indicateur.
Par exemple, si vous faites défiler le graphique vers l'avant ou l'arrière dans l'historique, ou si vous modifiez son échelle horizontale, les flèches doivent toujours rester automatiquement aux limites de la fenêtre de l'indicateur.

S'il vous plaît, ne donnez pas de conseils, "aidez-moi avec de l'argent")). J'ai besoin d'un exemple de code fonctionnel, qui met en œuvre cette fonction, ou d'un lien vers un tel code.

Merci d'avance !