Probacktest et taille d’ordre variable
Forums › ProRealTime forum Français › Support ProOrder › Probacktest et taille d’ordre variable
- This topic has 5 replies, 5 voices, and was last updated 3 years ago by ZeroCafeine.
-
-
01/05/2022 at 9:23 PM #184678
Bonjour tout le monde,
J’essaie depuis des semaines d’implémenter une stratégie de trend following dont la taille des ordres décroit en fonction de l’ordre d’arrivée. Par exemple, le premier ordre est à 2 lots, le suivant à 1 lot, ensuite 0.5 puis 0.
J’ai stocké les différentes tailles dans un tableau et je mets à jour un indice qui m’indique où en est la stratégie en nombre d’ordres passés depuis la première.
Probacktest ne rend aucun résultat si l’ordre d’achat fait référence à un élément du tableau via l’indice variable.
Si je supprime le once devant ix = 0, Probacktest rend un résultat, mais évidemment ix est toujours égal à 0 dans ce cas et le tableau des tailles d’ordres n’est pas parcouru.
Quelqu’un aurait-il une idée ? J’avais déjà remarqué le même genre de problème avec cette fois une taille d’ordre qui était donnée par une fonction d’un indice. J’ai l’impression que le BUY dans le IF n’arrive pas accéder à la valeur de l’indice.
Merci,
Bien à vous,
Rod
Code example - varying order size1234567891011121314151617181920212223242526272829303132333435363738394041424344454647$sizes[0] = 2$sizes[1] = 1.5$sizes[2] = 1ema200 = ExponentialAverage[200](close)ema50 = ExponentialAverage[50](close)ema5 = ExponentialAverage[5](close)buysignal = (close > ema200) and (ema5 crosses over ema50)sellsignal = (close < ema200) and (ema5 crosses under ema50)once ix = 0size = $sizes[ix]// Conditions pour ouvrir une position acheteuseIF buysignal THEN// cette ligne ne fonctionne pas, pas de sortie de Probacktest :BUY size CONTRACTS AT MARKET// cette ligne fonctionne, mais ce n'est pas le résultat voulu pour les ordres BUY:// BUY $sizes[0] CONTRACTS AT MARKETix = ix + 1ENDIF// Conditions pour fermer une position acheteuseexitlong = low crosses under ema200If LongOnMarket AND exitlong THENSELL AT MARKETix = 0ENDIF// Conditions pour ouvrir une position en vente à découvertIF sellsignal THEN// Cette ligne fonctionne :SELLSHORT size CONTRACTS AT MARKETix = ix + 1ENDIF// Conditions pour fermer une position en vente à découvertcovershort = high crosses over ema200IF ShortOnMarket AND covershort THENEXITSHORT AT MARKETix = 0ENDIF01/07/2022 at 8:03 PM #184850Bonsoir,
ça se fait sans tableau, ce qui évite les erreurs d’indexation ix, erreur de surcroit amplifiée par le mélange du même index ix pour long ou short. On peut tester comme ceci, en prenant soin de séparer comptage long et short:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849ema200 = ExponentialAverage[200](close)ema50 = ExponentialAverage[50](close)ema5 = ExponentialAverage[5](close)buysignal = (close > ema200) and (ema5 crosses over ema50)sellsignal = (close < ema200) and (ema5 crosses under ema50)once sizeL=2once sizeS=2// Conditions pour ouvrir une position acheteuseIF buysignal and countoflongshares<4.5 THENBUY sizeL CONTRACTS AT MARKETif sizeL=2 thensizeL=1.5elsif sizeL=1.5 thensizeL=1endifENDIF// Conditions pour fermer une position acheteuseexitlong = low crosses under ema200If LongOnMarket AND exitlong THENSELL AT MARKETsizeL=2ENDIF// Conditions pour ouvrir une position en vente à découvertIF sellsignal and countofshortshares<4.5 THENSELLSHORT sizeS CONTRACTS AT MARKETif sizeS=2 thensizeS=1.5elsif sizeS=1.5 thensizeS=1endifENDIF// Conditions pour fermer une position en vente à découvertcovershort = high crosses over ema200IF ShortOnMarket AND covershort THENEXITSHORT AT MARKETsizeS=2ENDIFgraph sizeL as "sizeL"graph -sizeS as "-sizeS"01/08/2022 at 1:42 PM #184883C’est faisable avec tableau mais avec une horrible rustine 😉
La ligne qui bugge est “size=$sizes[ix]” … si on la remplace par
Rustine123456FOR i=0 to 2 DOIF i=ix THENsize=$sizes[i]BREAKENDIFNEXTça marche … mais bon c’est vraiment horrible de devoir faire ça 🙁
01/10/2022 at 12:11 PM #18501001/14/2022 at 8:48 AM #185397Tous les chemins mènent à Rome en programmation, cependant il y a des façons plus ou moins “élégante” d’arriver à ses fins 🙂
1 user thanked author for this post.
01/17/2022 at 10:29 PM #185782Tous les chemins mènent à Rome en programmation, cependant il y a des façons plus ou moins “élégante” d’arriver à ses fins 🙂
Qui dit manière élégante dis aussi un code optimisé et lecture facile, consommation moindre sur les serveur et Surtout exécution plus rapide
-
AuthorPosts
Find exclusive trading pro-tools on