Aide au codage - page 408

 
airquest:
Eh bien, quand même... Voici quelques tests :

- Paramètres par défaut (pas d'optimisation, WriteCSV sur True) : Microsoft Excel - BB+CCI-EURUSD-H1-2014.12.18 00h11-SA1.csv

- Optimisation définie sur True, PeriodMin sur 20 et PeriodMax sur 20 : Microsoft Excel - BB+CCI-EURUSD-H1-2014.12.18 00h13-SA1.csv

Le premier donne des valeurs cohérentes (le fichier CSV et les résultats à l'écran correspondent). C'est normal, car les deux proviennent des mêmes variables. Mais dans le second, les résultats opti sont multipliés par 10 par rapport aux résultats à l'écran. Pourtant, ils devraient aboutir aux mêmes résultats...

De toute façon, rien ne presse, peut-être qu'avec le temps je trouverai ce qui ne va pas. Merci pour votre aide Mladen.

Salut Airquest,

Merci pour cette alternative très intéressante au Strategy Tester... un travail de codage très créatif et talentueux de votre part... !

J'ai joué un peu avec votre indicateur...

Et il semble que vous ayez deux variables différentes pour les totaux...

Une pour l'exécution normale = TotalTrades...

Et une pour le run d'optimisation = totalTrades...

Cependant ... vos commentaires ne montrent que votre exécution normale TotalTrades ...

Allez-y et ajoutez vos TotalTrades... optimisés... à vos commentaires et voyez si cela résout le puzzle...

J'espère que cela répondra à votre question sur la raison de la différence entre l'affichage à l'écran... et les totaux de la feuille de calcul...

J'espère que cela vous aidera,

Robert

 
cosmiclifeform:
Salut Airquest,

Merci pour cette alternative très intéressante au Strategy Tester... un travail de codage très créatif et talentueux de votre part... !

J'ai joué un peu avec votre indicateur...

Et il semble que vous ayez deux variables différentes pour les totaux...

Une pour l'exécution normale = TotalTrades...

Et une pour le run d'optimisation = totalTrades...

Cependant ... vos commentaires ne montrent que votre exécution normale TotalTrades ...

Allez-y et ajoutez vos TotalTrades... optimisés... à vos commentaires et voyez si cela résout le puzzle...

J'espère que cela répondra à votre question sur la raison de la différence entre l'affichage à l'écran... et les totaux de la feuille de calcul...

J'espère que cela vous aidera,

Robert

Je ne suis pas sûr que les résultats finaux seront corrects. Le problème est qu'en montrant le total des transactions provenant de la fonction opti, vous pouvez voir si la fonction fonctionne bien ou pas. Je ne sais pas non plus comment retourner plus d'un paramètre de la fonction double (vous devez également retourner le solde et le taux de gain). Mais la raison principale est de voir qu'il y a une différence dans les résultats et donc que quelque chose ne va pas dans la fonction...

 

Bonjour à tous, Je viens d'écrire cet indicateur personnalisé basé sur le RSI.

J'ai l'idée de l'utiliser dans un EA. J'ai besoin d'aide pour l'écrire...

C'est une stratégie d'achat uniquement.

Acheter sur chaque signal de hausse... Fermer tout sur un signal de baisse

Idéalement, l'EA devrait augmenter la taille du lot pour chaque signal de hausse consécutif sans fermeture. (avec un maximum bien sûr)

L'indicateur fonctionne en plaçant une flèche sur le graphique à chaque fois que le RSI passe sous/au-dessus d'un niveau défini.

arrow_rsi.mq4

Dossiers :
arrow_rsi.mq4  3 kb
 
airquest:
Je ne suis pas sûr que les résultats finaux seront corrects. Le problème est qu'en montrant le total des transactions provenant de la fonction opti, vous pouvez voir si la fonction fonctionne bien ou pas. Je ne sais pas non plus comment renvoyer plus d'un paramètre de la fonction double (vous devez également renvoyer le solde et le taux de gain). Mais la raison principale est de voir qu'il y a une différence dans les résultats et donc que quelque chose ne va pas dans la fonction...

airquest

Pour "renvoyer" autant de paramètres que nécessaire à partir d'une fonction, passez un paramètre par référence à une fonction. Quelque chose comme ceci :

double a ;

double b ;

double c = testFunction(a,b) ;

double tectFunction(double& _a,double& _b)

{

_a = 1 ;

_b = 2 ;

retourne(_a+_b) ;

}

après quoi a et b se verront attribuer les valeurs 1 et 2 par la testFunction (qui "renvoie" implicitement 3 valeurs dans cet exemple - j'ai utilisé les noms _a et _b dans la fonction juste pour montrer qu'ils ne doivent pas avoir le même nom lorsqu'ils sont passés par référence, sinon ce n'est pas nécessaire).

 
airquest:
Je ne suis pas sûr que les résultats finaux seront corrects. Le problème est qu'en montrant le total des transactions provenant de la fonction opti, vous pouvez voir si la fonction fonctionne bien ou pas. Je ne sais pas non plus comment retourner plus d'un paramètre de la fonction double (vous devez également retourner le solde et le taux de gain). Mais la raison principale est de voir qu'il y a une différence dans les résultats et donc que quelque chose ne va pas dans la fonction...

Salut Airquest,

D'après ce que je vois...votre indicateur semble fonctionner parfaitement.

Je pense toujours qu'il s'agit d'un problème d'"affichage des valeurs"... et non d'un problème de calcul.

Voici ce que je vois se passer dans l'indicateur...

Le programme a 2 options - 1) Exécution normale 2) Exécution d'optimisation

