Le code qui pourrait amélioré votre Stratégie
Forums › ProRealTime forum Français › Support ProOrder › Le code qui pourrait amélioré votre Stratégie
- This topic has 32 replies, 4 voices, and was last updated 6 years ago by Nicolas.
-
-
03/29/2018 at 8:44 AM #66657
Bonjour,
j’ai développé un Robot qui intègre lui même 3 sous robots (disons conditions pour faire moins pompeux ). Donc, ce code génère des positions de 3 manières différentes et indépendante. (Ichi, RSI et Stoch ). Actuellement le choix des conditions à utilisé ce fait en fonction de la volatilité à l’instant T. Çà fonction plutôt bien.
J’aimerai optimiser ce système avec la création d’un code qui permette de tester mes 3 conditions dans le passé.
Sur la base d’une moyenne de positions gagnées fictives (+ réel si existantes ) détermine quelle conditions utilisé pour la position à venir et mettre les autres conditions sur off. Il faudrait que cet sorte de test soit permanent et glissant dans le temps.
Par exemple:
Si simulation dans le passé donne le résulta suivant: condition1 = gain 3, perte 0 / condition2 = gain 1, perte 2 / condition3= gain 2,perte=1
Dans ce cas, les conditions à retenir pour la prochaine prise de position sera le N°1 le reste sur off.
Le teste étant glissant le résultat changera au fur et à mesure du temps.
Mais si que tout les robots testés on des résultats inférieur à 75 % de taux de réussite ils passeraient tous en off en attendant un retour de conditions favorable.
Voilà l’idée.
Que l’on utilise une ou trois conditions d’achats, je pense que cela pourrait apporter une nette amélioration de toutes les stratégies , mais comment coder cela ???
Je compte sur les plus créatif et qualifiés d’entre nous. j’espère qu’on arrivera à avancer tous ensemble.
En attendant vous pouvez commencer à poster vos idées et ébauche de code.
Je compte bien entendu sur ta collaboration @Nicolas 🙂
Merci.
03/29/2018 at 9:07 AM #66658“en fonction de la volatilité”, cela suppose qu’il faudrait tester ces 3 types de trade fictifs confronter à plusieurs critères déterminant cette volatilité (je n’ai pas d’idée de comment tu la testes), de les comparer, de les classer, puis d’indiquer un résultat. Désolé, mais cela implique la création de tableaux de données dynamiques et multi dimensionnelles, puisqu’on ne peut pas connaître à l’avance la quantité de variables nécessaires et puisqu’il faudrait également faire des boucles entre des variables dynamiques, bref.. on ne peut pas le coder sous la forme actuelle du langage de programmation.
Je sais que PRT travaille à l’idée d’incorporer des tableaux de données (arrays), mais ça n’est pas pour tout de suite.
Une idée simple, c’est de séparer ces 3 stratégies en stratégie individuelle, de tester les résultats en “fonction de la volatilité” avec l’optimiseur de variables, de constater le bon compromis, puis d’introduire ces paramétries dans le robot global en configurant un switch en fonction de celles-ci pour activer ou non telle ou telle stratégie. J’espère avoir été clair.
03/29/2018 at 9:30 AM #66661L’optimisation des progs par rapport a un niveau de volatilité c’est exactement ce que je fais actuellement et ça fonctionne correctement. j’ai simplement déterminé quel prog à utilisé en fonction d’un fourchette volatilité (ex: if vola>=10 AND vola<20 then Prog 1 =1 )
Ce que je voudrait, c’est oublier la volatilité pour sélectionner les bonnes conditions.
j’aimerai trouver une autre manière de sélectionner mes sous programes.
j’aimerai faire cela en fonction des résultats passé (fictif ou existant).
Remarque je suis ouvert à d’autres solution mais mon idée me parait prometteuse même si elle demande certainement pas mal de codage
03/29/2018 at 9:40 AM #66662Voilà ce que j'utilise actuellement multiplié par 3 progs avec des niveau de volatilité différent123456789Vola = ((AverageTrueRange[14](close))once vola=0 and MM=0 and SL=0 and C1=0 and RS=0if vola>=60 AND vola<=90 thenMM=21SL=45RS=6C1=RSI[RS](close) crosses over 26 and Stochastic[175,21](close)> 30//***C1endif03/29/2018 at 12:47 PM #66688Pour faire plus simple:
On vas oublié la volatilité car ça complique vraiment la tache. On vas resté uniquement sur des positions réel du passé.
Je pense qu’il est possible de créer une boucles dans lequel tourne un de mes programmes. Si pendant la duré de la boucle, le nombre de positions gagnantes représente 75 % de réussite alors la condition est valide. Donc si valide 1=on else 0= off
Sachant que mon robot tourne en M1 et j’aimerai qu’il soit tester sur un semaine il faudrait que la boucle fasse 7 j x 24 h x 60 min =10 080 bougies de M1
time = 0while time <10080 dotime=timewendPour commencer, je pense que ma boucle est certainement fausse. De plus, il me semble qu’on sera limité à une journée soit 24h x 60= 1440 et non 10 080Après, comment je peux insérer le teste de mon robot dans cette boucle et comment je peux déterminer sont taux de réussite et en fonction du résultat rendre la condition valide ou pas.Dans ce cas faut-il aussi créer un des tableaux de données?Arriverais-tu à écrire un code différent mais qui pourrait remplir la fonction décrite plus haut ?03/29/2018 at 1:31 PM #66692Une boucle de 10.000 bougies me semble trop importante pour ProBacktest/ProOrder. Une solution plus viable serait d’utiliser une boucle dans les ordres, au lieu du temps (bougies) et de l’arrêter lorsque l’on trouver que le barindex de l’ordre date d’il y a une semaine, un code vite fait, à tester:
123456789101112131415161718gain=0ordre=0//boucle dans les 1000 derniers ordresfor i = 1 to 1000 dodistance=barindex-tradeindex(i)<10080//si l'ordre n'a pas plus d'1 semaineif distance thenordre=ordre+1if positionperf(i)>0 thengain=gain+1endifendifif not distance thenbreakendifnextratio = gain/ordreLa variable ratio devrait donner la valeur en 1/100 de réussite.
03/29/2018 at 2:12 PM #66695Super Nicolas, merci.
j’ai 2 hypothèses:
j’intègre ton code directement dans le mon pro-order
ou
Je transforme mon robot + ton code en indicateur (sans la boucle mais en gardant la limitation de une semaine)
Ça devrais me données des positions de références fictives et me permettre de démarrer mon pro-Order avec un historique existant
Dans mon Pro-order j’utilise la fonction:
Dans Pro-order1234567891011//c1= conditions du robot identique à l'indicateur créer avec l'aide ton code.if call "my indicator">75 thenon=1elseon=2endifif C1 and on thenbuy 1 contrat at marketendifquand pense tu ?
03/29/2018 at 2:15 PM #6669603/29/2018 at 2:27 PM #6669803/29/2018 at 4:02 PM #66706Les instructions utilisées dans le code que j’ai fourni ne sont compatibles qu’avec ProBacktest, impossible de l’utiliser en indicateur et de l’appeler en CALL.
Par ailleurs, le code donne un ratio et non un pourcentage, donc lire 0.75 plutôt que 75.
03/29/2018 at 5:20 PM #6671703/29/2018 at 5:32 PM #66718j’ai testé ton code sur une stratégie simpliste au possible et ça ne fonctionne pas. J’ai beau chercher dans ma stratégie et ton code je ne vois pas d’ou cela peut venir.
Si dessous une stratégie faite à la volé sur Eur/Usd M1. Que tu mette 10% ou 90% tu as toujours le même nombre de positions et aucun stop de la stratégie. j’ai essayé de ré-initialisé la variable “ratio” mais sans succès non plus. Pourrais-tu jeter un œil STP
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758// Définition des paramètres du codeDEFPARAM CumulateOrders = False // Cumul des positions désactivé// Empêche le système de placer des ordres pour entrer sur le marché ou augmenter la taille d'une position avant l'heure spécifiéenoEntryBeforeTime = 080000//timeEnterBefore = time >= noEntryBeforeTime//Empêche le système de placer des ordres pour entrer sur le marché ou augmenter la taille d'une position après l'heure spécifiéenoEntryAfterTime = 200000//timeEnterAfter = time < noEntryAfterTimeIF ONMARKET AND DAYOFWEEK=5 AND TIME>=215900 THEN//Pour les gaps du lundi matin.SELL AT MARKETEXITSHORT AT MARKETENDIF//STOP SI MOINS DE X% DE REUSSISTEgain=0ordre=0//boucle dans les 1000 derniers ordresfor i = 1 to 1000 dodistance=barindex-tradeindex(i)<10080//si l'ordre n'a pas plus d'1 semaineif distance thenordre=ordre+1if positionperf(i)>0 thengain=gain+1endifendifif not distance thenbreakendifnextratio = gain/ordre//ONCE RATIO=0If ratio<90 then //% de réussite pour maintien de la stratégieON=1elseON=0endif// Conditions pour ouvrir une position acheteuse//***C1C1= RSI[11](close) crosses over 40 and Stochastic[128,8](close)> 50 //***C1//Entrée en positionif ON AND C1 AND timeEnterBefore AND timeEnterAfter then//or c2 or c3 or c4 or C5BUY 1 CONTRACT AT MARKETENDIF//ReVenteif close crosses under average[20](close) thensell at MARKETendifSET STOP pLOSS 2003/29/2018 at 5:50 PM #66719je n’avais pas vu ton post concernant le retour de la variable en ratio et non en pourcentage. j’ai modifié et ça fonctionne. je suis en train de vérifier quelques détails et je post le résultat. Je précise que cette stratégie avait pour but de tester le code stop en cas de période défavorable. En aucun cas il s’agissait de faire une stratégie rentable.
03/29/2018 at 6:16 PM #66721voilà ça fonctionne très bien. Encore merci @Nicolat.
ça vas me permette de mettre en route des stratégies et ne pas être obligé de les surveiller tous les jours comme le lait sur le feu. Je vais bien sur optimiser la durée de la boucle en fonction et le taux de perte acceptable, mais ça ouvre pas mal de possibilité.
Par contre comment faire pour remettre en route(automatiquement) quand les conditions de marché re-deviennent favorable ?
123456789101112131415161718192021222324252627282930313233343536373839// Définition des paramètres du codeDEFPARAM CumulateOrders = False // Cumul des positions désactivé//STOP SI PLUS X% DE PERTEgain=0ordre=0//boucle dans les 1000 derniers ordresfor i = 1 to 1000 dodistance=barindex-tradeindex(i)<10080//si l'ordre n'a pas plus d'1 semaineif distance thenordre=ordre+1if positionperf(i)>0 thengain=gain+1endifendifif not distance thenbreakendifnextratio = gain/ordreIf (ratio*100)<25 then // taux de perte acceptable avant arrêt de la stratégieON=1elseON=0endif// Conditions pour ouvrir une position acheteuseC1= RSI[11](close) crosses over 40 and Stochastic[128,8](close)> 50 //***C1//Entrée en positionif ON AND C1 THENBUY 1 CONTRACT AT MARKETENDIFSET STOP pLOSS 20SET TARGET pPROFIT 2003/30/2018 at 2:38 AM #66743Je voulais vérifier ma théorie qui consiste à dire que si on démarre une stratégie basique (même médiocre) et qu’on l’arrête quand les variable ne sont plus en phase avec le marché actuel (soit gains sont inférieur à 75 %) on arrive à générer du profil.
Dans le screen ci dessous, la première courbe de gain est la stratégie de base, la deuxième c’est le même code avec l’ajout du stop codé par @nicolas. Pour la troisième courbe de gain, j’ai donc imaginé un ré-démarrage très basique (code ci-dessous) basé sur un croisement à la hausse d’une moyenne mobile. La stratégie qui au départ était médiocre devient rentable et inintéressante.
Maintenant, comment faire pour améliorer l’option de ré-démarrage de la stratégie ?
Des idées ?
-
AuthorPosts
Find exclusive trading pro-tools on