Traduire code Pine script vers prorealtime (stratégie renko et RSI)

Viewing 15 posts - 1 through 15 (of 37 total)
  • Author
    Posts
  • #70443 quote
    Horizion
    Participant
    New

    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

    #70452 quote
    Nicolas
    Keymaster
    Master

    On 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.

    #70463 quote
    Horizion
    Participant
    New

    Super!

     

    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

     

    //@version=3
    strategy(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 INIT
    renko_t = renko(tickerid, "open", "ATR", 10)
    renko_low = security(renko_t, period, low)
    plot(renko_low)
    
    
    // RSI INIT
    src = 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 DEVIATION
    length = 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 inputs
    inpTakeProfit   = 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  : na
    useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
    useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
    useTrailOffset  = 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 conditions
    exitLong() => tradeDirection[1] and not tradeDirection
    
    // === STRATEGY - SHORT POSITION EXECUTION ===
    enterShort() => tradeDirection[1] and not tradeDirection and stdev[VALEUR4] >= VALEUR3
    exitShort() => not tradeDirection[1] and tradeDirection
    
    // TRADING STARTEGY AND PARAMETERS
    testStartYear = 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 >= testPeriodStart
        if time <= testPeriodStop
            strategy.entry(id = "Long", long = true, when = enterLong()) // use function or simple condition to decide when to get in
            strategy.entry(id = "Short", long = false, when = enterShort())
    	    strategy.close(id = "Long", when = exitLong()) // ...and when to get out
    	    strategy.close(id = "Short", when = exitShort())
    
    if time >= testPeriodStart
        if time <= testPeriodStop
            strategy.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)
    #70464 quote
    Nicolas
    Keymaster
    Master

    Une 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 ! 😯

    Horizion thanked this post
    #70465 quote
    Horizion
    Participant
    New

    Bonjour

    J’ai peur de pas avoir compris, que voulez-vous dire par sétups ? Et aussi par ‘sans tableau de données’ ?

    #70466 quote
    Nicolas
    Keymaster
    Master

    Je 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 :

    [attachment file=70467]

    450px-Tableau_à_une_dimension.png 450px-Tableau_à_une_dimension.png
    #70470 quote
    Horizion
    Participant
    New

    Ok je vois. Je pensais que c’était quelque chose que je devais vous fournir.

    Pour le sétup vous voulez dire les paramètres de l’algo ? Dans tradingview ?

    #70483 quote
    Horizion
    Participant
    New

    Juste 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.

     

    // Définition des paramètres du code
    DEFPARAM CumulateOrders = True // Cumul des positions désactivé
    
    // Conditions pour ouvrir une position acheteuse
    indicator1 = 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écouvert
    indicator4 = Average[9](RSI[9](close))
    indicator5 = Average[15](RSI[9](close))
    c3 = (indicator4[1] <= indicator5[1])
    indicator6 = RSI[9](close)
    c4 = (indicator6 >= 70)
    
    // Trade orders
    IF c1 AND c2 THEN
    BUY 1 CONTRACT AT MARKET
    SELL 1 CONTRACT AT tradeprice(1)-5 LIMIT
    ENDIF
    
    IF c3 AND c4 THEN
    SELLSHORT 1 CONTRACT AT MARKET
    BUY 1 CONTRACT AT tradeprice(1)+5 LIMIT
    ENDIF
    
    
    // TP
    SET TARGET pPROFIT 20
    SET STOP pLOSS 50
    #70487 quote
    Nicolas
    Keymaster
    Master

    Il faudrait pour cela modifier les lignes 18 à 27 :

    // Trade orders
    IF c1 AND c2 THEN
    BUY 1 CONTRACT AT MARKET
    SELL 1 CONTRACT AT close-5 LIMIT
    ENDIF
     
    IF c3 AND c4 THEN
    SELLSHORT 1 CONTRACT AT MARKET
    exitshort 1 CONTRACT AT close+5 LIMIT
    ENDIF

    Sans être certain que le courtier accepte ces ordres LIMIT.

    #70489 quote
    Horizion
    Participant
    New

    Bizarrement je n’ai pas du tout les mêmes résultats de performance.

    Le code ne doit pas être exécuter de la même manière!

    #70500 quote
    Nicolas
    Keymaster
    Master

    En 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.

    #70506 quote
    Horizion
    Participant
    New

    J’ai bien remplacé par exitshort mais je n’ai toujours pas le résultat escompté..

     

    Les performances sont bien différentes avec un simple stop loss à 5 points, je ne comprends pas pourquoi

    #70507 quote
    robertogozzi
    Moderator
    Master

    Sur les lignes 4 et 9, il ne devrait pas y avoir d’ordres STOP au lieu de LIMIT?

    #70509 quote
    Horizion
    Participant
    New

    Le résultat est le même, j’obtiens des résultats différents qu’n utilisant un SL simple à 5 points.

    #70511 quote
    robertogozzi
    Moderator
    Master

    Un 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

    IF LongOnMarket Then
       SELL AT tradeprice - (5 * pipsize) limit
    ENDIF
    IF ShortOnMarket then
       EXITSHORT AT tradeprice + (5 * pipsize) limit
    ENDIF
Viewing 15 posts - 1 through 15 (of 37 total)
  • You must be logged in to reply to this topic.

Traduire code Pine script vers prorealtime (stratégie renko et RSI)


ProOrder : Trading Automatique & Backtests

New Reply
Author
author-avatar
Horizion @horizion Participant
Summary

This topic contains 36 replies,
has 3 voices, and was last updated by Nicolas
7 years, 10 months ago.

Topic Details
Forum: ProOrder : Trading Automatique & Backtests
Language: French
Started: 05/15/2018
Status: Active
Attachments: 1 files
Logo Logo
Loading...