Stratégie MTF, besoins d'explications sur le comportement de ma stratégie

Viewing 15 posts - 1 through 15 (of 22 total)
  • Author
    Posts
  • #93672 quote
    lannoogeoffrey
    Participant
    Average

    Bonjour,

    J’ai écrit le code suivant avec une stratégie sur le 5 minutes et l’application sur le 1 minutes. Je pense avoir tout fait comme dans les exemples, mais il semble que le robot prenne plusieurs ordres alors qu’il ne devrait en prendre qu’un …. et je ne trouve pas ce qui ne vas pas. Je l’ai testé sur une période ou il a fonctionné en live et le résultat de prise de position est totalement différent. Les prises de position devraient être les mêmes, il n’y a juste que la mise à BE qui devrait être différente … ou est ce que je me trompe ?

    Merci d’avance pour votre aide.

    // Définition des paramètres du code
    DEFPARAM CumulateOrders = True // Cumul des positions activé
    // Annule tous les ordres en attente et ferme toutes les positions à 0:00, puis empêche toute création d'ordre avant l'heure "FLATBEFORE".
    DEFPARAM FLATBEFORE = 090000
    // Annule tous les ordres en attente et ferme toutes les positions à l'heure "FLATAFTER"
    DEFPARAM FLATAFTER = 220000
    daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
     
    //-------- Stratégie sur le 5 minutes --------
    timeframe(5 minute, updateonclose)
    
    //Définition de la pénétration ou de l'avalement d'une bougie
    
    TBP = high[1]-low[1] // taille de la bougie précédente mèches comprises
    
    PenetrationAchat = close > low[1]+1*TBP
    PenetrationVente = close < high[1]-1*TBP
    
    //Définition du RSI
    
    RSIA = RSI[7](close)crosses over 70
    RSIV = RSI[7](close)crosses under 30
    
    //Définitions des MM
    
    MM50 = average[50](close)
    
    //Conditions pour un signal d'achat --------
    
    ca1 = RSIA
    ca2 = PenetrationAchat
    ca3 = MM50 > MM50 [1]
    
    Buycondition = ca1 and ca2 and ca3
    
    //Conditions pour un signal de vente --------
    
    cv1 = RSIV
    cv2 = PenetrationVente
    cv3 = MM50 < MM50 [1]
    
    Sellcondition = cv1 and cv2 and cv3
    
    //-------- Définition de l'unité de temps principale d'action pour la mise à Break Even
    timeframe(1 minute, default)
    
    //Définition du stop à BE (break-even)
    startBEA = 12 //Nombre de point pour activer le stopBE
    startBEV = 12
    PointsToKeepA = 2 //Nombre de point de mise en place du stop par rapport au point d'entrée afin d'être stopé non pas à 0 mais un peu en postif
    PointsToKeepV = 2
    
    //-------- condition d'achat
    
    if Buycondition and not daysForbiddenEntry then
    buy 1 contract at market
    SET STOP pLOSS 30
    SET TARGET pPROFIT 30
    endif
     
    //On remet le niveau de mise à BE à 0 losque l'on n'est pas en position
    if not onmarket then
    breakeven=0
    endif
     
    //on regarde si le trade actuel à fait au moins x pips
    if longonmarket and high-tradeprice>=startBEA then
    breakeven=1
    endif
     
    //placer stoploss au prix d'entrée + x points
    if breakeven=1 then
    sell at tradeprice+PointsToKeepA stop
    endif
    
    //-------- Condition de vente
    if Sellcondition and not daysForbiddenEntry then
    sell 1 contract at market
    SET STOP pLOSS 30
    SET Target pProfit 30
    endif
     
    //On remet le niveau de mise à BE à 0 losque l'on n'est pas en position
    if not onmarket then
    breakeven=0
    endif
     
    //on regarde si le trade actuel à fait au moins x pips
    if shortonmarket and tradeprice-low>=startBEV then
    breakeven=1
    endif
     
    //placer stoploss au prix d'entrée + x points
    if breakeven=1 then
    buy at tradeprice+PointsToKeepV stop
    endif
    
    Capture-1.jpg Capture-1.jpg
    #93677 quote
    Nicolas
    Keymaster
    Master

    Plusieurs ordres en même temps ? Normal avec :

    DEFPARAM CumulateOrders = True

    Il faut interdire le cumul des positions en forçant à “false”.

    Je n’ai pas testé la stratégie, mais pourquoi délocaliser la prise des ordres en dehors du timeframe qui les conditionne ? (lignes 55 à 59 et lignes 77 à 81).

    Le MTF est utile pour déplacer ton stop rapidement à breakeven, sans attendre la fin d’une bougie M5, donc ne laisser uniquement que la gestion des ordres dans le timeframe le plus petit.

    Pour mémoire, l’instruction SELL ferme une position acheteuse, et n’ouvre pas de position de VAD (vente à découvert), pour cela utiliser l’instruction SELLSHORT.

    EDIT: merci de choisir un titre plus explicite la prochaine fois, sinon on va vite se retrouver avec plein de sujets “stratégie MTF” sur le forum ! 😉

    #93678 quote
    robertogozzi
    Moderator
    Master

    Pour prendre une seule commande, vous devez mettre “FALSE” sur la ligne 2.

    De plus, la stratégie est exécutée à la minute, les conditions d’achat et de vente sont donc valables pour 5 barres.
    Si la stratégie atteint le SL ou le TP avant 5 barres, une autre opération peut également commencer. Si vous ne le souhaitez pas, vous devez mettre une variable dans le TF de 1 minute qui, lors de votre première entrée, en achat ou en vente, ou les deux à la fois, NE FAITES AUCUNE autre opération avant une nouvelle barre de 5 minutes ou jusqu’à une certaine heure, etc …

    #93679 quote
    robertogozzi
    Moderator
    Master

    Nicolas, tu es trop rapide!

    #93680 quote
    lannoogeoffrey
    Participant
    Average

    d’accord mais il arrivera ou sur le 5 minutes un deuxième signal sera donné alors que je serais encore en position avec le premier. Le fait de mettre False empêchera la prise de position de ce deuxième signal sur le 5 minutes non ?

    #93681 quote
    lannoogeoffrey
    Participant
    Average

    Ce que je veux dire en fait c’est que là j’ai l’impression qu’il prend chaque croisement de la zone 70 du rsi dans une même bougie 5 minutes, et ça je ne veux pas. Je ne désire prendre qu’une position par signal 5 minutes. Mais je ne veux pas m’empêcher de prendre un deuxième signal 15 minutes plus tard si le premier trade est toujours en cours.

    #93682 quote
    Nicolas
    Keymaster
    Master

    Ce que je veux dire en fait c’est que là j’ai l’impression qu’il prend chaque croisement de la zone 70 du rsi dans une même bougie 5 minutes, et ça je ne veux pas. Je ne désire prendre qu’une position par signal 5 minutes.

    J’ai répondu à cette question. Merci de LIRE et d’attendre un peu que ça grimpe tout la haut 🙂

    pourquoi délocaliser la prise des ordres en dehors du timeframe qui les conditionne ? (lignes 55 à 59 et lignes 77 à 81). Le MTF est utile pour déplacer ton stop rapidement à breakeven, sans attendre la fin d’une bougie M5, donc ne laisser uniquement que la gestion des ordres dans le timeframe le plus petit.

    #93683 quote
    Nicolas
    Keymaster
    Master

    Mais je ne veux pas m’empêcher de prendre un deuxième signal 15 minutes plus tard si le premier trade est toujours en cours.

    Ok donc laisser le cumul à true. Le problème c’est que tu prends tes ordres à chaque fermeture de barre dans le TF 1-Minute, alors que ta stratégie est bien en M5, donc l’ouverture des ordres doit rester dans ce TF.

    #93684 quote
    lannoogeoffrey
    Participant
    Average

    Ok merci ça semble mieux fonctionner comme ça effectivement 🙂

    Grand merci

    #93685 quote
    lannoogeoffrey
    Participant
    Average

    ha non quand je laisse “true” il me remet la plein d’ordre sur le même signal 🙁

    #93688 quote
    Nicolas
    Keymaster
    Master

    Merci de reposter le code modifié pour constater.

    #93696 quote
    lannoogeoffrey
    Participant
    Average

    Voici le code

    // Définition des paramètres du code
    DEFPARAM CumulateOrders = true // Cumul des positions activé
    // Annule tous les ordres en attente et ferme toutes les positions à 0:00, puis empêche toute création d'ordre avant l'heure "FLATBEFORE".
    DEFPARAM FLATBEFORE = 090000
    // Annule tous les ordres en attente et ferme toutes les positions à l'heure "FLATAFTER"
    DEFPARAM FLATAFTER = 220000
    daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
     
    //-------- Stratégie sur le 5 minutes --------
    timeframe(5 minute, updateonclose)
    
    //Définition de la pénétration ou de l'avalement d'une bougie
    
    TBP = high[1]-low[1] // taille de la bougie précédente mèches comprises
    
    PenetrationAchat = close > low[1]+1*TBP
    PenetrationVente = close < high[1]-1*TBP
    
    //Définition du RSI
    
    RSIA = RSI[7](close)crosses over 70
    RSIV = RSI[7](close)crosses under 30
    
    //Définitions des MM
    
    MM50 = average[50](close)
    
    //Conditions pour un signal d'achat --------
    
    ca1 = RSIA
    ca2 = PenetrationAchat
    ca3 = MM50 > MM50 [1]
    
    //-------- condition d'achat
    
    if ca1 and ca2 and ca3 and not daysForbiddenEntry then
    buy 1 contract at market
    SET STOP pLOSS 30
    SET TARGET pPROFIT 30
    endif
    
    //Conditions pour un signal de vente --------
    
    cv1 = RSIV
    cv2 = PenetrationVente
    cv3 = MM50 < MM50 [1]
    
    //-------- Condition de vente
    if cv1 and cv2 and cv3 and not daysForbiddenEntry then
    sellshort 1 contract at market
    SET STOP pLOSS 30
    SET Target pProfit 30
    endif
    
    
    //-------- Définition de l'unité de temps principale d'action pour la mise à Break Even
    timeframe(1 minute, default)
    
    //Définition du stop à BE (break-even)
    startBEA = 12 //Nombre de point pour activer le stopBE
    startBEV = 12
    PointsToKeepA = 2 //Nombre de point de mise en place du stop par rapport au point d'entrée afin d'être stopé non pas à 0 mais un peu en postif
    PointsToKeepV = 2
    
    
    //On remet le niveau de mise à BE à 0 losque l'on n'est pas en position
    if not onmarket then
    BELvAchat=0
    endif
     
    //on regarde si le trade actuel à fait au moins x pips
    if longonmarket and high-tradeprice>=startBEA then
    BELvAchat=1
    endif
     
    //placer stoploss au prix d'entrée + x points
    if BELvAchat=1 then
    sell at tradeprice+PointsToKeepA stop
    endif
    
    
     
    //On remet le niveau de mise à BE à 0 losque l'on n'est pas en position
    if not onmarket then
    BELvVente=0
    endif
     
    //on regarde si le trade actuel à fait au moins x pips
    if shortonmarket and tradeprice-low>=startBEV then
    BELvVente=1
    endif
     
    //placer stoploss au prix d'entrée + x points
    if BELvVente=1 then
    buy at tradeprice+PointsToKeepV stop
    endif
    
    #93700 quote
    lannoogeoffrey
    Participant
    Average

    Voilà ce qu’il a fait en test live sur la première bougie 5 minutes (je voulais voir si ça serait différent du backtest ou pas).

    Il a pris au total 4 positions sur ce robot.

    Détail des ordres

    Acaht 25735.6 – sortie 25705.6 (SL de 30 pts touché)

    Achat 25727.6 – 25726.6 – 25724.6 – Sortie à 25706 pour les trois positions (ils ont été stoppé entre 22 et 19 pts –> pourquoi le stop a t il remonté de 10 pts ? on dirait que la procédure de mise à BE à fait relevé le stop alors que ça ne devrait pas).

    Merci pour l’aide

    Capture-2.jpg Capture-2.jpg Capture2.jpg Capture2.jpg
    #93747 quote
    Nicolas
    Keymaster
    Master

    Je n’ai pas testé le code, voir à la ligne 95: l’instruction BUY achète au marché. Pour sortir d’une position de VAD, il faut utiliser l’instruction EXITSHORT.

    #93813 quote
    lannoogeoffrey
    Participant
    Average

    J’ai changer la ligne 95 mais toujours la même chose qui se produit pour la prise de position multiple.

Viewing 15 posts - 1 through 15 (of 22 total)
  • You must be logged in to reply to this topic.

Stratégie MTF, besoins d'explications sur le comportement de ma stratégie


ProOrder : Trading Automatique & Backtests

New Reply
Author
Summary

This topic contains 21 replies,
has 3 voices, and was last updated by Nicolas
6 years, 8 months ago.

Topic Details
Forum: ProOrder : Trading Automatique & Backtests
Language: French
Started: 03/14/2019
Status: Active
Attachments: 4 files
Logo Logo
Loading...