ProRealCode - Trading & Coding with ProRealTime™
Non en fait, on voit bien une fermeture d’un ordre contrarient et l’ouverture du nouveau sur la même bougie, je suis allé trop vite. Je ne constate aucun problème avec ce code (voir image jointe). L’alternance achat / vente est bien visible 🙂
Merci pour la réponse,
Ce que je ne comprend pas c’est qu’il y a une alternance achat vente, tandis qu’à ces points normalement il ne devrait y avoir soit qu’un achat ou soit qu’une vente, étant donné que le cours ne traverse qu’une seule fois la courbe de tendance à chaque fois.
On dirait qu’il se passe deux ordres à chaque fois tandis que logiquement il ne devrait en passer qu’un seul : soit acheter (le cours dépasse la tendance) ou vendre (le cours repasse sous la tendance), les deux ne pouvant se produire simultanément, en particulier avec la formule de la “tendance magique” qui marque bien les passages d’un état achat à un état vente.
Avec toutes les autres formules que j’utilise il n’y a qu’un seul ordre à chaque fois, soit achat, soit vendre, les doubles ordres de ce type n’apparaissent que lorsque je dézoom trop et que deux ordres sont fusionnés par effet de tassement, tandis qu’ici sur le screen j’ai zoomé à fond afin de bien vérifier que les deux ordres ont bien eu lieu simultanément :
Donc sur le double ordre à 10h, au milieu du screen, sur lequel j’ai ouvert le détail, il ne devrait normalement y avoir seulement qu’un seul ordre d’achat puisque la tendance passe sous le cours et ne le recroise pas avant bien plus tard,
Est-ce que quelque chose m’échappe avec votre formule ?
On le voit bien sur ma copie d’écran, avec les histogrammes bleu et jaune, on passe d’un ordre à un autre. On ne peut pas acheter et vendre à découvert en même temps, un autre contraire fermera automatiquement celui qui est présent au marché.
Merci Nicolas pour ta réponse,
Effectivement j’ai finis par comprendre que cela était du à l’utilisation de SHORT et au fait de ne pas fixer des limites avec des “IF ONMARKET/IF NOT ON MARKET” “SELL N SHARE/BUY N SHARE”
Je me rend compte que la performance de la formule magic est identique à la fonction SMA “exemple optimisation” de base, une fois mise sur la même échelle.
Cela dit on peut sans doute améliorer la fonction en utilisant des STOP %LOSS et %PROFIT couplé avec des TRALING STOP %LOSS et %PROFIT
Est-ce que vous auriez des pistes pour intégrer ces éléments à la Magic trend ? Car nous pouvons grandement améliorer cette formule et j’aimerais y participer sur ce forum avec vous si vous êtes partants.
Pour l’instant voici les observations que j’ai faites sur des échelles 1h pour des lots entrées/sorties de 10 actions LVMH :
POINT DE DÉPART : le simple fait de posséder les 10 actions sur cette période de temps en passif génère 1900 net sur 17 500 de capital initial sur 3.5 mois (06/10/2023-26/01/2024) soit environ 31% par ans (valeur à battre)
1 → La fonction SMA de base entrant avec un “close cross over” et sortant en vendant avec un %LOSS 1% / %PROFIT 1%, génère 4450 net soit environ 85% par ans
2- → En comparaison, la fonction SMA de base utilisant un point d’entrée “close crosses over” puis un point de sortie “close crosses under” génère 2100 net soit environ 41% par ans
3 → Maintenant la fonction MAGIC TREND avec une entrée en “close cross over” et une sortie en “close cross under” génère 2200 net soit environ 41% par ans, ce qui est déjà meilleur que le passif et un peu mieux que le SMA utilisant des paramètres d’entrées et sortie identiques
4 → On peut donc en conclure qu’en remplaçant le point de sortie de la MAGIC TREND par un %LOSS 1% / PROFIT% 1% nous pourrions nettement améliorer la fonction MAGIC TREND
DE PLUS avec un TRAINLING permettant de mettre à jour notre %LOSS et notre %PROFIT pour qu’il suive les tendances à la hausse, nous pourrions encore nettement améliorer nos performances générales
PB : Comment coder la fonction trailing sur sur STOP % LOSS et un STOP %PROFIT ?
J’ai remarqué dans les fonctions de base de PRT une fonction “SET STOP %TRAILING”
En l’intégrant à la fonction MAGIC j’ai obtenu 4350 net soit 77% par ans (quasiment autant qu’avec la fonction SMA avec les limites 1% de sortie) avec la formule suivante :
// --- settings
SignalPeriod = 12
ArrowPeriod = 2
// --- end of settings
bbup = average[signalperiod]+std[signalperiod]*arrowperiod
bbdn = average[signalperiod]-std[signalperiod]*arrowperiod
if ts=0 then
if close crosses over bbup then
ts=bbdn
trend=1
elsif close crosses under bbdn then
ts=bbup
trend=-1
endif
endif
if trend=1 then
ts=max(ts,bbdn)
elsif trend=-1 then
ts=min(ts,bbup)
endif
if ts then
if close crosses under ts then
trend=-1
ts=bbup
ENDIF
endif
if close crosses over ts then
trend=1
ts=bbdn
if not onmarket THEN
buy 10 share AT MARKET
ELSE
SET STOP %TRAILING 1
ENDIF
endif
// Correspond à une adaptation pour améliorer les performances sur des périodes de hausse où le trailing stop aurait coupé trop tôt la position
IF not onmarket THEN
IF close>ts AND close/ts>close[1]/ts[1] AND close[1]/ts[1]>close[2]/ts[2] THEN
BUY 10 SHARE AT MARKET
ELSE
SET STOP %TRAILING 1
ENDIF
ENDIF
graphonprice ts
Je suis toutefois convaincu qu’avec la fonction MAGIC on peut parvenir à des résultats supérieurs à une simple fonction SMA
Des suggestions d’optimisation ?
Le mieux est l’ennemi du bien 🙂
Voir ma réponse sur mon autre sujet et les effets de la sur-optimisation. Bon courage pour cette aventure !
Bonjour Nicolas,
Merci de ta réponse, en effet parfois à vouloir mettre trop d’indicateur on n’y voit plus rien et oublions l’essentiel, pas évident de trouver le bon cocktail des 20/80,
J’ai fais pas mal d’essais depuis deux semaines je commence à trouver certains points qui me semblent clés pour une bonne stratégie :
1-Réactivité maximale→ Agir dans la seconde, tout en prenant sa décision sur une échelle bien supérieure (minute, heure, jour) pour jouer sur de plus grandes amplitudes et réduire les frais de courtage, tout en angmentant les marges de manoeuvre
2-Amplitude minimale→ Utiliser des grilles de lignes écartées de x pourcent ou un index pour mesurer l’amplitude du mouvement en permanence et ne déclencher un signal que si l’amplitude est suffisante,
3-Définition des tendances→ Définir des tendances selon les variations des amplitudes highest et lowest pour définir des comportements différents : à la hausse(rester), à la baisse (sortie), sur des tendances neutres ou de grande amplitude
4 Choix de son/ses indicateurs→ Transformer sa propre lecture de cours en stratégie en utilisant des indicateurs pour isoler les zones d’actions et constantes identifiées (EX SMA/HULL pour les oscillations du cours)
5-Programmation d’un comportement→ en fonction des tendances
6-Déclenchement des maximum→ En utilisant un index ou une courbe des highest/lowest pour gérer l’achat/vente en tenant compte des tendances définies
7-Anticipation des revirements→ Calculer les variations de courbes pour anticiper les changements de direction avec des ratios X/X[1] pour déclencher des actions juste avant les pics.
Pour moi une bonne stratégie doit rassembler au moins ces différents aspects, j’essaie de trouver la bonne manière de les réunir.
Il y a aussi l’IA qui peut être utilisée à l’aide de variables, mais les résultats sont très variés, d’ailleurs c’est trompeur, car en utilisant le logiciel prorealtime du site officiel j’ai obtenu des résultats “parfaits” qui ne variaient jamais et représentaient “le meilleur scénario possible”, en utilisant le prorealtime intégré à Saxo j’ai commencé pour la première fois à avoir des résultats qui variaient pour sur le même cours, avec les même paramètres, sur la même échelle de temps. De façon à me faire comprendre que le comportement de l’IA si on lui laisse beaucoup de marge est tout de même variable et sujet à l’erreur.
Utilises tu l’IA dans tes stratégies, est-elle fiable dans le réel ?
J’ai d’ailleurs vu qu’en ajoutant l’IA dans le choix de périodes :
// --- settings
SignalPeriod = Variable1 [1,5,1]
ArrowPeriod = 2
// --- end of settings
bbup = average[signalperiod]+std[variable2[12-16,1]]*arrowperiod
bbdn = average[signalperiod]-std[variable3 [14-18-1]]*arrowperiod
On obtenait de super bon résultats
Et en utilisant également l’IA pour gérer des positions %loss et %profit on obtenait encore de meilleurs résultats, meilleurs encore que ceux des trailing stop, mais plus sujets à l’erreur que le trailing en cas de cours peu haussiers et très fluctuants
Pour les variables des limites
//Variables :
//P1 = 1/5/1 (En variable
//P2= 12/16/1, P3=14/18/1, P4=2 (fixe)
//StopPercent = 0.5/2.5/0.5
//ProfitLossRatio = 2/6/1
//Paramètres
MTUP = average[P1]+std[P2]*P4
MTDN = average[P1]-std[P3]*P4
if MT=0 then
if open crosses over MTUP then
MT=MTDN
trend=1
elsif open crosses under MTDN then
MT=MTUP
trend=-1
endif
endif
if MT then
if open crosses under MT then
trend=-1
MT=MTUP
elsif open crosses over MT THEN
trend=1
MT=MTDN
ENDIF
endif
if trend=1 then
MT=max(MT,MTDN)
elsif trend=-1 then
MT=min(MT,MTUP)
endif
//Entrées + Sorties
IF NOT ONMARKET tHEN
IF open crosses over MT OR open>MT AND open/MT>open[1]/MT[1] AND open[1]/MT[1]>open[2]/MT[2] THEN
BUY 10 SHARES AT MARKET
ELSE
SET STOP %LOSS StopPercent
SET Target %PROFIT StopPercent*ProfitLossRatio
ENDIF
ENDIF
//Graphique
graphonprice MT
Avec cette version “Magic %limite auto” Pour l’instant sur des cours comme Nvidia j’arrive à dépasser le simple positionnement passif, sur des cours comme S&P500 cela dit, pourtant haussiers, je génère beaucoup de négatif, parfois l’IA ne gère pas du tout les variations trop soudaines, et dans ce cas le trailing stop est beaucoup plus fiable et me permet de rester neutre tandis qu’en passif j’aurais été gagnant
// --- settings
// Les variables sont identiques à la version des %loss %profit
//le nom des variables est un peu différent dans cet exemple je ne les ai pas renommées
SignalPeriod = P1
ArrowPeriod = 2
// --- end of settings
bbup = average[P1]+std[P2]*arrowperiod
bbdn = average[P1]-std[P3]*arrowperiod
if ts=0 then
if open crosses over bbup then
ts=bbdn
trend=1
elsif open crosses under bbdn then
ts=bbup
trend=-1
endif
endif
if trend=1 then
ts=max(ts,bbdn)
elsif trend=-1 then
ts=min(ts,bbup)
endif
if ts then
if open crosses under ts then
trend=-1
ts=bbup
ENDIF
endif
if open crosses over ts then
trend=1
ts=bbdn
if not onmarket THEN
buy 10 share AT MARKET
ELSE
SET STOP %TRAILING StopPercent
ENDIF
endif
IF not onmarket THEN
IF open>ts AND open/ts>open[1]/ts[1] AND open[1]/ts[1]>open[2]/ts[2] THEN
EXITSHORT at market
BUY 10 SHARE AT MARKET
ELSE
SET STOP %TRAILING StopPercent
ENDIF
ENDIF
graphonprice ts
→SMA CROSS
SMA=Average[Periods](close)
IF NOT ONMARKET THEN
IF open crosses over SMA THEN
BUY 10 share AT MARKET
ENDIF
ENDIF
if onmarket THEN
if open crosses under SMA THEN
sell 10 share at market
ENDIF
ENDIF
GRAPHONPRICE SMA
Avec cette version “Magic tailing auto” j’arrive à être aussi rentable que le passif sur Nvidia qui explose, et j’arrive à ne pas être négatif sur P&S500 qui fluctue de manière imprévisible et avec des signaux faibles
Voilà, je ne sais pas si vous aussi avez réussi à améliorer la méthode pour en faire profiter la communauté, ce n’est pas évident au début quand on se lance, ces courbes sont des vraies énigmes à résoudre ^^
Au plaisir de vous lire et de d’échanger
P.S : By the way, je n’ai pas vu cette stratégie dans la Library, nous pourrions peut être l’ajoutée si tu es d’accord, puisque tu en es le créateur, je trouve que c’est une stratégie qui est très fiable couplée avec un trailing stop, pour moi elle est opérationnelle, même si ce n’est pour l’instant qu’une tendance gérée par l’IA et qu’on pourrait y ajouter beaucoup de niveaux d’analyse pour la rendre plus efficace.
J’ai oublié d’ajouté ceci à la fin de mon code, je pense que c’est indispensable de mettre un parachute de maximum 10% du capital investi
// PARACHUTE
IF STRATEGYPROFIT+POSITIONPERF<-open THEN
QUIT
ENDIF
Ici j’ai mis <-open car je demande à mon bot de n’investir que 10 actions, donc open = le prix d’une action.
Il faudrait adapter si on utilise la méthode en mettant <=open*(Nombre d’action/10)
Merci pour tes retours et le code de la stratégie, on peut en effet l’ajouter à la library, cela éveillera sans doute la curiosité et l’intérêt des visiteurs 😉
IF STRATEGYPROFIT+POSITIONPERF<–open THEN
Bonjour Nicolas et Robertogozzi,
En effet c’est une belle stratégie je trouve, elle a du potentiel, et avec le parachute on se couvre contre les pire scénarios, soit ça fonctionne soit ça s’arrête, en cela je pense qu’elle est une version que l’on peut mettre dans la library
Je réactualise le code en entier car dans le précédent j’avais ajouté un deuxième code qui n’avait rien à faire ici par erreur. J’ai donc ajouté le parachute également pour limiter les pertes possibles.
Voici la version MAGIC TREND (optimisée) simple croisement (donc sans IA pour gérer les moments de vente et d’achat via trailing stop ou %stop), le “trailing stop” est placé au niveau du système en lui-même via le parachute qui arrête la fonction si on perd plus que la somme programmée (je recommande 10% du capital initial investi, vous n’avez qu’à saisir ce montant au niveau de la variable “Capitalinitial”, vous pouvez aussi ajuster le ratio 10% en adaptant le *0.10 du parachute)
// VARIABLES
//P1 = 1/12/1, Z= 0/1/1
//P2= 10/16/1, P3=14/20/1, P4= 1.9/2.1/0.05
//StopPercent = 0.5/2.5/0.5
//ProfitLossRatio = 2/6/1
// INDICATEURS
// À METTRE À JOUR : N nombre d'action à investir, T = ratio de perte maximum
N= 10
T= 10/100
NP= N*T
Parachute= -open*NP
bbup = average[P1]+std[P2]*P4
bbdn = average[P1]-std[P3]*P4
// EVENEMENTS
if ts=0 then
if close crosses over bbup then
ts=bbdn
trend=1
elsif close crosses under bbdn then
ts=bbup
trend=-1
endif
endif
if trend=1 then
ts=max(ts,bbdn)
elsif trend=-1 then
ts=min(ts,bbup)
endif
// ACTIONS
if close crosses over ts then
trend=1
ts=bbdn
if not onmarket THEN
BUY N share AT MARKET
ENDIF
endif
if ts then
if close crosses under ts then
trend=-1
ts=bbup
elsif open crosses under ts AND open<open[1] then
if onmarket then
SELL AT MARKET
ENDIF
Endif
endif
IF not onmarket THEN
IF open>ts*Z AND open/ts>open[1]/ts[1] AND open[1]/ts[1]>open[2]/ts[2] THEN
ELSIF not onmarket THEN
BUY Achatmax SHARE AT MARKET
ENDIF
ENDIF
// PARACHUTE
IF STRATEGYPROFIT+POSITIONPERF<parachute THEN
QUIT
ENDIF
// GRAPHIQUE
graphonprice ts
Je partage également la version (optimisée) simple SMA simple croisement (sans IA pour gérer des variables %Stop ou %trailing) car pour l’instant elle est la fonction avec le plus de potentiel et le plus fiable que j’ai pu manié
// VARIABLES
// X=0.8/1.2/0.05, Y=0.8/1.2/0.05, varP1= 1/72/1
// PARAMETRES
// À AJUSTER : Capitalinitial= Capital max à investir, T= ratio de perte maximale autorisée
Capitalinitial =2000
T=10/100
Achatmax = Capitalinitial/open
Parachute = -Capitalinitial*T
SMA1=Average[varP1](open)
// ACTIONS
IF NOT LONGONMARKET THEN
IF open CROSSES over SMA*X THEN
BUY 10 shares AT MARKET
ENDIF
ENDIF
IF LONGONMARKET THEN
IF open crosses under SMA*Y THEN
SELL 10 shares at market
ENDIF
ENDIF
// PARACHUTE
IF STRATEGYPROFIT+POSITIONPERF<Parachute THEN
QUIT
ENDIF
// GRAPHIQUE
GRAPHONPRICE SMA
Dans ces exemples ci dessus j’ai mis un parachute avec un montant précis de capital initial ou d’action que l’on souhaite auquel on applique ensuite le ratio que l’on souhaite ici 10/100 donc 10%, en rendant la valeur négative on a notre parachute.
Je pense que cela répondra a ta question Robertogozzi pour l’utilisation du parachute, il suffirait de saisir un nombre d’actions précises max que le système peut acheter, avec un “IF NOT ONMARKET THEN BUY 10 share at market”, ce sera toujours 10*open quel que soit le moment, et le parachute peut être utilisé avec le montant “-open” en utilisant un ratio par rapport à la mise initiale : dans ce cas de figure j’investi 10 actions, je sort à -1 donc à -10%. De mon côté tout a fonctionné correctement, je perdrais soit rien (grâce au gain d’actualisation du prix de mon action), soit 10%
Effectivement quand j’essaie d’afficher via graphonprice les valeurs STRATEGYPROFIT et POSITIONPERF je n’ai rien
Quand j’affiche STRATEGYPROFIT+POSITIONPERF j’obtiens des valeurs étranges du type -2,6 puis avant de s’activer cela passe bien à des valeurs négatives jusqu’à atteindre “-open”
Ma stratégie se coupe bien au bon moment de manière à ce que je n’ai pas de pertes ou bien à 10% (voir le screen joint)
Bonjour à Tous,
Trading automatique avec “Buy Sell Magical Trend”
This topic contains 71 replies,
has 17 voices, and was last updated by Dams3164
1 year, 8 months ago.
| Forum: | ProOrder : Trading Automatique & Backtests |
| Language: | French |
| Started: | 04/25/2023 |
| Status: | Active |
| Attachments: | 11 files |
The information collected on this form is stored in a computer file by ProRealCode to create and access your ProRealCode profile. This data is kept in a secure database for the duration of the member's membership. They will be kept as long as you use our services and will be automatically deleted after 3 years of inactivity. Your personal data is used to create your private profile on ProRealCode. This data is maintained by SAS ProRealCode, 407 rue Freycinet, 59151 Arleux, France. If you subscribe to our newsletters, your email address is provided to our service provider "MailChimp" located in the United States, with whom we have signed a confidentiality agreement. This company is also compliant with the EU/Swiss Privacy Shield, and the GDPR. For any request for correction or deletion concerning your data, you can directly contact the ProRealCode team by email at privacy@prorealcode.com If you would like to lodge a complaint regarding the use of your personal data, you can contact your data protection supervisory authority.