Traduire code Pine script vers prorealtime (stratégie renko et RSI)
Forums › ProRealTime forum Français › Support ProOrder › Traduire code Pine script vers prorealtime (stratégie renko et RSI)
- This topic has 36 replies, 3 voices, and was last updated 6 years ago by Nicolas.
-
-
05/15/2018 at 12:47 AM #70443
Bonjour,
j’ai codé une stratégie sur pine script de chez tradingview et j’aimerais convertir cet algo vers prorealtime par soucis de plateforme.
Savezvous ou est-ce que je pourrais faire ca et avec quelqu’un de confiance ?
merci d’avance
05/15/2018 at 6:45 AM #70452On peut le faire faire ici gratuitement sur le forum, et nous sommes tous de confiance 🙂
Pour les demandes de programmation privées et confidentielles, il faut passer par le service de programmation.
05/15/2018 at 8:25 AM #70463Super!
Alors voici mon code:
Il faut d’abord mettre le graphique avec Renko puis la strategie peut être appliquée dans tradingview. Après avoir mis le graphique en Renko, on applique un RSI sur celui-ci et enfin on mets 2 moyenne mobiles sur ce rsi. Une court terme et une long terme. Ces moyennes mobiles vont créer les ordres de trades. On entrera dans un trade uniquement si la ‘Standard Deviation’ de x périod passée sera supérieur à une valeur fixe.
J’ai masqué certaines valeurs de paramètres allant de PERIODRSI et de VALEUR1 à 4. Je les rentrerai manuellement après votre contribution.
On applique un risk management de lors que la taille de la position dépend de la balance du compte. La quantité pour entrer dans la position fera que si le stop loss est touché, ce sera équivalent à une perte en capital de 1%. Aussi ajouté un trailing stop si possible
Cette stratégie sera appliquée sur des CFD dont dans le risk management il faudra prendre en compte la valeur d’un point je présume.
Merci beaucoup d’avance
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586//@version=3strategy(title = "Strategy Code Example 2", shorttitle = "Strategy Code Example 2", overlay = true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 50, currency = currency.GBP, commission_type = strategy.commission.percent, commission_value = 0.1)// RENKO INITrenko_t = renko(tickerid, "open", "ATR", 10)renko_low = security(renko_t, period, low)plot(renko_low)// RSI INITsrc = renko_low, len = input(PERIODRSI, minval=1, title="Length")up = rma(max(change(src), 0), len)down = rma(-min(change(src), 0), len)rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))plot(rsi, color=green, linewidth=3)// STANDARD DEVIATIONlength = input(20, minval=1)src5 = input(close, title="Source")stdev = stdev(src5, length)plot(stdev, color=blue)// MA's INIT// === GENERAL INPUTS ===/// a couple of ma's..maFast = ema(rsi, VALEUR1)maSlow = ema(rsi, VALEUR2)// === STRATEGY RELATED INPUTS ===tradeInvert = input(defval = false, title = "Invert Trade Direction?")// the risk management inputsinpTakeProfit = input(defval = 1200, title = "Take Profit", minval = 0)inpStopLoss = input(defval = 400, title = "Stop Loss", minval = 0)inpTrailStop = input(defval = 400, title = "Trailing Stop Loss", minval = 0)inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)// === RISK MANAGEMENT VALUE PREP ===// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : nauseStopLoss = inpStopLoss >= 1 ? inpStopLoss : nauseTrailStop = inpTrailStop >= 1 ? inpTrailStop : nauseTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na// === PLOTTING ===fast = plot(maFast, title = "Fast MA", color = green, linewidth = 2, style = line, transp = 50)slow = plot(maSlow, title = "Slow MA", color = red, linewidth = 2, style = line, transp = 50)// === LOGIC ===// is fast ma above slow ma?aboveBelow = maFast >= maSlow ? true : false// are we inverting our trade direction?tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false// === STRATEGY - LONG POSITION EXECUTION ===enterLong() => not tradeDirection[1] and tradeDirection and stdev[VALEUR4] >= VALEUR 3 // functions can be used to wrap up and work out complex conditionsexitLong() => tradeDirection[1] and not tradeDirection// === STRATEGY - SHORT POSITION EXECUTION ===enterShort() => tradeDirection[1] and not tradeDirection and stdev[VALEUR4] >= VALEUR3exitShort() => not tradeDirection[1] and tradeDirection// TRADING STARTEGY AND PARAMETERStestStartYear = input(2012, "Backtest Start Year")testStartMonth = input(1, "Backtest Start Month")testStartDay = input(2, "Backtest Start Day")testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)testStopYear = input(2018, "Backtest Stop Year")testStopMonth = input(5, "Backtest Stop Month")testStopDay = input(13, "Backtest Stop Day")testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)if time >= testPeriodStartif time <= testPeriodStopstrategy.entry(id = "Long", long = true, when = enterLong()) // use function or simple condition to decide when to get instrategy.entry(id = "Short", long = false, when = enterShort())strategy.close(id = "Long", when = exitLong()) // ...and when to get outstrategy.close(id = "Short", when = exitShort())if time >= testPeriodStartif time <= testPeriodStopstrategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)05/15/2018 at 8:36 AM #70464Une copie d’écran des setups, c’est possible ?
La grosse difficulté c’est que le trading automatique sur des graphiques non corrélés au temps (comme le renko en l’occurrence), n’est pas possible dans ProOrder. On peut toutefois le simuler en calculant les “steps” du prix (dans cette stratégie il semble être en ATR, donc dynamique). Le calcul des indicateurs doit être fait à la main dans le code puisqu’il n’existe pas de tableau de données, et que la création des barres renko n’est pas continu. Je ne suis pas sûr du résultat car cela va impliquer de nombreuses boucles (et pour mémoire, ProBuilder n’est pas fan des boucles ..).
Je suppose que la première étape serait d’arriver à faire un RSI sur des briques Renko simulés.. et sans tableau de données, je vais commencer par ça ! 😯
1 user thanked author for this post.
05/15/2018 at 8:50 AM #7046505/15/2018 at 9:57 AM #70466Je voulais dire: à quoi ressemble les entrées / sorties selon l’indicateur de la version tradingview ?
Les tableaux de données (data arrays) sont un type de variable indispensable en programmation si on veut stocker des informations de façon dynamique. Soit dans chaque “case” du tableau (index), stocker une valeur et la récupérer lorsqu’on en a besoin :
05/15/2018 at 10:07 AM #7047005/15/2018 at 3:18 PM #70483Juste une petite question, je me suis amusé à codé un autre petit algo cet après midi mais je n’arrive pas à faire une chose très simple. J’essaye de mettre un stop loss à 5 points de ma prise de position mais cela est impossible sur l’actif que je trade (50 points mini). J’essaye d’en créer un artificiel avec des pending buy order et sell order.
Je n’arrive pas à le faire avec ce code, savez-vous le faire ? Je veux néanmoins mettre un stoploss à 50 points car cela réduit ma couverture nécessaire pour entre dans le trade.
1234567891011121314151617181920212223242526272829303132// Définition des paramètres du codeDEFPARAM CumulateOrders = True // Cumul des positions désactivé// Conditions pour ouvrir une position acheteuseindicator1 = Average[9](RSI[9](close))indicator2 = Average[15](RSI[9](close))c1 = (indicator1[1] >= indicator2[1])indicator3 = RSI[9](close)c2 = (indicator3 <= 30)// Conditions pour ouvrir une position en vente à découvertindicator4 = Average[9](RSI[9](close))indicator5 = Average[15](RSI[9](close))c3 = (indicator4[1] <= indicator5[1])indicator6 = RSI[9](close)c4 = (indicator6 >= 70)// Trade ordersIF c1 AND c2 THENBUY 1 CONTRACT AT MARKETSELL 1 CONTRACT AT tradeprice(1)-5 LIMITENDIFIF c3 AND c4 THENSELLSHORT 1 CONTRACT AT MARKETBUY 1 CONTRACT AT tradeprice(1)+5 LIMITENDIF// TPSET TARGET pPROFIT 20SET STOP pLOSS 5005/15/2018 at 3:51 PM #70487Il faudrait pour cela modifier les lignes 18 à 27 :
12345678910// Trade ordersIF c1 AND c2 THENBUY 1 CONTRACT AT MARKETSELL 1 CONTRACT AT close-5 LIMITENDIFIF c3 AND c4 THENSELLSHORT 1 CONTRACT AT MARKETexitshort 1 CONTRACT AT close+5 LIMITENDIFSans être certain que le courtier accepte ces ordres LIMIT.
05/15/2018 at 4:00 PM #7048905/15/2018 at 4:45 PM #70500En effet, pour fermer une position de vente il faut utiliser EXITSHORT et non BUY (voir la ligne 9 de mon code qui corrige cette erreur).
Par ailleurs TRADEPRICE(1) faisait référence à l’ordre précédemment ouvert et non celui qui venait de s’ouvrir, TRADEPRICE ayant besoin d’1 période pour se réévaluer.
05/15/2018 at 4:58 PM #7050605/15/2018 at 5:17 PM #70507Sur les lignes 4 et 9, il ne devrait pas y avoir d’ordres STOP au lieu de LIMIT?
05/15/2018 at 5:31 PM #7050905/15/2018 at 6:38 PM #70511Un des problèmes que j’ai trouvé dans le code est que, comme toutes les commandes en attente (pending orders), chaque fois que les bougies sont fermées, elles sont annulées, donc si vous êtes déjà sur le marché, vous devez les entrer de nouveau au début du code
123456IF LongOnMarket ThenSELL AT tradeprice - (5 * pipsize) limitENDIFIF ShortOnMarket thenEXITSHORT AT tradeprice + (5 * pipsize) limitENDIF -
AuthorPosts
Find exclusive trading pro-tools on