Here is a Supertrend strategy for very short term trading on French CAC40. Let’s break it down for you. Let’s take a step-by-step look at what this algorithm does.
1. Setup:
- Timeframes: The primary timeframe for this script is set to 10 seconds, meaning it processes price data every 10 seconds. However, the code switches between various timeframes – from 30 seconds up to 10 minutes – depending on the calculations.
- Capital & Position Sizing: Your initial capital is set at 500 units, and the position size (the number of shares/contracts to trade) is calculated based on a percentage of the closing price. There’s also a mechanism (
MM
) to adjust position size based on the strategy’s profit, ensuring you don’t overcommit or underutilize your capital.
2. Identifying Trading Conditions:
The algorithm uses several indicators and conditions to decide when to trade:
- Supertrend: A common trend-following indicator, this script calculates the Supertrend on multiple timeframes.
- Day & Time Conditions: The script checks the time of day and day of the week. There are very specific conditions – for instance, a particular hour on a Tuesday or a certain timeframe on Fridays.
3. Trade Execution:
- Buy Conditions:
- If the current price is lower than the price 80 bars ago (
close[80]
). - It’s within the trading hours (from 9:10 AM to 5 PM).
- The
stopa
condition (a complex mix of time and Supertrend) is not active.
If all these conditions are met, the algorithm buys
n
shares at the market price. - If the current price is lower than the price 80 bars ago (
- Sell Conditions:
- If the current price is higher than the price 30 bars ago (
close[30]
). - It’s within the trading hours (from 9 AM to 5 PM).
- The
stopv
condition (another complex mix of time and Supertrend) is not active.
When these are met, the algorithm sells short
n
shares at the market price. - If the current price is higher than the price 30 bars ago (
4. Risk Management:
- Stop Loss: After entering a trade, if the price goes against the trade by 38 units, the position will be automatically closed to limit the loss.
- Target Profit: If the trade reaches a profit of 5 units, it will be closed. This target increases to 6 units if the time is between 4 PM and 5 PM.
Conclusion:
This trading algorithm is built on a combination of trend-following techniques, specific time conditions, and risk management rules. By looking at the current price in relation to past prices and the Supertrend, it makes buy or sell decisions. The added time conditions likely aim to avoid certain market anomalies that can occur at specific times.
It’s essential to test any trading strategy on historical data and in a simulated environment before going live. Remember, past performance doesn’t guarantee future results. Stay safe, and happy trading!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
DEFPARAM cumulateOrders = False //defparam flatafter = 174000 timeframe (10 second) capital=500 taille=(capital/(close*5.5/100)) MM = 1 // = 1 for optimization if MM = 0 then positionsize=taille ENDIF if MM = 1 then ONCE startpositionsize =taille ONCE factor = 1 // factor of 10 means margin will increase/decrease @ 10% of strategy profit; factor 20 = 5% etc ONCE factor2 = 2 // tier 2 factor ONCE margin = (close*.08) // tier 1 margin value of 1 contract in instrument currency; change decimal according to available leverage ONCE margin2 = (close*.08)// tier 2 margin value of 1 contract in instrument currency; change decimal according to available leverage ONCE tier1 = 200 // NAS €1 IG first tier margin limit ONCE maxpositionsize = 2000 // NAS €1 IG tier 2 margin limit ONCE minpositionsize = 1 // enter minimum position allowed IF Not OnMarket THEN positionsize = startpositionsize + Strategyprofit/(factor*margin) ENDIF IF Not OnMarket THEN IF startpositionsize + Strategyprofit/(factor*margin) > tier1 then positionsize = (((startpositionsize + (Strategyprofit/(factor*margin))-tier1)*(factor*margin))/(factor2*margin2)) + tier1 //incorporating tier 2 margin ENDIF IF Not OnMarket THEN if startpositionsize + Strategyprofit/(factor*margin) < minpositionsize THEN positionsize = minpositionsize //keeps positionsize from going below allowed minimum ENDIF IF (((startpositionsize + (Strategyprofit/(factor*margin))-tier1)*(factor*margin))/(factor2*margin2)) + tier1 > maxpositionsize then positionsize = maxpositionsize// keeps positionsize from going above IG tier 2 margin limit ENDIF ENDIF ENDIF ENDIF n=positionsize if time=090000 then ouverture=close endif timeframe(10 minute) if (supertrend[3,10]-6)=<close then haut10=1 endif if (supertrend[3,10]+3)>close then haut10=0 endif TIMEFRAME(3 minute) if (supertrend[3,3]-3)=<close then haut3=1 endif if (supertrend[3,3]+1)>close then haut3=0 endif timeframe (30 second) if (supertrend[3,6]-1)=<close then haut30s=1 endif if (supertrend[3,6]+7)>close then haut30s=0 endif timeframe (5 minute) if (supertrend[3,10]-3)=<close then haut5m=1 endif if (supertrend[3,10]+3)>close then haut5m=0 endif timeframe (10 second) rem avant 190 10 if (time>100000 and time<110000) or (time>123500 and time<133000) or (dayofweek=2 and ((time>110000 and time<144000)or time>165000)) or (dayofweek=3 and ((time>121500 and time<131500) or haut3=0)) or (time>160000 and time<161500) or (dayofweek=1 and time<100000) or (dayofweek=4 and ((haut10=0 or haut3=0) or (time>093000 and time<100000))) or (dayofweek=1 and (haut3=0 or close>(highest[40][1]-10))) or (dayofweek=2 and haut3=0 and time<110000) or (dayofweek=4 and (close>(highest[60][1]-10))) or (dayofweek=5 and close>(highest[60][1]-10)) or (dayofweek=4 and time>153000 and time<170000) or (dayofweek=5 and time<110000) or (haut10=0 and close>(highest[40][1]-15)) or (dayofweek=5 and (haut30s=0 or haut3=0) and time<120000)or (dayofweek=1 and ((haut10=0) or close>(highest[40][1]-15))) or (dayofweek=3 and time>143000 and haut30s=0) or ((dayofweek=4 or dayofweek=1) and haut5m=0) or ((dayofweek=4) and (close>(highest[50][1]-15)) and time<153000) or (dayofweek=5 and time>152900 and time<154000) or (dayofweek=5 and haut30s=0 and time>140000 and time<153500) or ((dayofweek=2 or dayofweek=3) and (time>150000 and time<153500)) or (dayofweek=2 and time>152900 and time<154500)or (dayofweek=3 and time>110000 and time<113500) or (time>=161500 and time<163000) or (dayofweek=5 and haut30s=0) then stopa=1 else stopa=0 endif rem if (time>=100000 and time<103000) or (time>130500 and time<140000) or (dayofweek=5 and (time>103000 and time<121000)) or (dayofweek=4 and close<(lowest[45][1]+12)) or (dayofweek=2 and (haut3=1 or haut30s=1)) or (dayofweek=4 and haut3=1) or ((dayofweek=5 or dayofweek=3) and (close<(lowest[150][1]+19) or (close<(lowest[60][1]+25)))) or (time>162500 and time<170000) or (dayofweek=1 and (close<(lowest[40][1]+10) or (time>=091000 and time<104500))) or (time>093000 and time<100000) or (dayofweek=2 and time>120000 and time<130000) or (dayofweek=4 and ((time>111500 and time<130000) or (time>144500 and time<150000))) or (dayofweek=1 and haut3=1) or ((dayofweek=4 or dayofweek=5) and ((close<(lowest[150][1]+21)) or (time>151000 and time<153000))) or (dayofweek=4 and time<091000) or (dayofweek=4 and (close<(lowest[50][1]+15))) or (dayofweek=2 and ((time>110000 and time<111500) or (time>142500 and time<150000))) or (dayofweek=1 and time>133000 and time<143000) or (dayofweek=2 and time>161000 and time<163000) or (close<lowest[90][1]+10) or (dayofweek=2 and time>150000 and time<153000) or (dayofweek=1 and ((haut10=1) or (time>120000 and time<130000 and close<(lowest[40][1]+15)))) then stopv=1 else stopv=0 endif REM and close<(close[80]) IF (time>=091000 and time<170000) and close<(close[80]) then feuvert=1 else feuvert=0 endif rem and (medianprice+1)=<bollingerup[17](close) REM and close>(close[20]) if (time>=090000 and time<170000) and close>(close[30]) then feurouge=1 else feurouge=0 endif if feuvert=1 and not onmarket and stopa=0 then buy n share at market endif if feurouge=1 and not onmarket and stopv=0 then sellshort n share at market endif set stop loss 38 set target profit 5 if time>160000 and time<170000 then set target profit 6 endif |
Share this
No information on this site is investment advice or a solicitation to buy or sell any financial instrument. Past performance is not indicative of future results. Trading may expose you to risk of loss greater than your deposits and is only suitable for experienced investors who have sufficient financial means to bear such risk.
ProRealTime ITF files and other attachments :PRC is also on YouTube, subscribe to our channel for exclusive content and tutorials
Les résultats sont très flatteurs. Bravo.
merci pour le partage, la stratégie marche bien sur 200k mais dès que vous mettez le 1M pour élargir la période, la stratégie n’est plus rentable.
Bonjour, effectivement, il convient d’adapter chaque semaine les variables (ici 80 et 30) des lignes 82 et 89 afin de s’adapter aux fluctuations des cours, je ne sais pas si c’est automatisable ?
Merci pour le partage. Malgré le stop loss à 38, il y a eu un gros plouf de plus de 1000€ le 31 octobre… Je crois comprendre que Mr est fan du Supertrend… As tu essayé les indicateurs supertrend améliorés (supertrend+, superjump HTF, etc que l’on peut trouver sur TV) ?
je n’ai pas de plouf, et je n’ai jamais eu de plouf qui dépasse le stop loss à moins d’un effondrement de la bourse et d’un manque de liquidités sur le marché
Je n’ai d’ailleurs pas de pertes sur ce code sur la période 200k en 10 secondes
je vais regarder les autres supertrend
Ciao WE ARE SOCIETY, non riesco ad andare live su demo con la tua strategia. non capisco perche’
puoi aiutarmi? grazie
il ne doit pas y avoir de problèmes, je suis chez ig sur le france 40 = cac 40 en 10 secondes, avec les horaires de trading français, à moins que tu as une version prorealtime limitée ?
Bonjour LucasBest, je n’ai pas connu le plouf car j’actualise chaque semaine les variables permettant d’éviter les erreurs et non je ne connaissais pas ces supertrend améliorées, faudrait essayer, par facilité j’ai utilisé la fonction intégrée à PR qui je trouve est déjà assez efficace en mutlitimeframe
Pour de ce qui est de l’actualisation automatique hebdomadaire des variables permettant “d’éviter les erreurs” (lignes 82 et 89 ? “afin de s’adapter aux fluctuations des cours”), c’est forcément automatisable s’il y a une logique derrière… Encore faudrait-il connaitre la logique. 🙂
Salut LucaBest, j’aime ta positivité, après il faut la traduire en algorithme, ces variables veulent dire : “sommes nous trop haut pour acheter ou sommes nous trop bas pour vendre”
La logique sera probablement de backtester les variables sur la période précédente à un intervalle fixe (toutes les semaines, toutes les deux semaines, etc.) ? Il serait intéressant de comprendre quand quelles valeurs ont le mieux fonctionné, s’il y a des saisonnalités, etc. Ou si d’autres valeurs peuvent être prises en fonction de l’heure (matin ou après-midi) et de la volatilité. J’ai déjà fait cela avec un autre système (Breakout), cela peut fonctionner.
Salut Fabian, on peut complexifier à souhait mais tu ne gagneras plus d’argent car ton algo va intervenir 1 fois par semaine, si tu veux des tunes, tu dois être actif
Bonjour ! Interessant ton algo ! au backtest ce matin, 2 trades. Par contre j’ai tenté de le faire tourner en démo depuis 3 jours, et il n’a pas pris position alors qu’il aurait du. Une idée ? pourquoi ne s’est t’il pas déclenché ?
Salut David, pareil chez moi. C’est que tout simplement il n’y a pas d’opportunités, je lui ai interdit tous les moment risqués de la journée et si il n’y a pas de bonnes occasions pendant les périodes intéressantes et autorisées, ben il n’y va pas. C’est là tout l’intérêt du robot car il a une mémoire sans faille et ne fera pas la même erreur que l’être humain qui intervient au mauvais moment, juste pour dire de faire quelque chose en espérant gagner et patatra, grosse perte. J’ai arrêté de trader manuellement.
Merci pour ta réponse. Cela signifie donc que les résultats du backtest ne refléte pas la réalité ?
Si, le backtest est forcément juste mais au moment où tu le fais. Cependant moi j’actualise tous les week-ends les variables des lignes 82 et 89. Faudrait pour être juste publier un backtest chaque semaine avec les nouvelles variables. Je n’ai pas encore trouvé le moyen d’automatiser ce paramétrage.
Hello WE ARE SOCIETY,
Merci pour ton code !
Comment tu actualises les variables des lignes 82 et 89 ?
quel chiffre tu mets en fonction de “sommes nous trop haut pour acheter ou sommes nous trop bas pour vendre” ?
As tu des exemples concrets stp ?
Merci !!
je fais un walkforward entre 20 et 100 pour chaque variable en non ancrée, 1 seule occurrence et 99% dans l’échantillon
merci pour ta réponse. Par contre je suis novice sur prorealcode et ne suis pas sûr de bien comprendre toute ta réponse.
en gros tu backtest chaque variable entre 20 et 100 jusqu’à obtenir un taux de réussite de 99% ? j’imagine que non car ça doit prendre un temps de dingue
ou alors en fonction du marché tu sais si l’une ou l’autre variable est proche d’un certain chiffre et tu affines après ?
tu vas dans optimisation des variables, tu rentres les variables par exemple x et y que tu mets dans ton code également, et tu les fais tourner de 20 à 100
tout se fait automatiquement et une fois toutes les solutions calculées, il te donne le résultat de x et y pour le gain maximal
c’est La Fonction Majeure de Prorealtime, si il faut connaitre une chose, c’est bien cette fonction qu’on appelle Walk Forward
Merci !!!
j’ai trouvé.
par contre, tu fais un walk forward sur combien d’unités pour avoir les variables les plus justes ? 25k, 50k, 200k ??
merci !
moi je fais 200k ça représente 1,5 mois, c’est déjà pas mal car le marché change et pour que le robot soit toujours actif, il faut l’adapter régulièrement aux fluctuations du marché
Ok ! donc walkforward sur 200k chaque weekend.
merci pour toutes tes explications !
dans l’idéal faudrait faire un walkforward tous les jours mais je trouve que 1 par semaine c’est déjà bien
j’avais demandé un jour à prorealtime de faire des variables qui s’auto-ajustent chaque jour, une sorte de walkforward automatique, du coup ils ont rajouté un bouton “ajuster automatiquement” mais qui ne fonctionne pas
ça marche!
ça te prend combien de temps de faire un walkforward 200k ?
car de mon côté c’est vraiment très très (trop) long… (peut être du à mon ordi)
ça prend environ 3 à 5 minutes de mémoire, avec proorder il n’y a pas de calculs qui se passent chez toi, tout est calculé par les serveurs de prorealtime, peu importe que ton ordinateur est 10 ans ou que ce soit un gamer ultrapuissant, celà ne changera rien
Curieux car de mon côté, ça prend des heures…
Dans la fenêtre de probacktest je remplace les variables mentionnées par X et Y dans le code
Puis j’ouvre l’optimisateur j’ajoute les variables X et Y avec un intervalle entre 20 et 100
je règle en non ancrée, 1 seule occurrence et 99% dans l’échantillon
je ferme la fenêtre et lance le backtest.
et là, c’est super mega long !
même en 50k c’est très long (bien plus que 3/5min)
il doit y avoir un souci quelque part. il faut que je creuse et que je trouve.
ok j’ai compris c’est par ce que dans la case “pas (intervalle)” tu dois mettre 10, c’est à dire que l’on teste 20,30,40,…,90,100
ça fait bcp moins de combinaisons, aucun intérêt de tester 1 par 1
Aaaahhh ! 😉
Roger that !
c’est bien plus rapide. Merci à toi pour ton aide et pour ce code !!
ça fait combien de temps que tu le fais tourner en live sans avoir de perte (en fonctionnant de cette manière) ?
ça fait maxi 1,5 mois, avant il avait fait quelques erreurs que j’ai corrigé au fil du temps, je pense qu’il n’est pas possible de faire un algo qui ne fait jamais d’erreur car tu peux acheter et que ça descende pendant 6 mois et là tu perds tout. C’est pourquoi il faut un stop loss qui met fin à la partie, un stop loss de 38 points, c’est acceptable. En ce moment il ne fait pas grand chose car le cours du cac40 est bloqué trop haut et il n’y a pas assez de fluctuation. J’envisage d’adapter ce programme à l’EUR/USD qui fait + de fluctuations dans un même range.
ok.
bien sûr, il faut un stop loss pour limiter les pertes.
mais je me demande à quel point le fait d’optimiser les variables régulièrement peut limiter le fait d’avoir des pertes.
yes, ça pourrait être intéressant sur l’EURUSD!
hello We Are Society, quelles sont tes variables cette semaine 60 et 100 ?
j’ai eu deux pertes hier et aujourd’hui
a voir ce que cela donne demain et semaine prochaine
Merci
un changement dans le code ou ton walkforward te donne 60 et 30 ?
j’ai juste rajouter 5 minutes d’interdiction pour qu’il n’y ait pas de mauvais trade, ce n’est pas forcément la bonne solution mais c’en est une. Le problème c’est que à force d’interdire des plages horaires d’activité, au fil du temps, ton algo trade de moins en moins. Il faut donc à un moment alléger les interdictions afin de l’adapter au marché. Perso je considère qu’un algo qui ne fait pas d’erreurs sur 200k de 10 secondes (uniquement accessible en version complète proorder) c’est déjà trés bien.
code intéressant, puis-je connaître le nombre de bougies que vous utilisez pour mettre à jour les variables ?
je fais un walkforward entre 20 et 100 pour chaque variable en non ancrée, 1 seule occurrence et 99% dans l’échantillon
Bonjour. Je suis en démo depuis le 03/11. Le backtest indique 22 trades. Pourtant aucune position n’a été prise. Je comprends que le robot ne prenne pas position aux moments risqués de la journée, mais pourquoi donc retrouve t’on ces trades dans le backtest ? S’il n’y a pas de défaut dans le codage, il a donc choisi de ne prendre aucune position sur les 22 opportunités qu’il a eu, et dans ce cas, ca n’est pas rentable.
Je pense qu’il y a moyen d’automatiser (simuler) le walkforward entre 20 et 100 pour chaque variable (x et y), en utilisant plusieurs tableaux de dimension x*y avec pour objectif de calculer les gains pour chaque pair x et y ; puis d’ajouter à une certain heure de la semaine la mise à jour des variables x et y à utiliser pour la période suivant… Je ne sais pas si cela a déjà été fait sur le forum mais je vois bien le code dans ma tête (pas trop compliquer normalement).
là par contre celà dépasse mes compétences actuelles sur proorder
Bonjour à tous et grand merci à ” WE ARE SOCIETY ” pour ton partage.
Je suis nouveau sur Prorealcode et j’aimerais savoir si quelqu’un parmi vous pourrais m’aider ?
Je viens de copier/coller le code cependant celui çi affiche plusieurs “erreur”..
Ligne 1, 15,17,18,19,21,23,28,29,32,33…
Avez vous eu le même cas ?
Par avance merci 😉
Il faut copier l code (ou encore mieux importer le fichier ITF dans la section proorder (probacktest) et non dans l’onglet probluider
Bonsoir Lucas
Merci pour ta réponse, j’ai télécharger le fichier c’est bon 😉
Cependant actuellement sur le backtest cela ne me sort aucun résultat en graph 10sec
Je vais continuer de pofiner cela .
Si vous avez des idées d’amélioration je suis preneur.
Je reçois également 0 transaction lorsque je fais des backtests sur cette stratégie. Y a-t-il une idée sur la façon de résoudre ce problème ? J’ai essayé de changer la taille de la position en 1 au lieu de la formule, mais cela n’a pas aidé. (Google Traduction)
Ignorez ce qui précède, je pense que j’ai sélectionné le mauvais marché… !
Bonjour , comment pouvez vous prévoir à l’avance le type de journée pour paramétrer certaines variables même pour la période suivante ? On ne peut pas le savoir. La matinée peut etre calme et à partir de 15h30 ca part en tendance ou l’inverse. Si vous avez une explication ? Merci
Bonjour, effectivement les performances du passé ne permettent pas de prédire l’avenir. Cependant, on se projette en se disant que les niveaux de cours actuels représentent la fourchette de prix actuelle et celle de demain : actuellement le cac40 oscille entre 7200 et 7280, il y a 3 semaines on était plutôt entre 6900 et 7100. Du coup, quand le cac40 explose à la hausse et touche les 7300, l’algo ne tente rien car c’est trop haut donc trop risqué, il n’intervient que dans le range 7200 -7280 max qu’il a connu sur les derniers jours. Du coup, moi je mets à jour les variables une fois par semaine pour que l’algo puisse se situer dans les prix et travailler dans ce range. Pour faire simple, il aime bien acheter pas cher en période haussière et aime bien vendre cher en période baissière. Ce sont les éléments déclencheurs, les règles qui lui permettent de ne pas tout perdre. L’être humain oublie vite ces limites de risque et à part les scalpeurs qui prennent beaucoup de petits profits (et donc logiquement aussi de petites pertes), ceux qui misent sur du moyen terme subissent le marché, ceux qui misent sur le long terme, perdent la totalité de ce qu’ils ont engagé.
Bonjour, aujourd’hui le backtest indique 5 trades, 4 longs et 1 court. pourtant le bot ne s’est pas déclenché. je n’arrive pas comprendre ce décalage entre le test et la réalité
hello David,
curieux. de mon côté tout s’est déclenché normalement.
il y avoir qqch qui bloque ton bot
Hello! oui tres certainement. mais je ne vois pas quoi. je suis en demo, et toi en reel ?
de mon côté les 5 trades ont bien été passés, c’est certain tu as un problème majeur, peut-être que tu n’es pas sur france40 mini 1€ et du coup tu ne mets pas suffisamment de fonds sur le compte ?
Ce qui est certain c’est qu’aucun code ne fonctionnera chez toi, si celui ci ne fonctionne pas, aucun autre ne fonctionnera
en réel oui
Bonjour, merci pour cet excellent code.
IG vient de mettre à jour la démo vers la V12, cependant, les résultats des backtesting et forward testing sont complètement différents entre la V11 et la V12. Toutes les dates et heures et le marché CAC40 correspondent exactement.
Pourquoi les résultats sont-ils si différents ?
bonjour @Smlok, je suis sur la V12 et tout est ok, c’est une question de réglage, par exemple la taille du spread, cocher la case backtest en tick par tick, le fuseau horaire français, etc ………
Moi pareil, sur IG, V12 et en réel – les backtest indiquent des ordres passées, mais en vrai les trades ne se sont jamais déclenchés. J’ai appliqué le code sur le marché PXI, qui réplique le CAC 40 à 1 Euro le point. Tout mes autres robots fonctionnent sans problème. Si qq trouve la solution…
Je suis sur IG et tout mes bots sur à 1€ le pt, donc ca ne vient pas de là…
Apres pour l’instant je l’ai mis en démo. il est possible que la demo buggue un peu
Thank you “We are society”
It work very well on my side. I have it on backtest since 2 weeks and it’s at 100% win for 18 trades for now. I realy like the way you made it.
Merci @Toto_lefrenchie, il fonctionne plutôt bien même si a un moment il finira par perdre mais il aura déjà gagné plein de pips !! 4 trades réalisés de 5/12/2023 et 4 trades le 6/12/2023 !!
Pour la taille ce ne serait pas plutôt 5.5% du capital divisé par le cours du buy -> (capital*5.5/100) / close ? car là on divise le capital par 5.5% du close ? Merci WE ARE SOCIETY.
Autre question WE ARE SOCIETY, les lignes 70,76,82 et 89 dépendent de l’istrument ? Dans ton code ci-dessus c’est pour le CAC40. Si c’est pour le DAX il faut les reformuler ? Merci
Bonjour, ça peut être 5.5 du buy, si tu achètes ou du sell si tu vends, celà ne changera pas grand chose en terme de volumes puisqu’il n’y a que le spread de 1 entre les deux chez IG
Ce qu’il faut c’est que tu es assez de fonds pour assumer un stop loss
Ce programme est vraiment uniquement pour le CAC40, car j’ai étudié les moments dangereux du CAC, pas ceux du DAX qui est un animal bien + dangereux
Entre le montant du DAX et du CAC on est quasiment à DAX=2*CAC, donc tous les niveaux sont pour le CAC, indice + doux et humble que le DAX Allemand
Bonsoir à tous,
Merci @We are society. Ton algo est très intéressant. L’as tu testé sur un compte IB ? Recalculer le range toutes les semaines pour ne pas prendre de longs trop hauts et de shorts trop bas est un grand challenge pour ne pas partir en drawdown pendant des semaines. Je ne suis pas encore ceinture noire de pro order (ça se dit encore ?) mais j’ai hâte de bosser dessus et de voir ce qu on peut en dériver pour des indices plus volatiles comme le Nasdaq ou la paire USD / JPY.
Salut, non je ne l’ai pas testé sur IB, je ne sais pas si c’est un spread ou des frais. Chez IG c’est un SPREAD variable suivant les heures. Sur cet Algo je backtest avec un spread de 1, ce qui n’est pas juste le matin et le soir car le spread est supérieur en réalité
Mon idée est de faire un robot scalper qui coupe sa perte suffisamment tôt si la tendance s’inverse, mais ce n’est pas simple
En + faire un algo qui reste actif tout le temps et qui ne fait pas d’erreurs pendant une longue période, c’est encore + difficile, j’ai déjà essayé avec le VIC (indice de la peur) ou avec plein de stochastiques mais sans succès
Merci! Comment modifier le MM pour tester sur le DAX ou S&P par exemple car je constate que c’est là aussi pertinent?
Bonjour @Gerf11 , en fait j’ai intégré dans ce code ma connaissance du CAC40, comment il réagit, quand il est dangereux, quand il fait souvent la même chose, de combien de pips il est capable de monter ou de descendre. En clair, cet algorithme n’est pas du tout adaptable à un autre support car pour celà il faudrait connaitre par coeur le Dax ou le S&P en les pratiquant depuis longtemps
Pourquoi j’ai choisi le CAC40 : c’est parce que c’est avec lui que je gagne le +, je peux le maitriser, et en + je suis bien placé en spread chez IG
bonjour, excusez mon français, je suis gallois et j’utilise Google Translate
J’utilise votre algorithme depuis le 12 décembre, mais il n’a pas encore effectué d’échange. Si j’exécute un backtest, il montre une transaction le 13 décembre.
J’utilise mon système IG sur UTC +1 pour l’heure européenne, avez-vous une idée sur le problème ?
merci beaucoup
salutations
Mike
Bonjour, oui je crois que celà correspond :
1 transaction le 12, 1 transaction le 13 puis 3 transactions le 18
Bonjour ! As tu reussi a éviter les pertes du 13, 14 et 19 decembre ? Je suis assez curieux ^^
Salut David, ben moi je regarde les cours graphiques au moment où il est intervenu et j’essaie d’analyser comment lui dire de ne pas le faire, parfois je ne trouve pas d’autres solutions que d’interdire cette plage horaire mais c’est une solution que je n’aime pas car ça diminue son temps d’intervention, donc son gain potentiel, parfois je trouve une solution intelligente pour lui faire comprendre qu’il a acheté trop cher pour un matin ou qu’il s’est positionné trop bas a la vente pour l’après -midi. Par exemple en fin d’année, il y a un rallye a la hausse et il est dangereux de se positionner a la baisse, particulièrement après 13h30.
Bonjour, pas de pertes de mn côté sur les 15 derniers jours. Mon sous jacent les les futur Cac40. Je viens de passer sur FCE FULL0124. En 10 secondes. J’a toutefois tendance à me dire que les derniers gains furent vraiment chanceux car passé overnight et assez prche du stop qui mange 7 performances de gains…Je me demande si cela ne serait pas intéressant de calculer si pas de stop win dans les 2h après achat, de clôturer la postiion…As-tu déjà tenté “@We Are SOCIETY”?
Pour le reste je fais l’optimisation des variables le dimanche, uniquement deux variables (lignes 82 et 89 dans ton code ci-dessus). En fais-tu davantage?
Bonjour Gerf11, il est possible de mettre un stop loss + loin et d’améliorer ce code afin qu’il intervienne + souvent en supprimant des interdictions horaires et en les remplaçant par du code + intelligent. Pour ma part, je n’utilise plus ce code depuis un bon moment car chaque week-end, j’aime inventer des codes différents et essayer de faire mieux. Les banques ont souvent plusieurs algos lancés en simultanés et ensuite ils font des arbitrages. Si tu testes ce code sur une longue période 1M (8 mois environ) sur la version complète de proorder, il ne donne pas de bons résultats. Après moi je ne veux pas d’un algo qui soit bon toute l’année, je préfère un dynamique qui intervient souvent. La problématique est toujours la même, faire un algo qui suit la tendance et qui intervient dans un canal (+haut et +bas) bien déterminé.
intéressant…merci pour ton opinion. En tout cas, testé en réel et à toujours fonctionné…je constate simplement que dans ce code, les sorties en gains se sont faites au max dans les deux heures, après c’est davantage de la chance… je vais tester pour paramétrer de la sorte car actuellement les différents ratios sont excellents. Bravo à toi!
Bonjour, la stratégie ne fonctionne pas à 1M même en changeant les variables 1 fois par semaine.
Dommage
Bonjour, comment puis-je passer au graphique du Dow Jones ? J’ai essayé et cela a été impossible
@NOUS SOMMES LA SOCIÉTÉ
Bonjour , hélas je ne pratique pas le Dow Jones car c’est un étalon sauvage par rapport au petit mouton suiveur du CAC40, les fluctuations du DJ sont tellement importantes qu’il faut soit avoir énormément d’argent et du temps, soit couper court rapidement quand on n’est pas dans la tendance, c’est compliqué. Le DAX est moins dangereux et aussi intéressant pour un trading manuel car il fait du bruit : des fluctuations constantes qui permettent de faire beaucoup d’aller retour en intraday
Bonjour, merci beaucoup d’avoir répondu. Tu as raison pour le DJ, mais c’est aussi celui qui peut donner le plus d’argent, même s’il est le plus dangereux. Mais pourriez-vous me faire la faveur de me mettre dans le même bot pendant les heures de marché aux États-Unis, s’il vous plaît ?
JOUER AU PING-PONG AVEC MEDIANPRICE CAC40 EN 10 LIGNES DE CODE SEULEMENT
Une question, pourquoi ce bot n’est-il pas visible dans prorealcode ? Je pense que ça devrait être intéressant. Comment pouvez-vous nous contacter en privé ? grâce du nouveau
Bonjour, je ne pratique pas le DJ et donc il me faudrait bcp trop de temps pour faire un algo dessus et en + avec peu de chances d’y parvenir. Pour l’algo “jouer au ping pong avec medianprice”, l’administrateur ne l’ a pas valider et donc il n’ apparait pas.
Bonjour. Je le teste depuis lundi. Je suis à 37 points de gain sur la semaine soit 37 € à 1€ du point sur le CAC40 / PXI. Avec respectivement des périodes de 90 et de 35 pour les périodes à optimiser. Quelqu’un a fait mieux ?
Je n’arrive pas encore à reproduire la super perf du backtest ci-joint.
Merci à @wearesociety, tu me donnes du grain à moudre pour ce soir 🙂
Bonjour KumoNoJuzza, en réalité ça dépend aussi de la volatilité, chaque période est différente. Si tu veux qu’il soit + actif, tu dois retirer des plages horaires d’interdiction en les remplaçant par quelque chose de + intelligent comme par exemple if close>highest[30][1]-15 par exemple
bonjour, une petite idée d’ajout mais que je ne saurai coder, ajouter au stop loss un break even qui déclenche un stop suiveur pour profiter de la tendance si elle se poursuit…
This is dangerous, did you see aug 2023 ? I would not run live this algo, need more daata to test, tested with 1M from jul 23 to march, not enugh data in my opinion to be sure there is an edge. Tf so small always suffers a lot of noise. OOS equity dosent look good at all. tested with sp 10 and sl 38 which is the best configuration In Sample until January, from jan to March performance is not consistent.
could you post the backtest please ?
Here: https://imgur.com/a/07T1HGF
set stop loss 38
set target profit 10
2 point spread ( CASH France 1euro )
winnie37, as you can see from my screenshots seems like the strategy has been optimized on the 200k backtest, then running on the cash 1euro makes no sense since avgtrade is too small to generate profits, you need CAC cash 10euro to get avgtrade around 20euro per trade, it looks good but who knows, too fews data for backtesting in my opinion, we should have at least 5-8years of data at 10seconds to validate this strategy.
Then, I am very doubful about these lines of code:
if (time>=100000 and time<103000) or (time>130500 and time<140000) or (dayofweek=5 and (time>103000 and time<121000)) or (dayofweek=4 and close<(lowest[45][1]+12)) or (dayofweek=2 and (haut3=1 or haut30s=1)) or (dayofweek=4 and haut3=1) or ((dayofweek=5 or dayofweek=3) and (close<(lowest[150][1]+19) or (close<(lowest[60][1]+25)))) or (time>162500 and time<170000) or (dayofweek=1 and (close<(lowest[40][1]+10) or (time>=091000 and time<104500))) or (time>093000 and time<100000) or (dayofweek=2 and time>120000 and time<130000) or (dayofweek=4 and ((time>111500 and time<130000) or (time>144500 and time<150000))) or (dayofweek=1 and haut3=1) or ((dayofweek=4 or dayofweek=5) and ((close<(lowest[150][1]+21)) or (time>151000 and time<153000))) or (dayofweek=4 and time<091000) or (dayofweek=4 and (close<(lowest[50][1]+15))) or (dayofweek=2 and ((time>110000 and time<111500) or (time>142500 and time<150000))) or (dayofweek=1 and time>133000 and time<143000) or (dayofweek=2 and time>161000 and time<163000) or (close<lowest[90][1]+10) or (dayofweek=2 and time>150000 and time<153000) or (dayofweek=1 and ((haut10=1) or (time>120000 and time<130000 and close<(lowest[40][1]+15)))) then
stopv=1
else
stopv=0
endif
I apologize but this code looks like overfitting to me.
Removing the short side will help, I would like to know from the author where are the condition coming from, are they a “standard” BIAS on CAC40 ? I am talking about these line of code:
if (time>100000 and time<110000) or (time>123500 and time<133000) or (dayofweek=2 and ((time>110000 and time<144000)or time>165000)) or (dayofweek=3 and ((time>121500 and time<131500) or haut3=0)) or (time>160000 and time<161500) or (dayofweek=1 and time<100000) or (dayofweek=4 and ((haut10=0 or haut3=0) or (time>093000 and time<100000))) or (dayofweek=1 and (haut3=0 or close>(highest[40][1]-10))) or (dayofweek=2 and haut3=0 and time<110000) or (dayofweek=4 and (close>(highest[60][1]-10))) or (dayofweek=5 and close>(highest[60][1]-10)) or (dayofweek=4 and time>153000 and time<170000) or (dayofweek=5 and time<110000) or (haut10=0 and close>(highest[40][1]-15)) or (dayofweek=5 and (haut30s=0 or haut3=0) and time<120000)or (dayofweek=1 and ((haut10=0) or close>(highest[40][1]-15))) or (dayofweek=3 and time>143000 and haut30s=0) or ((dayofweek=4 or dayofweek=1) and haut5m=0) or ((dayofweek=4) and (close>(highest[50][1]-15)) and time<153000) or (dayofweek=5 and time>152900 and time<154000) or (dayofweek=5 and haut30s=0 and time>140000 and time<153500) or ((dayofweek=2 or dayofweek=3) and (time>150000 and time<153500)) or (dayofweek=2 and time>152900 and time<154500)or (dayofweek=3 and time>110000 and time<113500) or (time>=161500 and time<163000) or (dayofweek=5 and haut30s=0) then
stopa=1
else
stopa=0
endif
DEFPARAM cumulateOrders = False
rem CAC40 (france40) en 10 secondes
rem à la ligne ci-dessous mettre le montant engagé
capital=500
capital2=capital+STRATEGYPROFIT[0]
taille=(capital2/(close*6/100))
if taille<1 then
taille=1
endif
n=taille
rem les tendances
timeframe(10 minute)
if (supertrend[3,10]-6)=<close then
haut10=1
endif
if (supertrend[3,10]+3)>close then
haut10=0
endif
TIMEFRAME(3 minute)
if (supertrend[3,3]-3)=<close then
haut3=1
endif
if (supertrend[3,3]+1)>close then
haut3=0
endif
timeframe (30 second)
if (supertrend[3,6]-1)=<close then
haut30s=1
endif
if (supertrend[3,6]+7)>close then
haut30s=0
endif
timeframe (5 minute)
if (supertrend[3,10]-3)=<close then
haut5m=1
endif
if (supertrend[3,10]+3)>close then
haut5m=0
endif
timeframe (10 second)
rem les horaires interdits à l’achat
if (time>095000 and time<110000) or (dayofweek=2 and ((time>110000 and time<144000)or time>165000)) or (dayofweek=3 and ((time>121500 and time<133000) or haut3=0)) or (time>160000 and time<161500) or (dayofweek=4 and ((haut10=0 or haut3=0) or (time>093000 and time<100000))) or (dayofweek=1 and (haut3=0 or close>(highest[40][1]-10))) or (dayofweek=4 and (close>(highest[80][1]-15))) or (dayofweek=5 and close>(highest[60][1]-10)) or (dayofweek=4 and time>153000 and time<170000) or (dayofweek=5 and time<110000) or (haut10=0 and close>(highest[40][1]-15)) or (dayofweek=5 and (haut30s=0 or haut3=0) and time<120000)or (dayofweek=1 and ((haut10=0) or close>(highest[40][1]-15))) or (dayofweek=3 and time>143000 and haut30s=0) or ((dayofweek=4 or dayofweek=1) and haut5m=0) or (dayofweek=5 and haut30s=0 and time>140000 and time<153500) or (dayofweek=2 and ((time>152900 and time<154500)or time<100000)) or (dayofweek=3 and time>091500 and time<113500) or (time>=161500 and time<163000) or (dayofweek=5 and haut30s=0) then
stopa=1
else
stopa=0
endif
rem les horaires interdits à la vente
if (time>=100000 and time<104500) or (time>130500 and time<140000) or (dayofweek=5 and (time>090000 and time<121000)) or (dayofweek=4 and close<(lowest[45][1]+12)) or (dayofweek=2 and (haut3=1 or haut30s=1)) or (dayofweek=4 and haut3=1) or ((dayofweek=5 or dayofweek=3) and (close<(lowest[150][1]+19) or (close<(lowest[60][1]+25)))) or (time>162500 and time<170000) or (dayofweek=1 and (close<(lowest[40][1]+10) or (time>=091000 and time<104500))) or (time>093000 and time<100000) or (dayofweek=2 and time>120000 and time<130000) or (dayofweek=4 and ((time>111500 and time<130000) or (time>144500 and time<150000))) or (dayofweek=1 and haut3=1) or ((dayofweek=4 or dayofweek=5) and ((close<(lowest[150][1]+21)) or (time>151000 and time<153000))) or (dayofweek=4 and time<091000 or (time>092000 and time<100000)) or (dayofweek=4 and (close<(lowest[50][1]+15))) or (dayofweek=2 and ((time>110000 and time<111500) or (time>142500 and time<150000))) or (dayofweek=1 and time>133000 and time<143000) or (dayofweek=2 and time>153000 and time<163000) or (close<lowest[90][1]+10) or (dayofweek=2 and time>150000 and time<153000) or (dayofweek=1 and ((haut10=1) or (time>120000 and time<130000 and close<(lowest[40][1]+15)))) or (dayofweek=2 and time<130000) or (dayofweek=1 and time>100000) then
stopv=1
else
stopv=0
endif
rem les horaires autorisés avec les niveaux décidants si achat ou vente
IF (time>=091000 and time<170000) and close<(close[90]) then
feuvert=1
else
feuvert=0
endif
if (time>=090000 and time<170000) and close>(close[40]) then
feurouge=1
else
feurouge=0
endif
rem les ordres
if feuvert=1 and not onmarket and stopa=0 then
buy n share at market
endif
if feurouge=1 and not onmarket and stopv=0 then
sellshort n share at market
endif
set stop loss 38
set target profit 5
if time>160000 and time<170000 then
set target profit 6
endif
Bonjour. A noter que cette stratégie fonctionne aussi sur le ftse. Ce qui n’est pas surprenant puisque ce sont 2 indices avec une dynamique plutot similaire
Bonjour, je découvre que l’on peut faire des trades auto sur des timeframe de 10 secondes; Vous me confirmez ?
Oui on peut même jusqu’au 1 seconde.
Entendu, merci. Mais pas en tick, c’est bien çà?
Bonjour WE ARE SOCIETY,Vous optimisez toujours votre Algo chaque
Bonjour, je l’optimise et l’améliore chaque semaine en évitant au maximum les interdictions horaires et en les remplaçant plutôt par des if close>highest[40][1]-15 then stopachat=1 endif
c’est un bien beau code que tu nous sors là. il m’a fallu du temps pour bien tout comprendre mais au final tout y est… (même un trop un mon gout) mais c’est top . Evidement à rafraichir en temps et en heure avec les variables. mais bravo…. je ne suis juste pas trop d’accord avec les ratios gains pertes mais bon ca ça dépend de chacun.