Ce ne sont PAS des choix exclusifs ou/et...

Lorsque l'optimisation n'est PAS sélectionnée... le programme ne fait que l'exécution normale...

Lorsque l'optimisation est sélectionnée... le programme effectue TOUJOURS l'exécution normale... ET... ensuite l'exécution d'optimisation... donc il obtient les deux valeurs...

Cependant... seules les valeurs de l'exécution normale sont affichées dans l'écran Commentaires... et n'affichent pas du tout les valeurs d'optimisation.

Vous trouverez ci-joint mon test montrant que les valeurs d'optimisation affichées à l'écran sont les mêmes que celles de la feuille de calcul...

Cela me montre que tous vos calculs sont corrects...

Il semble également qu'il utilise le dernier enregistrement de la feuille de calcul pour obtenir les valeurs d'optimisation finales...

Je recommande également de l'exécuter sans charger d'autres graphiques/indicateurs... et de ne tester que quelques valeurs sélectionnées à la fois.

J'ai plus de 20 graphiques en cours d'exécution... et MT4 devient non réactif lorsqu'il effectue ses calculs pour cet indicateur...

Mieux vaut utiliser une configuration MT4 propre pour effectuer les tests d'optimisation...

Mais la bonne nouvelle est que... cela ne bloque pas mon système et que je peux faire autre chose pendant qu'il calcule les chiffres et établit le rapport.

En attendant... pour autant que je puisse le dire dans les captures d'écran ci-dessous... votre indicateur semble fonctionner parfaitement...

BTW ... c'est un morceau étonnant de codage ... Merci beaucoup de l'avoir partagé... !

J'espère que cela vous aidera,

Robert

 
cosmiclifeform:
Bonjour Airquest, D'après ce que je vois... votre indicateur semble fonctionner parfaitement.

Vous êtes le bienvenu, merci beaucoup pour vos mots. L'idée est en effet de remplacer l'optimisation du mt4 strategy tester (que je trouve nulle et trop lente) pour le backtesting de stratégies simples. Et oui, il faut attendre un peu pour qu'elle se charge et fasse le calcul, mais d'après ce que j'ai vu, c'est déjà plus rapide et plus pratique qu'une optimisation classique.

Mais, je pense toujours qu'il y a un problème avec l'indicateur et qu'il ne fonctionne pas correctement. Remplacer le texte à l'écran par les résultats de l'optimisation ne montre pas du tout si ces résultats sont bons ou mauvais. C'est comme peindre une voiture rouillée.

