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)
– 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
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 🙂
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
Non je parlai du code que tu pourras faire toi même sous ProBacktest avec l’assistant de création simplifiée.
Ok ça marche je vais pousser au maximum que je peux et je reviens ici dès que je suis bloqué !
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 !
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"