Utilisation du trailing stop et d’une seconde condition

Viewing 5 posts - 16 through 20 (of 20 total)
  • Author
    Posts
  • #198216 quote
    finplus
    Participant
    Master

    Bonjour,

    mon code emploie beaucoup d’indicateurs qu’il faudrait que je redéfinisse. Je vais essayer de le simplifier à minima et de le poster. Encore une fois, merci pour votre aide.

    #199056 quote
    finplus
    Participant
    Master

    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
    ENDIF

    IF 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
    ENDIF

     

    le code du  “DM 15 minutes”[5, -5]

    period=50

    plusDM = (MAX(HIGH-HIGH[1], 0))*10
    minusDM = (MAX(LOW[1]-LOW, 0))*10

    IF plusDM > minusDM THEN
    minusDM = 0
    ENDIF

    IF plusDM < minusDM THEN
    plusDM = 0
    ENDIF

    IF plusDM = minusDM THEN
    plusDM = 0
    minusDM = 0
    ENDIF

    plusDI = 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
    endif

    if 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
    endif

    Return 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.

    Capture-décran-2022-08-14-à-18.10.58.png Capture-décran-2022-08-14-à-18.10.58.png
    #199207 quote
    JC_Bywan
    Moderator
    Master

    Bonjour, tu peux tester en rajoutant:

    if longonmarket and c3 then
    
    sell at market
    
    elsif shortonmarket and c1 then
    
    exitshort at market
    
    endif
    #199255 quote
    finplus
    Participant
    Master

    Bonsoir,

    je viens de rajouter le code après le trailing stop et cela n’a aucun effet. La position ne déboucle pas lorsque la MM20 croise à la baisse la MM50.

    #199270 quote
    finplus
    Participant
    Master

    Je corrige ma réponse précédente : le code fonctionne sur un autre programme automatique d’achat / vente. Donc, le problème vient de mon autre programme automatique. Merci. Bon week-end.

Viewing 5 posts - 16 through 20 (of 20 total)
  • You must be logged in to reply to this topic.

Utilisation du trailing stop et d’une seconde condition


ProOrder : Trading Automatique & Backtests

New Reply
Author
author-avatar
finplus @finplus Participant
Summary

This topic contains 19 replies,
has 3 voices, and was last updated by finplus
3 years, 6 months ago.

Topic Details
Forum: ProOrder : Trading Automatique & Backtests
Language: French
Started: 07/09/2022
Status: Active
Attachments: 1 files
Logo Logo
Loading...