AIDE SUR PROGRAMATION EN BACKTEST
Forums › ProRealTime forum Français › Support ProOrder › AIDE SUR PROGRAMATION EN BACKTEST
- This topic has 11 replies, 4 voices, and was last updated 1 year ago by GraHal.
-
-
07/27/2023 at 9:29 AM #218195
Bonjour,
j’ai crée un code de stratégie avec l’outil de PRT, puis j’ai pris la main dessus (pièce jointe). j’aimerai rajouter une variable à l’achat et la vente suivante.
Sur mon graphique 15m (time frame utilisé pour la stratégie), j’ai trois VWAP ( une en WEEKLY qui redémarre chaque début de semaine ; une en DAILY qui redémarre chaque début de Journée ; et une en DAILY GLISSANTE sans interruption).
Mon problème est que, si j’essai de les rajouter par l’outil de PRT qui a générer le code, les VWAP ne sont pas proposé dans la liste des indicateurs de mon graphique.
Mais si j’essai de les rajouter par l’outil Fx (insérer fonction) directement depuis le code, je ne les trouve pas comme indicateur ( la seule chose que j’ai trouvé, est ” VolumeAdjustedAverage[20](close)” mais du coup étant novice dans la programmation je ne sais si c’est, ce qui correspond au VWAP, et je ne sais pas comment le paramétrer?
J’ai mis le code en fichier texte en pj, car je ‘ai pas trouvé le bouton “Insert PRT Code”
Pouvez vous m’aider?
Merci et bonne journée.
07/27/2023 at 10:37 AM #218200Pour cela il va falloir utiliser un coder personnel pour les recalculer, il n’y a en effet aucune instruction à ce jour pour récupérer les valeurs des VWAP.
Par contre je ne comprends ce qu’est un VWAP “DAILY GLISSANTE sans interruption”? Pourrais tu partager un copie d’écran de l’indicateur stp ?
07/27/2023 at 10:54 AM #218201voici la capture d’écran et le code
Merci de ton aide.
code strategie vwap et indicateur DR_Pente123456789101112131415161718192021222324252627282930313233343536373839404142434445// Définition des paramètres du codeDEFPARAM CumulateOrders = False // Cumul des positions désactivé// Empêche le système de placer de nouveaux ordres sur les jours de la semaine spécifiésdaysForbiddenEntry = OpenDayOfWeek = 1 OR OpenDayOfWeek = 6 OR OpenDayOfWeek = 0// Conditions pour ouvrir une position acheteuseindicator1, ignored = CALL "DR_pente mm vente"[1, 20, 50]c1 = (indicator1 CROSSES OVER 13)//smableu n'améliore pas les perfs//smableu = Average[9](TotalPrice )//c1a = (close > smableu)IF c1 AND not daysForbiddenEntry THENBUY 1 SHARES AT MARKETENDIF// Conditions pour fermer une position acheteuseindicator2, ignored = CALL "DR_pente mm vente"[1, 20, 50]c2 = (indicator2 CROSSES UNDER -4)IF c2 THENSELL AT MARKETENDIF// Conditions pour ouvrir une position en vente à découvertindicator3, ignored = CALL "DR_pente mm vente"[1, 20, 50]c3 = (indicator3 CROSSES UNDER -14)// sma bleu améliore les perfs à la vente.smableu = Average[9](TotalPrice )c3a = (close < smableu)IF c3 and c3a AND not daysForbiddenEntry THENSELLSHORT 1 SHARES AT MARKETENDIF// Conditions pour fermer une position en vente à découvertindicator4, ignored = CALL "DR_pente mm vente"[1, 20, 50]c4 = (indicator4 CROSSES OVER -1)IF c4 THENEXITSHORT AT MARKETENDIF// Stops et objectifsSET STOP %LOSS 0.207/28/2023 at 9:15 AM #218241Quelques liens pour les codes des VWAP weekly, monthly qui pourrait t’aider:
https://www.prorealcode.com/prorealtime-indicators/vwap-weekly-monthly-yearly/
08/07/2023 at 9:22 AM #218670Bonjour,
voici le code modifié de ma stratégie. En probacktest, quand je lance le code, il fonctionne, sauf que:
Je ne sais pas comment faire pour lui indiquer que si une position à la vente ou à l’achat est en cours, il ne peut pas ouvrir une position inverse. il doit attendre que la position ouverte (peu importe à l’achat ou à la vente) soit clôturée pour en ouvrir une autre?
Merci beaucoup de votre aide.
Belle journée.
dr strategie backtest123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990// Définition des paramètres du codeDEFPARAM CumulateOrders = false // Cumul des positions désactivé// Jours de semainedaysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0//variablesmyAngle, mylevel0 = CALL "DR_pente mm vente"[7, 24, 21]myVWAPWEEK = CALL "DR_VWAP WEEKLY"myVWAP, myupper1STD, mylower1STD, myupper2STD, mylower2STD, myupper3STD, mylower3STD, myyesterdayVWAP = CALL "DR_VWAP Daily"myVWAPC = CALL "DR_VWAP Nbre Periodes"[60]myVWAPR = CALL "DR_VWAP Nbre Periodes"[17]difA = CALL "DR_Diff Achats"difV = CALL "DR_Diff Vente"////////smableu = Average[9](TotalPrice )smajaune = Average[20](TotalPrice )smarouge = Average[11](TotalPrice )smaviolette = Average[17](TotalPrice )/////////////////////////////////////////////////////////////////////////////////////////////////////////// ACHAT//Conditions d'entrée à l'achat 1if not daysForbiddenEntry thenif (myAngle <=72)and(close CROSSES OVER myVWAPC)and (smarouge <myVWAPC)and(smarouge < smaviolette )and(smaviolette < smajaune)and (difA <=0) thenBUY 1 SHARES AT MARKETendifA1=1elseA1=0endif//Conditions d'entrée à l'achat 2if not daysForbiddenEntry thenif (myAngle >=79)and(close CROSSES OVER myVWAPC )and(smaviolette > smajaune)and (difA >=0) thenBUY 1 SHARES AT MARKETendifA2=1elseA2=0endif//Conditions d'entrée à l'achat 3if not daysForbiddenEntry thenif (myAngle >=83)and(myVWAPWEEK>myVWAPC) and (myVWAPR>myVWAPWEEK)and (close CROSSES OVER myVWAPR )and(difA >=0) thenBUY 1 SHARES AT MARKETendifA3=1elseA3=0endif//// VENTE //////Conditions d'entrée à la vente 1if not daysForbiddenEntry thenif (myAngle >=77)and(close CROSSES under myVWAPWEEK )and (myVWAPWEEK > myVWAPC)and (smarouge>close)and (difv<=0) thenSELLSHORT 1 SHARES AT MARKETendifV1=1elseV1=0endif//Conditions d'entrée à la vente 2if not daysForbiddenEntry thenif (close CROSSES under myVWAPWEEK )and(myAngle <=-69)and (myVWAPWEEK > myVWAPC)and (smarouge>close)and (difv<-12) thenSELLSHORT 1 SHARES AT MARKETendifV2=1elseV2=0endif///// SORTIE /////// TAKE PROFITSET TARGET PROFIT 535// Stops et objectifsSET STOP %LOSS 0.208/07/2023 at 10:28 AM #218675L’instruction onmarket sera vraie si dans le marché et fausse sinon:
https://www.prorealcode.com/documentation/onmarket/
Afin d’obtenir: “si une position à la vente ou à l’achat est en cours, il ne peut pas ouvrir une position inverse“, tu peux par exemple l’utiliser en rajoutant à tes conditions d’entrée:
if not onmarket and …(les conditions que tu avais jusqu’ici)… then
…
endif
08/07/2023 at 1:44 PM #21868308/11/2023 at 9:13 AM #218927Strategie vwap123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116// Définition des paramètres du codeDEFPARAM CumulateOrders = false // Cumul des positions désactivé// Jours de semainedaysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0//variablesAngle, level0 = CALL "DR_pente mm vente"[1, 21, 49]VWAP = CALL "VWAP D"VWAPW = CALL "DR_VWAP WEEKLY"vwapy, vwapm, vwapc, vwapr, Difm, difY, difD, difC, DifR = CALL "DR_Diff vvapY/M/C/D/R_Réf Week"[2000, 400, 40, 10]ema= ExponentialAverage[26](difm)/////////smableu = Average[9](TotalPrice )smajaune = Average[50](TotalPrice )smarouge = Average[11](TotalPrice )smaviolette = Average[16](TotalPrice )/////////////////////////////////////////////////////////////////////////////////////////////////////////// ACHATif not daysForbiddenEntry thenendifif not SHORTONMARKET thenendif //pas en position inverseif (vwapm>vwapy)and (close>vwapy) or (vwapm>vwapy)and (close<vwapm)and (close>vwapy) and(vwapm-close>110) then//Conditions d'entrée à l'achat 1 // Prix est sous Mif (close<vwapm)and(angle>-90)and (angle<5)and (difc-difr>32)and (difm >difm[15])and (difm-difd>127)and(difc>difr)and (difc-difr>38)and (difr-difd<37)and (difd>-60)and (difd<=1)and (close CROSSES OVER vwapr )thenBUY 1 SHARES AT MARKETendif//Conditions d'entrée à l'achat 2 // Le prix est sur Mif (close>vwapm)and(angle>-78)and (angle<-25)and (difm<difc)and (difm <difm[62])and (difc<17)and (difm<-78)and(difc>difr)and (difc-difr>21)and (difr-difd<5)and (difd<15)and (close CROSSES OVER vwapr )thenBUY 1 SHARES AT MARKETendif//Conditions d'entrée à l'achat 3 // le prix est sous M et sous Y. on attend le croisement de M.if (close<vwapm)and(angle>40)and (angle<90)and (close CROSSES OVER vwapy)and(close>vwap)and (vwap>vwapr)and (vwapr>vwapw)and (difc<difr)thenBUY 1 SHARES AT MARKETendifendif//////////////////////////////////////////////////////////////////////////////////////////////////////////////VENTE contre tendance. On prendra uniquement sur W eloigné de X points par rapport à Mif not daysForbiddenEntry thenendifif not LONGONMARKET thenendif //pas en position inverseif (vwapm>vwapy)and (close>vwapm) and (vwapw-vwapm>190) thenendif//Conditions d'entrée à la vente en CTDA // Le prix est éloigné de M de 200 pointsif(angle>48)and (angle<80)and (difm<difc)and (difm < difm[20])and (difm<-150)and (difc<-70)and(difc<difr)and (difr-difd<2)and (difr<1)and (close CROSSES under vwapr )thenSELLSHORT 1 CONTRACTS AT MARKETendif// Stops et objectifs//VARIABLES STOPtrailingstart= 56trailingstart3= 195trailbe = 1trailingsl3=158////reset the stoploss valueIF NOT ONMARKET THENsl=0ENDIF//// Positions achats////manage long positionsIF LONGONMARKET THEN//BEIF sl=0 AND close-tradeprice(1)>=trailingstart*pipsize THENsl = tradeprice(1)+trailbe*pipsizeENDIF// NIVEAU 1 SLIF sl>0 and close-sl>=trailingstart3*pipsize thensl = sl+trailingsl3 *pipsizeENDIFendif///// STOP VENTE /////////reset the stoploss valueIF NOT ONMARKET THENsl=0ENDIF//// Positions Vente////manage short positionsIF SHORTONMARKET THEN//BEIF sl=0 AND tradeprice(1)-close>=trailingstart*pipsize THENsl = tradeprice(1)-trailbe*pipsizeENDIF// NIVEAU 1 SLIF sl>0 and sl-close>=trailingstart3*pipsize thensl = sl-trailingsl3 *pipsizeENDIFendif////stop order to exit the positionsIF sl>0 THENsell at sl stopEXITSHORT AT sl STOPENDIF// Stops et objectifsSET STOP %LOSS 0.41// TAKE PROFITSET TARGET PROFIT 365Bonjour
je reviens vers vous avec ce code, ou je n arrive pas a lui dire que (mes conditions):
Si je suis en position en Long, MAIS que les conditions d’entrée en Short arrivent et sont respectées, qu’il coupe la position Long, et entre en position Short!
ET INVERSEMENT !
j’ai essayé plein de trucs mais je suis débutant et je n’y arrive pas.
Merci de votre aide et bonne journée.
08/16/2023 at 10:16 AM #21916208/16/2023 at 10:27 AM #219166Si je suis en position Long, MAIS les conditions pour entrer en Short arrivent et sont remplies, il coupe la position Long, et entre en position Short !
Ci-dessus, le comportement normal, nous ne pouvons pas être à la fois Long et Short en même temps avec AutoTrading.
08/16/2023 at 10:39 AM #219171Merci.
Mais je me suis peut être mal exprimé.
Admettons qu’autotrading a ouvert une position LONG, et qu’AVANT d’arriver au SL ou TP, qu’une des conditions pour entrer en SHORT se présente. J’aimerai qu’il coupe la position en cours LONG, et qu’il ouvre la nouvelle en SHORT.
Et inversement.
Merci.08/17/2023 at 6:02 PM #21925812345678910111213DEFPARAM CumulerCommandes = falseSi BuyCond AlorsACHETER positionsize ACTIONS AU MARCHÉSET STOP % PERTE 0.2SET TARGET % PROFIT 0.4ENDIFSi SellShortCond ThenSELLSHORT positionsize ACTIONS AU MARCHÉSET STOP % PERTE 0.2SET TARGET % PROFIT 0.4ENDIFSi votre code peut être écrit comme ci-dessous, le code fonctionnera comme vous le décrivez ci-dessus.
-
AuthorPosts
Find exclusive trading pro-tools on