Je pense que la fonction opti donne de mauvais résultats. Vous pouvez voir dans votre capture d'écran que les résultats dans le CSV donnent 5'307 transactions. C'est très loin du compte. Cela dépend du nombre de barres que vous avez sur votre écran, mais il n'est pas possible que la stratégie ait donné 5'307 trades à prendre. Pour être sûr, vous n'avez pas besoin de compter les flèches, vous pouvez réduire le nombre de barres à tester comme je l'ai fait dans cette capture d'écran (je l'ai fixé à 100 barres) :

Vous pouvez voir ici que, pour 100 barres, il n'y a que 10 trades à prendre, avec 4 gagnants (en comptant les flèches), alors que les résultats de l'opti montrent 89 trades pris. Donc, sur la base d'un backtest visuel, les résultats de l'écran sont corrects (pour la meilleure période que l'opti a indiqué), alors que le CSV est faux. Cela montre donc que nous ne devrions pas faire confiance aux résultats du CSV, que ce soit pour compter les transactions ou pour déterminer quels sont les meilleurs paramètres.

J'ai donc posé le problème d'une manière plus simple. J'ai créé un indicateur simple (ci-joint) qui montre à l'écran les résultats provenant de la fonction Optimisation double et de la fonction Start int (calcul principal). Ainsi vous n'avez pas besoin d'écrire un CSV pour voir que les deux résultats sont différents.

Sur la base de cet indicateur, ma question (simple) est la suivante : POURQUOI SUR TERRE DEUX CALCULS EXACTEMENT MEMES (celui de la fonction Start et celui de la fonction double Optimization) DONNENT DES RESULTATS DIFFERENTS ? Si quelqu'un peut m'aider à comprendre cela, ce serait génial, car je ne comprends vraiment pas. D'après ce que je vois, les deux sont exactement les mêmes et devraient donner les mêmes résultats. Merci beaucoup.

PS : l'indicateur est encore un peu lent et vous devrez probablement attendre quelques secondes pour qu'il affiche les résultats. Cependant, il émet un son lorsque les résultats sont affichés.

Dossiers :
sa1.png  78 kb
sa3.png  41 kb
 

Salut Airquest,

J'ai essayé votre "Exemple de test" mais je n'ai pas réussi à le faire fonctionner. J'ai regardé le code et j'ai constaté qu'il y avait plus de 400 lignes supprimées... donc j'ai laissé tomber.

Je suis retourné tester votre code original... et je pense que je commence à comprendre ce que vous dites à propos du problème du "trop de transactions"...

Pour garder les tests simples et rapides... j'ai testé en utilisant uniquement les bandes... et j'ai minimisé les paramètres (bandes 10 et bandes 20) pour n'avoir que deux (2) exécutions afin de voir les résultats plus rapidement.

J'ai également mis l'accent sur "BarsToCount" puisque cela semble avoir un lien direct avec le nombre de transactions...

Bien que je n'aie pas trouvé de réponses... j'ai peut-être d'autres indices pour vous...

"BarsToCount"... ne semble pas fonctionner...

J'ai exécuté votre code avec 1 barre...2 barres...et 100 barres en arrière...

Et tous ont eu exactement les mêmes résultats... ce qui ne devrait pas être le cas... puisque plus de barres devraient correspondre à plus de transactions... et moins de barres devraient correspondre à moins de transactions.

J'ai joint mes captures d'écran des 3 exécutions que j'ai faites... en ne modifiant que le "BarsToCount"...

Peut-être que cet indice vous aidera à trouver les autres problèmes... Bonne chance pour trouver vos réponses.

J'espère que cela vous aidera,

Robert

 

J'ai finalement réussi à faire une version qui fonctionne. Maintenant les résultats de l'opti sont corrects et correspondent aux résultats de l'écran. J'ai juste abandonné la double fonction et tout mis dans la fonction Start. Donc maintenant, vous n'avez qu'un seul choix entre l'exécuter en mode Testeur (donc il utilisera les paramètres par défaut) ou en mode Optimiseur (qui ne tracera rien mais écrira seulement un fichier CSV). Après avoir exécuté une optimisation, vous pouvez revenir au mode Testeur et vérifier si les résultats sont corrects.

S'il vous plaît laissez-moi savoir si vous trouvez un problème, par PM est mieux, comme nous ne voulons pas gâcher ce fil. Les gars, merci beaucoup pour votre aide. Ce forum est génial, les gens se motivent et s'entraident (la plupart du temps) et c'est la raison pour laquelle je publie ici. Maintenant, commençons le backtesting

 
cosmiclifeform:
Salut Airquest,

Robert, merci pour votre aide. Voir la version que j'ai postée ci-dessus, cela devrait maintenant fonctionner.

PS : Pour limiter le nombre de barres, vous devez mettre UseAllBars à False. Vous ne l'avez probablement pas vu.

Salutations.

 

Salut Airquest,

Bon travail pour le retrouver et le faire fonctionner... !

J'ai hâte de jouer avec cette semaine...

Merci et prenez soin de vous,

Robert

Raison: