Stratégie à améliorer

Viewing 6 posts - 1 through 6 (of 6 total)
  • Author
    Posts
  • #228636 quote
    NicolasMYN
    Participant
    New

    Bonjour,

    Ça va faire plusieurs mois maintenant que j’essaye d’adapter ma stratégie en code, et plus j’avance plus j’obtiens des résultats positifs mais je reste loin d’être complètement satisfait. Aujourd’hui j’aimerais la partager avec vous pour obtenir votre aide, et si possible qu’on puisse la perfectionner ensemble ; car je ne sais pas si la stratégie a atteint sa limite ou si en gardant la logique de base on peut l’améliorer.

    Ma stratégie repose sur 6 indicateurs :

    – les bandes de bollinger ; – deux moyennes mobiles ; – le MACD ; – les stochastiques ; – la parabolique ; – le prix

    et consiste à ce que :

    – le plus haut (le plus bas) perce la bande sup (inf) de bollinger ; – la parabolique est inférieure (supérieure) à la bande moy de bollinger ; – les bandes sup et inf de bollinger divergent ou forment une parallèle mais ne convergent pas.

    – non-croisement des moyennes mobiles à la hausse (baisse) – non-croisement du MACD à la hausse (baisse) – non-croisement des stochastiques à la hausse (baisse) Voici pour la prise de position. Pour la sortie, il suffit d’avoir : – MACD LINE < MACD LINE [1] (et inversement pour exitshort). Ou – Stoch K devient négatif sur 2 périodes consécutives. Généralement les deux arrivent au même moment mais dans le doute je précise. Dans le code j’ai rajouté plusieurs timeframes (libre à vous de les modifier) ce qui peut le rendre complexe à priori mais le code répète les mêmes règles et est très facile à déchiffrer :
    // Définition des paramètres du code
    DEFPARAM CumulateOrders = False // Cumul des positions désactivé
    // 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 = 070000
    // Annule tous les ordres en attente et ferme toutes les positions à l'heure "FLATAFTER"
    DEFPARAM FLATAFTER = 201500
    
    // Empêche le système de placer de nouveaux ordres sur les jours de la semaine spécifiés
    daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
    
    // Conditions pour ouvrir une position acheteuse
    timeframe (30minutes)
    indicatora1 = BollingerUp[20](typicalPrice)
    a1 = (high >= indicatora1)
    indicatora2 = SAR[0.02,0.02,0.2]
    indicatora3 = Average[20](typicalPrice)
    a2 = (indicatora2 <= indicatora3)
    indicatora4 = MACDline[9,19,6](close)
    indicatora5 = MACDSignal[9,19,6](close)
    a3 = (indicatora4 > indicatora5)
    indicatora6 = WilderAverage[3](Stochastic[14,1](close))
    indicatora7 = WilderAverage[3](WilderAverage[3](Stochastic[14,1](close)))
    a4 = (indicatora6 > indicatora7)
    indicatora8 = Average[7](close)
    indicatora9 = indicatora8
    a5 = (indicatora8 > indicatora9[1])
    indicatora10 = Average[23](close)
    indicatora11 = indicatora10
    a6 = (indicatora10 > indicatora11[1])
    indicatora12 = BollingerUp[20](typicalPrice)
    indicatora13 = indicatora12
    a7 = (indicatora12 > indicatora13[1])
    indicatora14 = BollingerDown[20](typicalPrice)
    indicatora15 = indicatora14
    a8 = (indicatora14 < indicatora15[1])
    indicatora16 = MACDSignal[9,19,6](close)
    a9 = (indicatora16 > indicatora16[1])
    indicatora17 = WilderAverage[3](WilderAverage[3](Stochastic[14,1](close)))
    a10 = (indicatora17 > indicatora17[1])
    indicatora18 = MACDline[9,19,6](close)
    a11 = (indicatora18 > indicatora18[1])
    indicatora19 = WilderAverage[3](Stochastic[14,1](close))
    a12 = (indicatora19 > indicatora19[1])
    indicatoraV = WilderAverage[3](Stochastic[14,1](close))
    aV = indicatoraV < 80
    
    ConditionsLONGA = ( a2 AND a3 AND a4 AND a5 AND a6 and a9 AND a10 AND a11 AND a12 )
    
    
    timeframe(10 minutes)
    indicator1 = BollingerUp[20](typicalPrice)
    c1 = (high >= indicator1)
    indicator2 = SAR[0.02,0.02,0.2]
    indicator3 = Average[20](typicalPrice)
    c2 = (indicator2 <= indicator3)
    indicator4 = MACDline[9,19,6](close)
    indicator5 = MACDSignal[9,19,6](close)
    c3 = (indicator4 > indicator5)
    indicator6 = WilderAverage[3](Stochastic[14,1](close))
    indicator7 = WilderAverage[3](WilderAverage[3](Stochastic[14,1](close)))
    c4 = (indicator6 > indicator7)
    indicator8 = Average[7](close)
    indicator9 = indicator8
    c5 = (indicator8 > indicator9[1])
    indicator10 = Average[23](close)
    indicator11 = indicator10
    c6 = (indicator10 > indicator11[1])
    indicator12 = BollingerUp[20](typicalPrice)
    indicator13 = indicator12
    c7 = (indicator12 > indicator13[1])
    indicator14 = BollingerDown[20](typicalPrice)
    indicator15 = indicator14
    c8 = (indicator14 < indicator15[1])
    indicator16 = MACDSignal[9,19,6](close)
    c9 = (indicator16 > indicator16[1])
    indicator17 = WilderAverage[3](WilderAverage[3](Stochastic[14,1](close)))
    c10 = (indicator17 > indicator17[1])
    indicator18 = MACDline[9,19,6](close)
    c11 = (indicator18 > indicator18[1])
    indicator19 = WilderAverage[3](Stochastic[14,1](close))
    c12 = (indicator19 > indicator19[1])
    indicatorV = WilderAverage[3](Stochastic[14,1](close))
    cV = indicatorV < 75
    
    ConditionsLONG = (c1 AND c2 AND c3 AND c4 AND c5 AND c6 AND c7 AND c8 AND c9 AND c10 AND c11 AND c12) AND not daysForbiddenEntry
    
    
    if ConditionsLONG and cS and ConditionsLONGA THEN
    BUY 10 CONTRACT AT MARKET
    SET STOP PTRAILING 12
    ENDIF
    
    timeframe(default)
    
    indicatorS = WilderAverage[3](Stochastic[14,1](close))
    cS = indicatorS < 60
    
    // Conditions pour fermer une position acheteuse
    indicator20 = MACDline[9,19,6](close)
    c14 = (indicator20 < indicator20[1])
    indicator21 = WilderAverage[3](Stochastic[14,1](close))
    c15 = (indicator21 < indicator21[1])
    IF c14 AND c15 THEN
    SELL AT MARKET
    ENDIF
    
    // Conditions pour ouvrir une position vendeuse
    
    timeframe(30 minutes)
    // Conditions pour ouvrir une position en vente à découvert
    indicatoras24 = BollingerDown[20](typicalPrice)
    cas17 = (low <= indicatoras24)
    indicatoras25 = SAR[0.02,0.02,0.2]
    indicatoras26 = BollingerDown[20](typicalPrice)
    cas18 = (indicatoras25 >= indicatoras26)
    indicatoras27 = BollingerUp[20](typicalPrice)
    indicatoras28 = BollingerUp[20](typicalPrice)
    cas19 = (indicatoras27 > indicatoras28[1])
    indicatoras29 = BollingerDown[20](typicalPrice)
    indicatoras30 = BollingerDown[20](typicalPrice)
    cas20 = (indicatoras29 < indicatoras30[1])
    indicatoras31 = Average[7](close)
    indicatoras32 = Average[7](close)
    cas21 = (indicatoras31 < indicatoras32[1])
    indicatoras33 = Average[23](close)
    indicatoras34 = Average[23](close)
    cas22 = (indicatoras33 < indicatoras34[1])
    indicatoras35 = MACDSignal[9,19,6](close)
    cas23 = (indicatoras35 < indicatoras35[1])
    indicatoras36 = MACDline[9,19,6](close)
    indicatoras37 = MACDSignal[9,19,6](close)
    cas24 = (indicatoras36 < indicatoras37)
    indicatoras38 = MACDline[9,19,6](close)
    cas25 = (indicatoras38 < indicatoras38[1])
    indicatoras39 = WilderAverage[3](Stochastic[14,1](close))
    indicatoras40 = WilderAverage[3](WilderAverage[3](Stochastic[14,1](close)))
    cas26 = (indicatoras39 < indicatoras40)
    indicatoras41 = WilderAverage[3](Stochastic[14,1](close))
    cas27 = (indicatoras41 < indicatoras41[1])
    indicatoras42 = WilderAverage[3](WilderAverage[3](Stochastic[14,1](close)))
    cas28 = (indicatoras42 < indicatoras42[1])
    
    ConditionsSHORT60 = ( cas18 AND cas19 AND cas20 AND cas21 AND cas22 AND cas23 AND cas24 AND cas25 AND cas26 AND cas27 AND cas28)
    
    timeframe(15 minutes)
    // Conditions pour ouvrir une position en vente à découvert
    indicatora24 = BollingerDown[20](typicalPrice)
    ca17 = (low <= indicatora24)
    indicatora25 = SAR[0.02,0.02,0.2]
    indicatora26 = BollingerDown[20](typicalPrice)
    ca18 = (indicatora25 >= indicatora26)
    indicatora27 = BollingerUp[20](typicalPrice)
    indicatora28 = BollingerUp[20](typicalPrice)
    ca19 = (indicatora27 > indicatora28[1])
    indicatora29 = BollingerDown[20](typicalPrice)
    indicatora30 = BollingerDown[20](typicalPrice)
    ca20 = (indicatora29 < indicatora30[1])
    indicatora31 = Average[7](close)
    indicatora32 = Average[7](close)
    ca21 = (indicatora31 < indicatora32[1])
    indicatora33 = Average[23](close)
    indicatora34 = Average[23](close)
    ca22 = (indicatora33 < indicatora34[1])
    indicatora35 = MACDSignal[9,19,6](close)
    ca23 = (indicatora35 < indicatora35[1])
    indicatora36 = MACDline[9,19,6](close)
    indicatora37 = MACDSignal[9,19,6](close)
    ca24 = (indicatora36 < indicatora37)
    indicatora38 = MACDline[9,19,6](close)
    ca25 = (indicatora38 < indicatora38[1])
    indicatora39 = WilderAverage[3](Stochastic[14,1](close))
    indicatora40 = WilderAverage[3](WilderAverage[3](Stochastic[14,1](close)))
    ca26 = (indicatora39 < indicatora40)
    indicatora41 = WilderAverage[3](Stochastic[14,1](close))
    ca27 = (indicatora41 < indicatora41[1])
    indicatora42 = WilderAverage[3](WilderAverage[3](Stochastic[14,1](close)))
    ca28 = (indicatora42 < indicatora42[1])
    
    ConditionsSHORT30 = ( ca18 AND ca19 AND ca20 AND ca21 AND ca22 AND ca23 AND ca24 AND ca25 AND ca26 AND ca27 AND ca28)
    
    timeframe(10 minutes)
    indicator24 = BollingerDown[20](typicalPrice)
    c17 = (low <= indicator24)
    indicator25 = SAR[0.02,0.02,0.2]
    indicator26 = BollingerDown[20](typicalPrice)
    c18 = (indicator25 >= indicator26)
    indicator27 = BollingerUp[20](typicalPrice)
    indicator28 = BollingerUp[20](typicalPrice)
    c19 = (indicator27 > indicator28[1])
    indicator29 = BollingerDown[20](typicalPrice)
    indicator30 = BollingerDown[20](typicalPrice)
    c20 = (indicator29 < indicator30[1])
    indicator31 = Average[7](close)
    indicator32 = Average[7](close)
    c21 = (indicator31 < indicator32[1])
    indicator33 = Average[23](close)
    indicator34 = Average[23](close)
    c22 = (indicator33 < indicator34[1])
    indicator35 = MACDSignal[9,19,6](close)
    c23 = (indicator35 < indicator35[1])
    indicator36 = MACDline[9,19,6](close)
    indicator37 = MACDSignal[9,19,6](close)
    c24 = (indicator36 < indicator37)
    indicator38 = MACDline[9,19,6](close)
    c25 = (indicator38 < indicator38[1])
    indicator39 = WilderAverage[3](Stochastic[14,1](close))
    indicator40 = WilderAverage[3](WilderAverage[3](Stochastic[14,1](close)))
    c26 = (indicator39 < indicator40)
    indicator41 = WilderAverage[3](Stochastic[14,1](close))
    c27 = (indicator41 < indicator41[1])
    indicator42 = WilderAverage[3](WilderAverage[3](Stochastic[14,1](close)))
    c28 = (indicator42 < indicator42[1])
    
    ConditionsSHORT = (c17 AND c18 AND c19 AND c20 AND c21 AND c22 AND c23 AND c24 AND c25 AND c26 AND c27 AND c28) AND not daysForbiddenEntry
    
    
    if ConditionsSHORT and ConditionsSHORT60 and cSA and ConditionsSHORT30 THEN
    sellshort 10 CONTRACT AT MARKET
    SET STOP PTRAILING 14
    ENDIF
    
    timeframe(default)
    
    indicatorS = WilderAverage[3](Stochastic[14,1](close))
    cSA = indicatorS > 45
    //27 ou 45
    // Conditions pour fermer une position en vente à découvert
    indicator43 = MACDline[9,19,6](close)
    c29 = (indicator43 >= indicator43[1])
    indicator44 = WilderAverage[3](Stochastic[14,1](close))
    c30 = (indicator44 >= indicator44[1])
    
    IF c29 AND c30 THEN
    EXITSHORT AT MARKET
    ENDIF
    J’espère quand voyant ce code vous le comprendrez :). Je travaille actuellement sur le Nasdaq 100 sur du 5 min mais je suppose qu’il peut fonctionner sur d’autres indices. Si jamais je reste à votre disposition, je suis encore débutant et souhaite développer mes connaissances. En vous remerciant pour votre bienveillance et votre compréhension 🙂
    pror thanked this post
    IMG_6096.jpeg IMG_6096.jpeg IMG_6097.jpeg IMG_6097.jpeg IMG_6098.jpeg IMG_6098.jpeg
    #228669 quote
    phoentzs
    Participant
    Master
    Je ne veux pas paraître arrogant… mais leur stratégie est trop complexe et comporte trop de filtres. Au moins, je le vois comme ça. Faites les grands mouvements et vous obtiendrez plus de puissance.
    #228670 quote
    NicolasMYN
    Participant
    New
    Merci pour votre retour. Au contraire, le but est d’obtenir le plus d’avis constructifs à propos de la stratégie (moi même je ne suis pas satisfait). Quand vous parlez de grands mouvements, cela sous entend d’enlever des “timeframes” ? Quelles modifications apporteriez-vous dessus ?
    #228691 quote
    phoentzs
    Participant
    Master
    Je vous recommande ce fil… et peut-être quelques idées de votre choix. 😉
    A completely simple NAS MACD system
    #228693 quote
    NicolasMYN
    Participant
    New
    Super ! Je vais y jeter un coup d’œil. Merci beaucoup pour votre aide
    #228694 quote
    phoentzs
    Participant
    Master
    C’est juste une matière à réflexion… cela pourrait être beaucoup plus simple. Mais je ne peux pas tout révéler ici. 😉
Viewing 6 posts - 1 through 6 (of 6 total)
  • You must be logged in to reply to this topic.

Stratégie à améliorer


ProOrder : Trading Automatique & Backtests

New Reply
Author
author-avatar
NicolasMYN @nicolasmyn Participant
Summary

This topic contains 5 replies,
has 2 voices, and was last updated by phoentzs
2 years ago.

Topic Details
Forum: ProOrder : Trading Automatique & Backtests
Language: French
Started: 02/23/2024
Status: Active
Attachments: 3 files
Logo Logo
Loading...