Utilisation du trailing stop et d’une seconde condition
Forums › ProRealTime forum Français › Support ProOrder › Utilisation du trailing stop et d’une seconde condition
- This topic has 19 replies, 3 voices, and was last updated 2 years ago by finplus.
-
-
07/31/2022 at 3:58 PM #19821608/14/2022 at 5:34 PM #199056
Rebonjour, je reviens sur ma problématique. j’ai juste codé rapidement un petit programme de façon à illustrer le sujet. Je pars des moyennes 20 et 50 et sur le DM (que j’ai fait un peu bidouillé avec l’aide des personnes sur ce site). La stratégie étant que :
– entrer long si la MM20 croise à la hausse la MM50 et le DM est au dessus de la moyenne des 5 derniers retournements baissiers
– entrer court si la MM20 croise à la baisse la MM5° et le DM est au dessous de la moyenne des 5 derniers retournements haussiers.
Pour cela, j’ai essayé d’insérer le code avec l’onglet prévu à cet effet mais je n’y suis pas arrivé. Donc, je le colle ci-dessous avec le code du DM et je rajoute un print écran pour montrer mon problème : le 12 août à 8h30 le système entre long mais tout de suite après la MM20 croise à la baisse la MM50.
je souhaiterais qu’en plus du trailing stop soit ajouté une commande qui permette en cas de croisement à la baisse décrit ci-dessus, le système sorte du marché (et vice-versa si le système entre short et que la MM20 croise à la hausse la MM 50).
Merci d’avance.
Le programme :
// Définition des paramètres du code
DEFPARAM CumulateOrders = False // Cumul des positions désactivé// Conditions pour ouvrir une position acheteuse
indicator1 = WilderAverage[20](close)
indicator2 = WilderAverage[50](close)
c1 = (indicator1 CROSSES OVER indicator2)
c3 = (indicator1 CROSSES UNDER indicator2)indicator3, ignored, ignored, ignored, indicator4, indicator5 = CALL “DM 15 minutes”[5, -5]
c2 = (indicator3 > indicator4)
c4 = (indicator3 < indicator5)IF c1 AND c2 THEN
BUY 1 CONTRACT AT MARKET
ENDIFIF c3 and C4 THEN
SELLSHORT 1 contract at market
endif//trailing stop function
trailingstart = 5 //trailing will start @trailinstart points profit
trailingstep = 5 //trailing step to move the “stoploss”//reset the stoploss value
IF NOT ONMARKET THEN
newSL=0
ENDIF//manage long positions
IF LONGONMARKET THEN
//first move (breakeven)
IF newSL=0 AND close-tradeprice(1)>=trailingstart*pipsize THEN
newSL = tradeprice(1)+trailingstep*pipsize
ENDIF
//next moves
IF newSL>0 AND close-newSL>=trailingstep*pipsize THEN
newSL = newSL+trailingstep*pipsize
ENDIF
ENDIF//manage short positions
IF SHORTONMARKET THEN
//first move (breakeven)
IF newSL=0 AND tradeprice(1)-close>=trailingstart*pipsize THEN
newSL = tradeprice(1)-trailingstep*pipsize
ENDIF
//next moves
IF newSL>0 AND newSL-close>=trailingstep*pipsize THEN
newSL = newSL-trailingstep*pipsize
ENDIF
ENDIF//stop order to exit the positions
IF newSL>0 THEN
SELL AT newSL STOP
EXITSHORT AT newSL STOP
ENDIFle code du “DM 15 minutes”[5, -5]
period=50
plusDM = (MAX(HIGH-HIGH[1], 0))*10
minusDM = (MAX(LOW[1]-LOW, 0))*10IF plusDM > minusDM THEN
minusDM = 0
ENDIFIF plusDM < minusDM THEN
plusDM = 0
ENDIFIF plusDM = minusDM THEN
plusDM = 0
minusDM = 0
ENDIFplusDI = WILDERAVERAGE[period](plusDM)
minusDI = WILDERAVERAGE[period](minusDM)DM = plusDI-minusDI
moy = exponentialaverage[period](DM/pipsize)
if Moy<Moy[1] and Moy[1]>Moy[2] and Moy[1]>0 then
RetB5=RetB4
RetB4=RetB3
RetB3=RetB2
RetB2=RetB1
RetB1=Moy[1]
RetBmoy=(RetB1+RetB2+RetB3+RetB4+RetB5)/5
endifif Moy>Moy[1] and Moy[1]<Moy[2] and Moy[1]<0 then
RetH5=RetH4
RetH4=RetH3
RetH3=RetH2
RetH2=RetH1
RetH1=Moy[1]
RetHmoy=(RetH1+RetH2+RetH3+RetH4+RetH5)/5
endifReturn DM/pipsize, seuilhaut as “haut”, seuilbas as “bas”, moy as “moyenne”, RetBmoy as “Moyenne 5 derniers retournements baissiers”, RetHmoy as “Moyenne 5 derniers retournements haussiers”
Merci pour l’aide apportée.
08/18/2022 at 11:00 AM #19920708/19/2022 at 6:16 PM #19925508/20/2022 at 11:36 AM #199270 -
AuthorPosts
Find exclusive trading pro-tools on