Conversion strategy() Pinescript en ProBacktest

Viewing 7 posts - 1 through 7 (of 7 total)
  • Author
    Posts
  • #140411 quote
    Pepe_W
    Participant
    New

    Bonjour,

    J’ai un script fonctionnel Pinescript (une strategy()) que je voudrais transformer en script ProBacktest.
    Je vous demande de l’aide au niveau de la conversion du code afin que je vois plus vite les différences entre les 2 langages (j’ai déjà fait la formation d’introduction).

    Vous trouverez en PJ mon code Pinescript dans le fichier txt, une capture d’écran représentant un exemple de LONG et un exemple de SHORT et enfin une autre capture d’écran représentant mon money management.

    Voici comment fonctionne ma stratégie (il s’agit d’une stratégie pour du Forex) :

    – Tout d’abord j’ajoute 2 indicateurs :

      • – Un MACD (j’ai enlevé l’histogramme et ajouté une ligne horizontale à 0)

     

      – Une 200 EMA

    – J’ai 3 conditions d’entrée (pour le LONG)(pour le SHORT c’est l’inverse) :

      • – un cross over de la macdLine au dessus de la signalLine du MACD

     

      • – ce croisement a lieu sous le niveau 0 du MACD

     

      – le prix (close) est au dessus de la 200 EMA

    – Voilà comment je gère le money management :

      • – Je simule le backtest avec un capital initial de 1000 (je ne fixe pas la monnaie => “currency=currency.NONE”)

     

      • – Ma SL est placé au lowest close des 10 dernières bougies

     

      • – Mon TP est placé à 1.5 fois la SL (possible de modifier grâce à une input)

     

      • – Pour chaque trade je risque 1% de mon équité actuelle (possible de modifier grâce à une input) ce qui veut dire qu’avec 1000 au départ je

     

      risque 10 par trade. Autrement dit, si je perds, je perds 10 et si je gagne, je gagne 15.

    – J’affiche la SL et le TP

    – J’ai aussi ajouté des inputs pour modifier de quand à quand se passe le backtest

    Voilà pour la strategie !

    Petite demande d’amélioration (seulement si facile/évident) :
    Comme vous l’avez remarquez au niveau du money management, je n’ai pas d’unité par défaut (alors que je voudrais bien travaillé avec des euros). L’unité utilisée est celle de la seconde paire Forex.
    Sauf que si je veux travailler avec des euros, il me faut convertir la taille de la position en euros.
    Je n’ai pas réussi à le faire en Pinescript, donc si vous avez une solution, je suis preneur !

    Enfin une dernière petite question : Est il possible de backtester le script sur plusieurs paires Forex en même temps ?

    Voilà, je vous remercie énormément en avance ! 🙂

    PS : Si vous avez des questions n’hésitez pas

    Exemple-Money-Management.png Exemple-Money-Management.png Pinescript.txt Exemple-LONG-et-SHORT.png Exemple-LONG-et-SHORT.png Exemple-Money-Management-1.png Exemple-Money-Management-1.png
    #140436 quote
    Nicolas
    Keymaster
    Master

    Pour les conditions d’entrées, je pense qu’il est très simple de les créer avec l’assistant automatique.

    Pour le reste, je pourrai intervenir dans ton code quand tu l’auras posté, merci 🙂

    #140451 quote
    Pepe_W
    Participant
    New

    Bonjour ! Merci pour la réponse 🙂

    J’ai un fichier txt (en PJ) avec mon code pinescript.

    Tu veux que je copie-colle le code directement dans le post ?

    PS : Je ne peux plus edit mon post donc désolé pour l’indentation dégeulasse

    #140455 quote
    Nicolas
    Keymaster
    Master

    Non je parlai du code que tu pourras faire toi même sous ProBacktest avec l’assistant de création simplifiée.

    #140462 quote
    Pepe_W
    Participant
    New

    Ok ça marche je vais pousser au maximum que je peux et je reviens ici dès que je suis bloqué !

    #140526 quote
    Pepe_W
    Participant
    New

    Salut j’ai repris mon code Pinescript et j’ai quasiment réussi à le convertir, j’ai juste 2 points à éclaircir.

    Tout d’abord voici le code ProBacktest (que les LONG, je me débrouillerais pour les SHORT) :

    // Définition des paramètres du code
    DEFPARAM CumulateOrders = False
    DEFPARAM NoCashUpdate = True
    
    // ============================================================================================================ //
    // =============================================INDICATEURS==================================================== //
    // ============================================================================================================ //
    
    macdLigne = MACDline[12,26,9](close)
    signalLigne = MACDSignal[12,26,9](close)
    ema200 = ExponentialAverage[200](close)
    
    // ============================================================================================================ //
    // =========================================LONG POSITIONS===================================================== //
    // ============================================================================================================ //
    
    // LONG CONDITIONS
    longCondition1 = (macdLigne CROSSES OVER signalLigne)
    longCondition2 = (macdLigne < 0) AND (signalLigne < 0)
    longCondition3 = (close > ema200)
    longCondition = longCondition1 AND longCondition2 AND longCondition3
    
    // SET LA STOPLOSS
    IF longCondition THEN
      longSL = Lowest[10](close)[1]
    ELSE
      longSL = longSL[1]
    ENDIF
    
    // SET LE TAKE PROFIT
    longEntryPrice = close
    longTailleSL = ABS(longEntryPrice - longSL)
    IF longCondition THEN
      longTP = close + (1.5 * longTailleSL)
    ELSE
      longTP = longTP[1]
    ENDIF
    
    // TODO : REGLER LA TAILLE DE LA POSITION
    
    // DÉCLENCHER LE TRADE
    IF longCondition THEN
      BUY 1 SHARES AT MARKET
    ENDIF
    
    // Stops et objectifs
    IF longCondition THEN
      SET STOP $LOSS 15
      SET TARGET $PROFIT 10
    ENDIF
    
    // AFFICHER SL ET TP
    IF ONMARKET THEN
      longPlotSL = longSL
      longPlotTP = longTP
    ELSE
      longPlotSL = 0
      longPlotTP = 0
    ENDIF
    
    GRAPH longPlotSL COLOURED(255,82,82) AS "LONG SL"
    GRAPH longPlotTP COLOURED(65,140,71) AS "LONG TP"

    Voilà les 2 questions :

    • Comment afficher les SL et TP sur mon graph de prix (comme sur ma PJ) ? Car les RETURN ne fonctionnent pas
    • Comment régler la taille de la position ? Je voudrais que ma SL représente 1% de mon capital soit 10$/€. Et mon TP étant 1.5xSL alors il vaut 15$/€. Autrement pour chaque trade perdant, je perds 10$/€ et pour chaque trade gagnant, je gagne 15$/€.

    Merci !

    #140549 quote
    Pepe_W
    Participant
    New

    EDIT : Je me rapproche avec ce code mais les questions demeurent présentes :

    // Définition des paramètres du code
    DEFPARAM CumulateOrders = False
    DEFPARAM NoCashUpdate = True
    
    // ============================================================================================================ //
    // =============================================INDICATEURS===================================================== //
    // ============================================================================================================ //
    
    macdLigne = MACDline[12,26,9](close)
    signalLigne = MACDSignal[12,26,9](close)
    ema200 = ExponentialAverage[200](close)
    
    // ============================================================================================================ //
    // ===========================================MONEY MANGEMENT================================================== //
    // ============================================================================================================ //
    
    capital = 1000
    pourcentageRisk = 0.01
    equity = capital + StrategyProfit
    risk = round(equity*pourcentageRisk)
    
    // ============================================================================================================ //
    // =========================================LONG POSITIONS===================================================== //
    // ============================================================================================================ //
    
    // LONG CONDITIONS
    longCondition1 = (macdLigne CROSSES OVER signalLigne)
    longCondition2 = (macdLigne < 0) AND (signalLigne < 0)
    longCondition3 = (close > ema200)
    longCondition = longCondition1 AND longCondition2 AND longCondition3
    
    // SET LA STOPLOSS
    IF longCondition THEN
      longSL = Lowest[10](close)[1]
    ELSE
      longSL = longSL[1]
    ENDIF
    
    // SET LE TAKE PROFIT
    longEntryPrice = close
    longTailleSL = ABS(longEntryPrice - longSL)
    IF longCondition THEN
      longTP = close + (1.5 * longTailleSL)
    ELSE
      longTP = longTP[1]
    ENDIF
    
    // REGLER LA TAILLE DE LA POSITION
    longPositionSize = abs(round((risk/longSL)/PointValue)*pipsize)
    
    // STRATEGY ENTRY
    IF longCondition then
      BUY longPositionSize CONTRACTS AT MARKET
    ENDIF
    
    // STRATEGY EXIT
    IF longCondition THEN
      SET STOP LOSS longSL
      SET TARGET PROFIT longTP
    ENDIF
    
    // AFFICHER SL ET TP
    IF ONMARKET THEN
      longPlotSL = longSL
      longPlotTP = longTP
    ELSE
      longPlotSL = 0
      longPlotTP = 0
    ENDIF
    
    GRAPH longPlotSL COLOURED(255,82,82) AS "LONG SL"
    GRAPH longPlotTP COLOURED(65,140,71) AS "LONG TP"
Viewing 7 posts - 1 through 7 (of 7 total)
  • You must be logged in to reply to this topic.

Conversion strategy() Pinescript en ProBacktest


ProOrder : Trading Automatique & Backtests

New Reply
Author
author-avatar
Pepe_W @pepe_w Participant
Summary

This topic contains 6 replies,
has 2 voices, and was last updated by Pepe_W
5 years, 7 months ago.

Topic Details
Forum: ProOrder : Trading Automatique & Backtests
Language: French
Started: 07/30/2020
Status: Active
Attachments: 4 files
Logo Logo
Loading...