Trades de part et d’ autre de average [5]

Viewing 6 posts - 1 through 6 (of 6 total)
  • Author
    Posts
  • #262755 quote
    4801
    Participant
    Junior

    Bonsoir à tous,

    Si le marché est calme, sans tendance forte, il me semble que les cours vont de part et d’ autre de la MM[5] ( 5 est un exemple ) . J’ ai essayer d’ écrire le code suivant qui achète quand le close croise à la baisse la MM[5] et short quand le close croise à la hausse la MM[5], avec dans tous les cas un STOP LOSS à 20 du prix d’ ouverture des trades. Avec interdiction si le trade est perdant, d’ ouvrir une nouvelle position dans le même sens. Je remercie au passage Roberto Gozzi pour son aide efficace pour coder avec ce principe ( si trade perdant, prochain trade seulement dans le sens opposé).

    ONCE TradeLong  = 1 // on peux trader long

    ONCE TradeShort = 1 // on peux trader short

    ONCE LongFlag  = 0 // le trade en cours est long =1 ou pas =0

    ONCE ShortFlag  = 0 // le trade en cours est short =1 ou pas =0

    MMcourte = average[periode,type](close)

    // check whether the closed trade was a Loss or a Win

    IF StrategyProfit < StrategyProfit[1] THEN

    // If it’s a loss, then only trade the opposite direction next time

    IF LongFlag THEN

    TradeLong = 0

    TradeShort = 1

    ELSIF ShortFlag THEN

    TradeLong = 1

    TradeShort = 0

    ENDIF

    ELSIF StrategyProfit > StrategyProfit[1] THEN

    // If it’s a win, then trade any direction

    TradeLong   = 1

    TradeShort  = 1

    ENDIF

    // ENTRY

    IF Not OnMarket THEN

    LongFlag   = 0

    ShortFlag   = 0

    IF CLOSE CROSSES OVER MMcourte AND TradeShort THEN

    SELL AT MARKET // Si position longue, cloture de cette position

    SELLSHORT 1 CONTRACT AT MARKET // ouverture position short

    ShortFlag = 1

    ELSIF CLOSE CROSSES UNDER MMcourte AND TradeLong THEN

    EXITSHORT AT MARKET // Si position short, cloture de cette position

    BUY 1 CONTRACT AT MARKET

    LongFlag = 1

    ENDIF

    ENDIF

    SET STOP pLOSS 20

    Je suis en échec, mon code plante et je vous remercie pour votre aide éventuelle.

    CAC-40-15-mn.png CAC-40-15-mn.png
    #262767 quote
    robertogozzi
    Moderator
    Legend

    Les deux lignes surlignées en ORANGE (voir photo ci-jointe) ne sont PAS nécessaires car :

    • si vous n’êtes PAS sur le marché, vous n’avez pas besoin de clôturer de positions
    • si vous êtes déjà sur le marché et souhaitez STOP & REVERSE, il vous suffit d’entrer dans la direction opposée et la position en cours sera automatiquement clôturée.

    Les deux lignes surlignées en VERT doivent être supprimées et déplacées plus bas, comme indiqué sur la même photo.

    Le code fonctionne parfaitement chez moi, sans planter. La seule chose qui me semble erronée (d’un point de vue purement logique) est que vous prenez une position longue lorsque la paire est baissière et une position courte lorsqu’elle est haussière.

    Je pense que l’inverse serait plus approprié ; voici mon code.

    Voici la procédure si vous ne souhaitez PAS effectuer un STOP & REVERSE:


    ONCE Type       = 0
    ONCE Periode    = 20
    ONCE TradeLong  = 1 // on peux trader long
    ONCE TradeShort = 1 // on peux trader short
    ONCE LongFlag   = 0 // le trade en cours est long =1 ou pas =0
    ONCE ShortFlag  = 0 // le trade en cours est short =1 ou pas =0
    MMcourte = average[periode,type](close)
    // check whether the closed trade was a Loss or a Win
    IF StrategyProfit < StrategyProfit[1] THEN
    // If it’s a loss, then only trade the opposite direction next time
    IF LongFlag THEN
    TradeLong  = 0
    TradeShort = 1
    ELSIF ShortFlag THEN
    TradeLong  = 1
    TradeShort = 0
    ENDIF
    ELSIF StrategyProfit > StrategyProfit[1] THEN
    // If it’s a win, then trade any direction
    TradeLong   = 1
    TradeShort  = 1
    ENDIF
    change = (TradeLong AND TradeShort[1]) OR (TradeLong[1] AND TradeShort)
    // ENTRY
    IF Not OnMarket THEN
    IF CLOSE CROSSES OVER MMcourte AND TradeShort THEN
    BUY 1 CONTRACT AT MARKET
    LongFlag  = 1
    ShortFlag = 0
    ELSIF CLOSE CROSSES UNDER MMcourte AND TradeLong THEN
    SELLSHORT 1 CONTRACT AT MARKET // ouverture position short
    ShortFlag = 1
    LongFlag  = 0
    ENDIF
    ENDIF
    SET STOP pLOSS 100
    SET TARGET pPROFIT 200
    graph change
    graph StrategyProfit < StrategyProfit[1] AS "Loss"   coloured("Red")
    graph StrategyProfit > StrategyProfit[1] AS "Profit" coloured("Green")
    
    

    Voici plutôt une autre solution si vous souhaitez effectuer un STOP & REVERSE :

    ONCE Type       = 0
    ONCE Periode    = 20
    ONCE TradeLong  = 1 // on peux trader long
    ONCE TradeShort = 1 // on peux trader short
    ONCE LongFlag   = 0 // le trade en cours est long =1 ou pas =0
    ONCE ShortFlag  = 0 // le trade en cours est short =1 ou pas =0
    MMcourte = average[periode,type](close)
    // check whether the closed trade was a Loss or a Win
    IF StrategyProfit < StrategyProfit[1] THEN
    // If it’s a loss, then only trade the opposite direction next time
    IF LongFlag THEN
    TradeLong  = 0
    TradeShort = 1
    ELSIF ShortFlag THEN
    TradeLong  = 1
    TradeShort = 0
    ENDIF
    ELSIF StrategyProfit > StrategyProfit[1] THEN
    // If it’s a win, then trade any direction
    TradeLong   = 1
    TradeShort  = 1
    ENDIF
    change = (TradeLong AND TradeShort[1]) OR (TradeLong[1] AND TradeShort)
    // ENTRY
    //IF Not OnMarket THEN
    IF (Not OnMarket OR ShortOnMarket) AND CLOSE CROSSES OVER MMcourte AND TradeShort THEN
    BUY 1 CONTRACT AT MARKET
    LongFlag  = 1
    ShortFlag = 0
    ELSIF (Not OnMarket OR LongOnMarket) AND  CLOSE CROSSES UNDER MMcourte AND TradeLong THEN
    SELLSHORT 1 CONTRACT AT MARKET // ouverture position short
    ShortFlag = 1
    LongFlag  = 0
    //ENDIF
    ENDIF
    SET STOP pLOSS 100
    SET TARGET pPROFIT 200
    graph change
    graph StrategyProfit < StrategyProfit[1] AS "Loss"   coloured("Red")
    graph StrategyProfit > StrategyProfit[1] AS "Profit" coloured("Green")
    
    

    Toutefois, pour éviter des transactions qui peuvent durer des milliers de barres, je vous recommande de définir un profit (de votre choix, en pips) avec l’instruction suivante :

    SET TARGET pPROFIT ...
    




    x.jpg x.jpg
    #262837 quote
    4801
    Participant
    Junior

    Bonsoir

    Merci pour votre aide, cependant les 2 codes proposés ne correspondent pas à ce que je souhaite réaliser:

    Quand le close croise à la hausse la Moyenne: on SHORT sauf si le trade précédant était perdant et LONG.

    Quand le close croise à la baisse la Moyenne: on ouvre LONG sauf si le trade précédant était perdant et SHORT.

    Dans les 2 cas de trades LONG ou SHORT on clôture toujours avec 1 STOP de 20.

    Vous m’ avez conseillé:

    IF CLOSE CROSSES OVER MMcourte AND TradeShort THEN
    BUY 1 CONTRACT AT MARKET                           // on achète au lieu de vendre à découvert 
    

    et

    ELSIF CLOSE CROSSES UNDER MMcourte AND TradeLong THEN
    SELLSHORT 1 CONTRACT AT MARKET                     // ouverture position short au lieu d' acheter
    

    Explications sur le graphique ci joint.

    Je vous remercie de bien vouloir m’ aider à nouveau.


    Avec-STOP-Reverse.png Avec-STOP-Reverse.png
    #262846 quote
    robertogozzi
    Moderator
    Legend

    Je crois mieux comprendre ce que vous souhaitez.

    Voici le code. J’ai également joint le fichier ITF à importer :

    ONCE Type       = 0
    ONCE Periode    = 20
    ONCE TradeLong  = 1 // on peux trader long
    ONCE TradeShort = 1 // on peux trader short
    ONCE LongFlag   = 0 // le trade en cours est long =1 ou pas =0
    ONCE ShortFlag  = 0 // le trade en cours est short =1 ou pas =0
    MMcourte = average[periode,type](close)
    // check whether the closed trade was a Loss or a Win
    IF StrategyProfit < StrategyProfit[1] THEN
    // If it’s a loss, then only trade the opposite direction next time
    IF LongFlag THEN
    TradeLong  = 0
    TradeShort = 1
    ELSIF ShortFlag THEN
    TradeLong  = 1
    TradeShort = 0
    ENDIF
    ELSIF StrategyProfit > StrategyProfit[1] THEN
    // If it’s a win, then trade any direction
    TradeLong   = 1
    TradeShort  = 1
    ENDIF
    //change = (TradeLong AND TradeShort[1]) OR (TradeLong[1] AND TradeShort)
    // ENTRY
    IF CLOSE CROSSES OVER MMcourte THEN
    EXITSHORT AT MARKET               // Clôture de la position courte
    IF TradeLong THEN
    BUY 1 CONTRACT AT MARKET       // ouverture position short
    LongFlag  = 1
    ShortFlag = 0
    ENDIF
    ELSIF CLOSE CROSSES UNDER MMcourte THEN
    SELL AT MARKET                    // Clôture de la position longue
    IF TradeShort THEN
    SELLSHORT 1 CONTRACT AT MARKET // ouverture position short
    LongFlag  = 0
    ShortFlag = 1
    ENDIF
    ENDIF
    SET STOP pLOSS 20
    //graph PositionPrice * PositionPerf / PipSize AS "Gain/Loss"
    //graphonprice average[periode,type](close) coloured("Fuchsia")
    //graph TradeLong  coloured("Green")
    //graph TradeShort coloured("Red")
    
    GraHal thanked this post
    My-System.itf
    #262867 quote
    4801
    Participant
    Junior

    Bonsoir,

    Je suis désolé de revenir sur le code que vous m’ avez envoyé, mais il fait exactement l’ inverse de ce que je souhaite, par exemple le close croise à la hausse la MM et le code achète au lieu de vendre à découvert et de même, quand le close croise à la baisse la MM, le code vend à découvert au lieu d’ ouvrir un trade long.

    Sinon c’ est OK pour en cas de trade perdant ne jamais ouvrir un nouveau trade de même sens que le trade perdant, et si le trade est gagnant alors on peut ouvrir un nouveau trade quel que soit le sens ( long ou short)

    J’espère aboutir avec le bon code et vous remercie. Ci après un morceau du code que vous m’ avez conseillé :

    IF CLOSE CROSSES OVER MMcourte THEN
    EXITSHORT AT MARKET               // Clôture de la position courte
    IF TradeLong THEN
    BUY 1 CONTRACT AT MARKET       // ouverture position short
    LongFlag  = 1
    ShortFlag = 0                                                                                        
    
    #262882 quote
    JS
    Participant
    Master

    Lorsqu’une seule moyenne mobile est utilisée en combinaison avec les fonctions « crosses over » et « crosses under », il est impossible d’ouvrir une nouvelle position dans la même direction que la position précédente…

    Once Period=20
    
    
    Avg=Average[Period](Close)
    
    
    If Close crosses over Avg then
    SellShort at Market
    EndIf
    
    
    If Close crosses under Avg then
    Buy at Market
    EndIf
    
    
    SET STOP pLOSS 20
    
    robertogozzi thanked this post
    Scherm­afbeelding-2026-07-25-om-13.07.15.png Scherm­afbeelding-2026-07-25-om-13.07.15.png
Viewing 6 posts - 1 through 6 (of 6 total)
  • You must be logged in to reply to this topic.

Trades de part et d’ autre de average [5]


ProOrder : Trading Automatique & Backtests

New Reply
Author
author-avatar
4801 @4801 Participant
Summary

This topic contains 5 replies,
has 3 voices, and was last updated by JS
1 month, 2 weeks ago.

Topic Details
Forum: ProOrder : Trading Automatique & Backtests
Language: French
Started: 07/20/2026
Status: Active
Attachments: 5 files
Logo Logo
Loading...