ProRealCode - Trading & Coding with ProRealTime™
Bonjour PLBourse, quel travail tu as fait là, impressionnant et passionnant…
De mon coté je n’ai pas une approche aussi rigoureuse que la tienne, mais avec les differentes strategies que j’ai teste via BackTest j’ai remarque que celles ci profitent bien des belles tendances établies et protègent bien des retournements baissiers, par contre ces memes strategies fonctionnent tres mal sur des titres en Range ou l’on multiplie les debuts de zone de Force qui retombent rapidement, meme en utilisant des gardes fous type zone de force dans les UT supérieur, Metascore>80, pas trader en dessous de MM200, etc.. c’est délicat, car si on rajoute trop de conditions strictes alors on finit par rater aussi les bonnes tendances qui finissent par partir…
Avec ces strategies j’ai remarque que le temps sur le marche est assez faible car on prend que les belles tendances, j’ai remarque aussi que la performance daily n’avait en moyenne rien d’exceptionnel, pour booster la performance annuelle je me suis dit qu’il fallait descendre les UT, j’ai teste en 1H, mais c là que je me suis confronte aux faux signaux, aux zones de range plus nombreuses, etc… J’ai donc adapte la stratégie en essayant d’être tres sélectif et à ce jour ce qui fonctionne le mieux pour moi mais qui doit être davantage teste et de façon plus rigoureuse, est :
Conditions d’entree :
1/ le titre est en zone de force dans son UT ( pas spécialement en debut de zone ou a la cassure de Res dynamique, pour pouvoir rerentrer sur une belle tendance si on c’est fait sortir bêtement)
2/ Close > MM200 de l’UT supérieur principale (4h pour trade en 1h) Ca reste a prouver l’utilité de ca…
3/ Close > MM7 dans l’UT du trade
Si les conditions sont réunies, l’entree se fait en pyramidant avec pose de stop a 1,5 ATR pour une premiere 1/2 position calculée sur l’ATR comme ce que propose Christophe, puis un premier renforcement d’une autre 1/2 position si close> a 4 ATR par rapport au cours d’entree avec conditions de tjrs être en zone de force et d’avoir une bougie verte avec volume au moins 30% > a la MM20 (volume). Je renforce une 3eme fois d’ 1/3 position si une resistance dynamique est cassée pendant le Trade.
Pas de prises de profit partiel, je trouvais que ca entamais trop la performance.
Pour la sortie, j’ai fait en 1 fois, c du trendFollowing, avec Stop suiveur base sur la stratégie des tortues stop base sur 3 ATR qui monte graduellement a chaque plus bas.
Tout ca est encore tout frais, ca demande plus de backtest, ca demande certainement des ajustements, des ameliorations, (je débute en code) mais les résultats sont encourageants la perf annuelle sur bcp de titres est pas mal, beaucoup plus qu’en Daily il me semble. Seule ombre au tableau mais tres importante est pour les titres en Range légèrement baissiers qui m’ont amené a des perf catastrophiques.
L’idée derriere est pourquoi pas faire tourner ces stratégies en Trading automatiques sur un panier de quelques actions en les sélectionnant soigneusement sur des périodes ou les indices référants sont avec nous afin d’éviter les fameux range légèrement baissiers, mais pas facile car le passé ne presume pas de l’avenir…
Je serai heureux de partager avec toi & Hienalpha ces reflexions et les différents codes.
Cordialement.
Bonjour Gilles
Pourrais-tu partager ton stop?
Celui qui était sur ton graphique
Il a l’air intéressant
Et pour éviter les range peut-être qu’en utilisant un timeframe supérieur ça exclurait ces trades
Merci
Arnaud
Salut Arnaud, oui biensur je vais meme partager tout le code pour voir ensemble ce qui peut être amélioré. Bonne journée.
DEFPARAM CumulateOrders=True
capitalinitial=10000
risque=5
profitfactor=6
stopfactor=1.5
renforcement1=1
renforcement2=1
renforcementfactor=4
ratchetfactor=7
META=80
Sortie=2
p=20
TIMEFRAME (4 HOURS)
MM200=average[200]
TIMEFRAME (1HOUR)
//APPEL VALEUR EXTRATREND
myTrend, ignored, ignored, myReDyn, ignored = CALL "ExtraTrend"[0,1,0,0,0](close)
// Tendance ExtraTrend
if myTrend>myTrend[1] then
tendance=1
endif
if myTrendmyReDyn[1] and close>myReDyn[1] THEN
Cassure=1
else
cassure=0
endif
// score Metascore
myScore, ignored, ignored = CALL "MetaScore"[META, 0, 0](close)
IF myScore > META THEN
INDIC=1
ELSE
INDIC=0
ENDIF
//GROS VOLUMES
MM20V = average[20] (volume)
If volume > (MM20V+(MM20V*0.6)) AND OPENMM7 THEN
CTOK=1
ELSE
CTOK=0
ENDIF
//PRISE DE POSITION
if tendance and INDIC=1 and close>MM200 and CTOK=1 and not longonmarket THEN
positionsize=round(((capitalinitial)*(risque/100))/(stopfactor*averagetruerange[20]))
BUY positionsize/2 shares AT MARKET
set stop loss stopfactor*averagetruerange[20]
flag=0
renf=0
endif
// RENFORCEMENT 1
if longonmarket and close>=myTrend+renforcementfactor*averagetruerange[20] and OKVOL=1 and flag=0 and renforcement1=1 then
buy round(positionsize/2) shares at market
flag=1
endif
//RENFORCEMENT 2
if longonmarket and indic=1 and renf=0 and OKVOL=1 and cassure=1 and renforcement2=1 THEN
buy round(positionsize/3) shares at market
renf=1
endif
//SORTIE DE POSITION 1
if sortie=1 and longonmarket and close ATRts THEN
ATRnew = close - ATRx
IF ATRnew > ATRts THEN
ATRts = ATRnew
ENDIF
ELSIF close < ATRts THEN
ATRnew = close + ATRx
IF ATRnew < ATRts THEN
ATRts = ATRnew
ENDIF
ENDIF
//SORTIE DE POSITION 2
if sortie=2 and longonmarket and close
Je l’ai codé sous forme d’indicateur également :
//periode
p =20
// ATRx
ATRx = AverageTrueRange[p](close) * 3
//ATRs = ATR Trailing Stop ou Stop Tortues
IF close crosses over ATRts THEN
ATRts = close - ATRx
ELSIF close crosses under ATRts THEN
ATRts = close + ATRx
ENDIF
// Clalcul del'ATRts lors de la meme tendance
IF close > ATRts THEN
ATRnew = close - ATRx
IF ATRnew > ATRts THEN
ATRts = ATRnew
ENDIF
ELSIF close < ATRts THEN
ATRnew = close + ATRx
IF ATRnew < ATRts THEN
ATRts = ATRnew
ENDIF
ENDIF
return ATRts as "Stop Totue"
Merci Gilles !
J’essaye de corriger ton code (ou de proposer des améliorations)ce soir
Tu as la première version d’extratrend
Donc tu n’as pas fait la mise à jour, il y a 6 chiffres entre parenthèses dans la nouvelle version
Merci pour tes commentaires. Cela me suscite des reactions
Je travaille actuellement différents modèles de Money Management, dans la ligne de certaines propositions de Christophe et ensuite j’essaierai le pyramidage… IL faut à mon sens limiter les tailles de position pour permettre de sécuriser du capital pour pyramider.
Un beau challenge pour de la gestion de portefeuille, mais je vais regarder. Merci pour les codes
Bonsoir Gilles
il y a une file dédiée pour les backtest et systèmes Extratrend…mais je te répond là
J’ai fait 2-3 modif
ATTENTION je l’ai remis en version Extratrend d’aujourd’hui ! pour toi il faut enlever un ,0 dans le call de l’indicateur
Nouvelle version Extratrend = CALL “ExtraTrend”[0,1,0,0,0,0](close)//POUR ANCIENNE VERSION EXTRATREND le CALL est =”CALL “ExtraTrend”[0,1,0,0,0](close)”
Tu avais mis le risque à 5 !!! donc 5% et c’est juste inconcevable…
J’ai mis la MM800 au lieu d’une MM200 en timeframe 4 heures
J’ai changé ton mytrend[1]<>MyRedyn[1]
Si myReDyn=myTrend donc la résistance dynamique est confondue au trend
Regarde en 1 heure comme tu le désirais
je pense que tu peux l’améliorer encore…
bonne soirée
Arnaud
je poste le code à la suite après…
RETIRE ton histoire de cassure=1…tu y verras plus clair…
// Code originel TrendFrance Christophe transformé par gillespetitbali
// Proposition d'amélioration ou modification Penser@ Arnaud
DEFPARAM CumulateOrders=True
capitalinitial=10000
risque=0.5//ATTENTION AU RISQUE !!! Tu avais mis 5 donc 5% ce qui est énorme et tu coules ton compte direct ! Tout le monde recommande 0.5% ce qui fait 50 euros pour un compte à 10000. 1% MAXIMUM
profitfactor=6
stopfactor=1.5
renforcement1=1
renforcement2=1
renforcementfactor=4
ratchetfactor=7
META=80
Sortie=2
p=20
//AVERAGE 800 = AVERAGE 200*4 heures pour éviter un appel au timeframe...
MM800 = average[800]
//APPEL VALEUR EXTRATREND
myTrend, ignored, ignored, myReDyn, ignored = CALL "ExtraTrend"[0,1,0,0,0,0](close)//POUR ANCIENNE VERSION EXTRATREND remplacer le CALL => "CALL "ExtraTrend"[0,1,0,0,0](close)"
// Tendance ExtraTrend
if myTrend>myTrend[1] and myReDyn=mytrend then
tendance=1
endif
if myTrend<>myReDyn then//SI MyReDyn=Mytrend cela veut dire que la bougie est au dessus de myTrend => Retient bien que La Résistance Dynamique (myRedyn) est confondue avec Mytrend lorsque le trend est en tendance bleue et que la résistance dynamique n'est plus affichée...donc dès que Myresdyn s'affiche s'est quelle est différente du trend...
tendance=0
endif
//CASSURE RES DYN
If myTrend<>myReDyn and close>myReDyn THEN
//Retient bien que La Résistance Dynamique (myRedyn) est confondue avec Mytrend lorsque le trend est en tendance bleue et que la résistance dynamique n'est plus affichée...donc dès que Myresdyn s'affiche s'est quelle est différente du trend
Cassure=1
else
cassure=0
endif
// score Metascore
myScore, ignored, ignored = CALL "MetaScore"[META, 0, 0](close)
IF myScore > META THEN
INDIC=1
ELSE
INDIC=0
ENDIF
//GROS VOLUMES
MM20V = average[20] (volume)
If volume > (MM20V+(MM20V*0.6)) AND OPEN<close THEN
OKVOL=1
ELSE
OKVOL=0
ENDIF
//DEFINITION COURT TERME OK
MM7 = average[7]
IF CLOSE>MM7 THEN
CTOK=1
ELSE
CTOK=0
ENDIF
//PRISE DE POSITION
if tendance and INDIC=1 and close>MM800 and CTOK=1 and not longonmarket THEN
positionsize=round(((capitalinitial)*(risque/100))/(stopfactor*averagetruerange[20]))
BUY positionsize/2 shares AT MARKET
set stop loss stopfactor*averagetruerange[20]
flag=0
renf=0
endif
// RENFORCEMENT 1
if longonmarket and close>=myTrend+renforcementfactor*averagetruerange[20] and OKVOL=1 and flag=0 and renforcement1=1 then
buy round(positionsize/2) shares at market
flag=1
endif
//RENFORCEMENT 2
if longonmarket and indic=1 and renf=0 and OKVOL=1 and cassure = 1 and renforcement2=1 THEN
buy round(positionsize/3) shares at market
renf=1
endif
//SORTIE DE POSITION 1
if sortie=1 and longonmarket and close<lowest[30](highest[55](high)-ratchetfactor*averagetruerange[20])then
sell at market
endif
// CALCUL STOP TORTUE (ATRx)
ATRx = AverageTrueRange[p](close) * 3
//ATRs = ATR Trailing Stop ou Stop Tortues
IF close crosses over ATRts THEN
ATRts = close - ATRx
ELSIF close crosses under ATRts THEN
ATRts = close + ATRx
ENDIF
// Clalcul del'ATRts lors de la meme tendance
IF close > ATRts THEN
ATRnew = close - ATRx
IF ATRnew > ATRts THEN
ATRts = ATRnew
ENDIF
ELSIF close < ATRts THEN
ATRnew = close + ATRx
IF ATRnew < ATRts THEN
ATRts = ATRnew
ENDIF
ENDIF
//SORTIE DE POSITION 2
if sortie=2 and longonmarket and close<atrts then
SELL AT MARKET
endif
SANS LA CASSURE=1
// Code originel TrendFrance Christophe transformé par gillespetitbali
// Proposition d'amélioration ou modification Penser@ Arnaud
DEFPARAM CumulateOrders=True
capitalinitial=10000
risque=0.5//ATTENTION AU RISQUE !!! Tu avais mis 5 donc 5% ce qui est énorme et tu coules ton compte direct ! Tout le monde recommande 0.5% ce qui fait 50 euros pour un compte à 10000. 1% MAXIMUM
profitfactor=6
stopfactor=1.5
renforcement1=1
renforcement2=1
renforcementfactor=4
ratchetfactor=7
META=80
Sortie=2
p=20
//AVERAGE 800 = AVERAGE 200*4 heures pour éviter un appel au timeframe...
MM800 = average[800]
//APPEL VALEUR EXTRATREND
myTrend, ignored, ignored, myReDyn, ignored = CALL "ExtraTrend"[0,1,0,0,0,0](close)//POUR ANCIENNE VERSION EXTRATREND remplacer le CALL => "CALL "ExtraTrend"[0,1,0,0,0](close)"
// Tendance ExtraTrend
if myTrend>myTrend[1] and myReDyn=mytrend then
tendance=1
endif
if myTrend<>myReDyn then//SI MyReDyn=Mytrend cela veut dire que la bougie est au dessus de myTrend => Retient bien que La Résistance Dynamique (myRedyn) est confondue avec Mytrend lorsque le trend est en tendance bleue et que la résistance dynamique n'est plus affichée...donc dès que Myresdyn s'affiche s'est quelle est différente du trend...
tendance=0
endif
//CASSURE RES DYN
//If myTrend<>myReDyn and close>myReDyn THEN
//Retient bien que La Résistance Dynamique (myRedyn) est confondue avec Mytrend lorsque le trend est en tendance bleue et que la résistance dynamique n'est plus affichée...donc dès que Myresdyn s'affiche s'est quelle est différente du trend
//Cassure=1
//else
//cassure=0
//endif
// score Metascore
myScore, ignored, ignored = CALL "MetaScore"[META, 0, 0](close)
IF myScore > META THEN
INDIC=1
ELSE
INDIC=0
ENDIF
//GROS VOLUMES
MM20V = average[20] (volume)
If volume > (MM20V+(MM20V*0.6)) AND OPEN<close THEN
OKVOL=1
ELSE
OKVOL=0
ENDIF
//DEFINITION COURT TERME OK
MM7 = average[7]
IF CLOSE>MM7 THEN
CTOK=1
ELSE
CTOK=0
ENDIF
//PRISE DE POSITION
if tendance and INDIC=1 and close>MM800 and CTOK=1 and not longonmarket THEN
positionsize=round(((capitalinitial)*(risque/100))/(stopfactor*averagetruerange[20]))
BUY positionsize/2 shares AT MARKET
set stop loss stopfactor*averagetruerange[20]
flag=0
renf=0
endif
// RENFORCEMENT 1
if longonmarket and close>=myTrend+renforcementfactor*averagetruerange[20] and OKVOL=1 and flag=0 and renforcement1=1 then
buy round(positionsize/2) shares at market
flag=1
endif
//RENFORCEMENT 2
if longonmarket and indic=1 and renf=0 and OKVOL=1 and renforcement2=1 THEN
buy round(positionsize/3) shares at market
renf=1
endif
//SORTIE DE POSITION 1
if sortie=1 and longonmarket and close<lowest[30](highest[55](high)-ratchetfactor*averagetruerange[20])then
sell at market
endif
// CALCUL STOP TORTUE (ATRx)
ATRx = AverageTrueRange[p](close) * 3
//ATRs = ATR Trailing Stop ou Stop Tortues
IF close crosses over ATRts THEN
ATRts = close - ATRx
ELSIF close crosses under ATRts THEN
ATRts = close + ATRx
ENDIF
// Clalcul del'ATRts lors de la meme tendance
IF close > ATRts THEN
ATRnew = close - ATRx
IF ATRnew > ATRts THEN
ATRts = ATRnew
ENDIF
ELSIF close < ATRts THEN
ATRnew = close + ATRx
IF ATRnew < ATRts THEN
ATRts = ATRnew
ENDIF
ENDIF
//SORTIE DE POSITION 2
if sortie=2 and longonmarket and close<atrts then
SELL AT MARKET
endif
Hello à tous,
Super Gilles ta stratégie.
J’aurai une question : quand tu renforces, où est placé ton stop loss du coup ?
Bonjour,
Je suis au tout début de la longue route du trading. Et donc évidemment sur l’utilisation de Extratrend et de la programmation sur ProRealTrade.
Je vais donc commencer par une question simple et malheureusement probablement déjà posée quelque part – mais je n’ai pas non plus encore compris comment faire les recherches sur ProRealCode. La voici :
Comment peut-on récupérer/afficher les valeurs des points bleus et rouges ? Je n’arrive pas à les visualiser dans ProRealTime.
Merci d’avance
Salutations
Acalgo
Bonjour,
Une fois Extratrend affiché sur le prix, il suffit de cliquer sur l’indicateur et aller dans configuration
puis tu coches Résistance dynamique et Résistance court terme
Alt color change la couleur du trend et trend following met le trend en trend following donc accepte beaucoup plus de baisse…et reste plus longtemps dans le marché
bon weekend
Arnaud
je t’ai mis les images d’écrans en attachées
cdt
Arnaud
Donc tu as également Metascore
Metascore s’affiche en dessous du prix, et la manipulation est la même pour régler le niveau souhaité
tu cliques sur la bannière metascore puis configuration et tu règles les niveaux ou le lissage souhaité
cdt
Arnaud
Bonjour Arnaud,
Merci pour ta réponse et la rapidité de celle-ci.
Je pense que je n’ai pas été assez précis dans ma question.
Je sais comment afficher les Résistance dynamique et Résistance court terme sur mon écran mais ce que je ne sais pas c’est afficher les valeurs de celles-ci. Pour le dire autrement quand je passe ma souris sur une date, j’ai des fenêtres qui s’ouvrent et qui m’indiquent des valeurs – mais pas celles de Résistance dynamique et Résistance court terme. De même si je voulais créer un screener et/ou réaliser une programmation personnalisée, comment puis-je récupérer ces valeurs de Résistance dynamique et Résistance court terme ?
Je viens de voir passer ton message sur Metascore et t’en remercie. Mais je pense comprendre qu’elle ne ferme pas ma question.
Cordialement
Acalgo
ExtraTrend – exemples de codage screeners et programmation personnalisee
This topic contains 515 replies,
has 2 voices, and was last updated by
Nicolas
5 days, 5 hours ago.
| Forum: | ProScreener : Scanners de Marché & Détection |
| Language: | French |
| Started: | 05/27/2021 |
| Status: | Active |
| Attachments: | 85 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.