Aide encodage stratégie avec martingale et RSI

Viewing 10 posts - 1 through 10 (of 10 total)
  • Author
    Posts
  • #39068 quote
    Scalp
    Participant
    New

    Bonjour,

    Débutant sur pro order, j’aurais besoin de vos conseils pour un code qui semble ne pas fonctionner. Le principe de ce code est une martingale et le problème est le suivant :

    L’ordre initial (achat ou vente) se déclenche bien en fonction des conditions demandées mais lorsque la position clôture en perte, l’ordre suivant ne prend pas en compte la martingale et ouvre une position d’un contrat seulement (idem à l’ordre initial donc). J’ai eu beau chercher un peu partout sur le web et dans le manuel d’utilisation, pas moyen de comprendre l’erreur. Pouvez vous m’aider svp ?

    Voici le code en question :

    DEFPARAM CumulateOrders = False
    ONCE OrderSize = 1
    ONCE ExitIndex = -2
    
    noEntryBeforeTime = 080000
    timeEnterBefore = time >= noEntryBeforeTime
    noEntryAfterTime = 183000
    timeEnterAfter = time < noEntryAfterTime
    daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
    
    indicator1 = RSI[14](close)
    c1 = (indicator1 <= 30)
    IF c1 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry AND not longonmarket THEN
    BUY ordersize CONTRACT AT MARKET
    ENDIF
    
    indicator2 = RSI[14](close)
    c2 = (indicator2 >= 70)
    IF c2 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry AND not shortonmarket THEN
    SELLSHORT ordersize CONTRACT AT MARKET
    ENDIF
    
    SET STOP pLOSS 5
    SET TARGET pPROFIT 10
    
    ExitIndex = BarIndex
    IF Barindex = ExitIndex + 1 THEN
    ExitIndex = 0
    IF PositionPerf(1) < 0 THEN
    OrderSize = OrderSize * 2
    ELSIF PositionPerf(1) > 0 THEN
    OrderSize = 1
    ENDIF
    ENDIF
    

    D’avance merci !

    #39107 quote
    Nicolas
    Keymaster
    Master

    Je pense qu’à force d’essayer à faire quelque-chose qui fonctionne, tu as mélangé un peu de tout, j’ai modifié comme ceci:

    DEFPARAM CumulateOrders = False
    ONCE OrderSize = 1
    //ONCE ExitIndex = -2
    
    noEntryBeforeTime = 080000
    timeEnterBefore = time >= noEntryBeforeTime
    noEntryAfterTime = 183000
    timeEnterAfter = time < noEntryAfterTime
    daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
    
    indicator1 = RSI[14](close)
    c1 = (indicator1 <= 30)
    IF c1 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry AND not longonmarket THEN
    BUY ordersize CONTRACT AT MARKET
    ENDIF
    
    indicator2 = RSI[14](close)
    c2 = (indicator2 >= 70)
    IF c2 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry AND not shortonmarket THEN
    SELLSHORT ordersize CONTRACT AT MARKET
    ENDIF
    
    SET STOP pLOSS 5
    SET TARGET pPROFIT 10
    
    IF tradeindex(1)=barindex[1] THEN
    IF PositionPerf(1) < 0 THEN
    OrderSize = OrderSize * 2
    ELSIF PositionPerf(1) > 0 THEN
    OrderSize = 1
    ENDIF
    ENDIF

    ça devrait fonctionner, merci de confirmer ! 🙂

    #39116 quote
    Scalp
    Participant
    New

    Merci Nicolas pour la rapidité de ta réponse 🙂

    En fait je me suis appuyé sur le manuel d’utilisation de PRT pour faire le code, chose qui n’a pas été aisé, j’ai du me mélanger un peu les pinceaux.

    Avec ton code il y a effectivement eu du changement (j’ai reduit le take profit pour avoir un meilleur visuel au backtest) mais certains problèmes semblent persister 🙁

    Capture-d’écran-5.png Capture-d’écran-5.png
    #39121 quote
    Scalp
    Participant
    New

    Sur le graph on voit que la première position est un echec (vente à 1.11876 et rachat à 1.11926) jusqu’ici c’est normal. Par contre la deuxième s’ouvre avec un montant de 4 lot à 1.11940 (normalement ce devrait être 2) et se ferme sur la même bougie à 1.11990 (normal). La position continue d’être perdante mais les positions suivantes continuent à 4 lots.

    Je ne comprends pas trop ce qu’il se passe.

    Capture-d’écran-5-1.png Capture-d’écran-5-1.png
    #39123 quote
    Nicolas
    Keymaster
    Master

    Ah ok je vois, le problème avec le code de la martingale de la documentation c’est que l’on ne sait pas si l’ordre a été fermé en takeprofit ou en stoploss avec la façon dont on nous dit de l’incorporer. J’ai changé la façon d’opérer:

    DEFPARAM CumulateOrders = False
    ONCE OrderSize = 1
    
    noEntryBeforeTime = 080000
    timeEnterBefore = time >= noEntryBeforeTime
    noEntryAfterTime = 183000
    timeEnterAfter = time < noEntryAfterTime
    daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
    
    indicator1 = RSI[14](close)
    c1 = (indicator1 <= 30)
    IF c1 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry AND not longonmarket THEN
    EXITSHORT AT MARKET 
    IF PositionPerf(1) < 0 THEN
    OrderSize = OrderSize * 2
    ELSIF PositionPerf(1) > 0 THEN
    OrderSize = 1
    ENDIF
    BUY ordersize CONTRACT AT MARKET
    ENDIF
    
    indicator2 = RSI[14](close)
    c2 = (indicator2 >= 70)
    IF c2 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry AND not shortonmarket THEN
    SELL AT MARKET 
    IF PositionPerf(1) < 0 THEN
    OrderSize = OrderSize * 2
    ELSIF PositionPerf(1) > 0 THEN
    OrderSize = 1
    ENDIF
    SELLSHORT ordersize CONTRACT AT MARKET
    ENDIF
    
    SET STOP pLOSS 5
    SET TARGET pPROFIT 10

    et maintenant ?

    #39130 quote
    Scalp
    Participant
    New

    C’est beaucoup mieux ! 😉 et vu la configuration de l’eur/usd aujourd’hui c’est un massacre ! +4600 eur ! lol

    Ceci est du au fait que maintenant la clôture se fait uniquement quand le rsi passe sous les 30 pour les shorts et au dessus de 70 pour les longues (en backtest du moins), le stop loss et la martingale fonctionnent bien mais le take profit est par contre devenu inutile dans le code.

    Je n’ose pas imaginer pas le résultat un jour de forte tendance continue……hummm et un compte brulé, un ! lol

    Je vais essayer de trouver quelque chose pour arranger ça et stopper comme prévu initialement 🙂

    En tout cas merci infiniment, la lecture de ton code m’a permis de mieux comprendre le principe et de progresser 🙂

    Nicolas thanked this post
    #39132 quote
    Scalp
    Participant
    New

    Finalement après plusieurs tests en changeant les valeurs, il s’avère que ton code est tout simplement parfait 🙂

    Un grand bravo et encore merci Nicolas.

    Un dernier point, il m’est impossible d’effectuer un backtest sur plus d’un jour. Est-ce du au fait que je soit en démo ?

    #39163 quote
    Nicolas
    Keymaster
    Master

    Il faut augmenter la quantité d’unité affichée à 200.000, c’est le maximum d’historique possible avec PRT-CFD premium. La limite est fixé à 100k chandeliers chez IG, je ne sais pas qui est ton courtier.

    #39264 quote
    Scalp
    Participant
    New

    Je suis cez IG, et effectivement 100K unités fonctionne, il fallait le savoir ^^

     

    Merci pour ton aide ! 🙂

    #69672 quote
    Fox Echo
    Participant
    New

    Bonjour,

    Cette routine fonctionne bien sur le CAC40 Future en backtest sur des barres de 2 minutes ; je l’essaie demain sur un portefeuille virtuel. Avez-vous essayé avec un stop-suiveur à 5% plutôt qu’un stop-loss ? (je ne connais pas la formule pour le coder, mais le trailing stop me semble très puissant).

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

Aide encodage stratégie avec martingale et RSI


ProOrder : Trading Automatique & Backtests

New Reply
Author
author-avatar
Scalp @scalp Participant
Summary

This topic contains 9 replies,
has 3 voices, and was last updated by Fox Echo
7 years, 10 months ago.

Topic Details
Forum: ProOrder : Trading Automatique & Backtests
Language: French
Started: 06/26/2017
Status: Active
Attachments: 2 files
Logo Logo
Loading...