Conversione della strategia dal software di trading Pine Script

Forums ProRealTime forum Italiano Supporto ProBuilder Conversione della strategia dal software di trading Pine Script

  • This topic has 3 replies, 2 voices, and was last updated 5 days ago by avatarIván.
Viewing 4 posts - 1 through 4 (of 4 total)
  • #244959

    Chiedo per favore di convertire la mia strategia scritta con Pine Script. Grazie.

    //////////////////////////////INIZIO STRATEGIA “@DP – XAUUSD – Strtg”///////////////////////////////////

    //definizione del range di date entro le quali vengono aperte le nuove transazioni, sia long che short

    yearStart = 2000 //anno di inizio

    monthStart = 01 //mese di inizio

    dayStart = 01 //giorno di inizio

    hourStart = 00 //ora di inizio

    minuteStart = 00 //minuto di inizio

    secondStart = 00 //secondo di inizio

    yearEnd = 2999 //anno di fine

    monthEnd = 12 //mese di fine

    dayEnd = 31 //giorno di fine

    hourEnd = 23 //ora di fine

    minuteEnd = 59 //minuto di fine

    secondEnd = 59 //secondo di fine

    //verifica che la data attuale sia compresa nel range di date definito sopra

    dateRange = ((time >= timestamp(syminfo.timezone, yearStart, monthStart, dayStart, hourStart, minuteStart, secondStart)) and (time <= timestamp(syminfo.timezone, yearEnd, monthEnd, dayEnd, hourEnd, minuteEnd, secondEnd))) //dichiarazione variabili utilizzate per aprire e chiudere le transazioni Var spread = 30 //spread applicato ad ogni transazione (espresso in pip) Var pipXunita = 0.010000 //valore di 1 pip per 1 unità (espresso in $) Var delta_TPSL = spread*pipXunita*100 //valore utilizzato per ottimizzare il calcolo di TP e SL Var delta_Plot = 100 //valore utilizzaro per ottimizzare la stampa di TP e SL Var commissioni = spread*pipXunita/2 //commissione applicata ad ogni transazione per 1 unità (espressa in $) Var mrgXunita = 164.83 //costo della leva per 1 unità (espresso in $) Var unita = 1 //numero di unità acquistate ad ogni transazione Var leva = 10 //leva applicata ad ogni transazione Var capitale = mrgXunita*unita*3 //capitale iniziale (espresso in $) Var float TP = 10000+delta_TPSL //TP espresso in 0,1 pip. Il profitto è pari a circa al 100,00% del capitale investito per aprire una transazione, compresa la leva Var float SL = 1000-delta_TPSL //SL espresso in 0,1 pip. La perdita è pari a circa al 10,00% del capitale investito per aprire una transazione, compresa la leva //dichiarazione strategia: Nome strategia, Mostra sul grafico, Valuta in Dollari, Unità acquistate ad ogni transazione, Capitale iniziale, Commissione applicata per ogni unità acquistata Strategy(“@DP – XAUUSD – Strtg”, overlay = true, currency = “USD”, default_qty_type = strategy.fixed, default_qty_value = unita, initial_capital = capitale, commission_type = strategy.commission.cash_per_contract, commission_value = commissioni) //verifica che non sia già stato modificato lo SL nella precedente candela If SL[1]<(1000-delta_TPSL) TP := TP[1] SL := SL[1] //aumento dello SL se la transazione in corso raggiunge o supera un determinato profitto Var profit_Line1 = 10 Var profit_Line2 = 15 Profit_Line1 := profit_Line1[1] Profit_Line2 := profit_Line2[1] For i = 100 to 10 by 5 If (SL>((i*-100)+500-delta_TPSL) and (strategy.openprofit/unita)>i)

    SL := (i*-100)+500-delta_TPSL

    Profit_Line1 := i+5

    Profit_Line2 := i+10

    If i==95 or i==100

    Profit_Line1 := 100

    Profit_Line2 := 100

    Break

    If SL[1]>SL

    Alert(“XAUUSD – Lo SL è aumentato al +”+str.tostring((SL+delta_TPSL)/100*-1)+”%/+”+str.tostring(((SL+delta_TPSL)/100*-1)*unita)+”€”)

    Strategy.exit(“ExitAcq”, “Acq”, profit = TP, loss = SL, comment_profit = “XAUUSD – Exit Long – TP +”+str.tostring((TP-delta_TPSL)/100)+”%/+”+str.tostring(((TP-delta_TPSL)/100)*unita)+”€”, comment_loss = “XAUUSD – Exit Long – SL +”+str.tostring((SL+delta_TPSL)/100*-1)+”%/+”+str.tostring(((SL+delta_TPSL)/100*-1)*unita)+”€”, alert_message = alertcloselong)

    Strategy.exit(“ExitVen”, “Ven”, profit = TP, loss = SL, comment_profit = “XAUUSD – Exit Short – TP +”+str.tostring((TP-delta_TPSL)/100)+”%/+”+str.tostring(((TP-delta_TPSL)/100)*unita)+”€”, comment_loss = “XAUUSD – Exit Short – SL +”+str.tostring((SL+delta_TPSL)/100*-1)+”%/+”+str.tostring(((SL+delta_TPSL)/100*-1)*unita)+”€”, alert_message = alertcloseshort)

    //stampa su grafico di Take Profit, Entry Price e Stop Loss

    //verifica se è aperta una transazione in acquisto o in vendita

    Var posizione_Plot = 0

    If (strategy.position_size>0)

    Posizione_Plot := 1

    If (strategy.position_size<0)

    Posizione_Plot := -1

    //stampa su grafico di Take Profit, Entry Price e Stop Loss

    Var Entry_Price = strategy.opentrades.entry_price(0)

    Var color_EP = bar_index % 2 == 0 ? color.green : #00000000

    Entry_Price := strategy.opentrades.entry_price(0)

    Color_EP := bar_index % 2 == 0 ? color.green : #00000000

    Plot((strategy.opentrades.entry_price(0)+(TP/delta_Plot*posizione_Plot)), title = “TP”, color = color.green, linewidth = 2, style = plot.style_linebr)

    Plot((Entry_Price), title = “EP”, color = color_EP, linewidth = 1, style = plot.style_linebr)

    Plot((strategy.opentrades.entry_price(0)-(SL/delta_Plot*posizione_Plot)), title = “SL”, color = color.gray, linewidth = 2, style = plot.style_linebr)

    //stampa su grafico dell’area nella quale, se una candela “passa” al suo interno, viene aumentato lo SL

    Var Profit_1 = (strategy.opentrades.entry_price(0)+(profit_Line1*posizione_Plot/delta_Plot*100))

    Var color_P1 = color.green

    Var Profit_2 = (strategy.opentrades.entry_price(0)+(profit_Line2*posizione_Plot/delta_Plot*100))

    Var color_P2 = color.green

    Var color_Fill_Area = color.rgb(191, 244, 193)

    Profit_1 := (strategy.opentrades.entry_price(0)+(profit_Line1*posizione_Plot/delta_Plot*100))

    Color_P1 := color.green

    Profit_2 := (strategy.opentrades.entry_price(0)+(profit_Line2*posizione_Plot/delta_Plot*100))

    Color_P2 := color.green

    Color_Fill_Area := color.rgb(191, 244, 193)

    Fill_1 = plot((Profit_1), title = “P1”, color = color_P1, linewidth = 1, style = plot.style_linebr)

    Fill_2 = plot((Profit_2), title = “P2”, color = color_P2, linewidth = 1, style = plot.style_linebr)

    Fill(Fill_1, Fill_2, color = color_Fill_Area)

    //calcolo degli indicatori

    Ema = ta.ema(close, 21)

    [middleBand, upperBand, lowerBand] = ta.bb(close, 20, 2)

    highestClose = ta.highest(close, 850)

    lowestClose = ta.lowest(close, 850)

    change = ta.change(close, 14)

    atr = ta.atr(14)

    [macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)

    rsiValue = ta.rsi(close, 14)

    stochD = ta.stoch(close, high, low, 14)

    //stampa su grafico degli indicatori

    //EMA21

    Plot(ema, color = color.orange)

    //Bande di Bollinger

    Plot(middleBand, color = color.blue)

    Fill_A = plot(upperBand, color = color.red)

    Fill_B = plot(lowerBand, color = color.green)

    Color_Fill_BB = color.new(#007FFF, 95)

    Fill(Fill_A, Fill_B, color = color_Fill_BB)

    //Etichetta

    Atr_Plot = atr

    If change<0

    Atr_Plot := atr*-1

    Color_Label = color.new(#007FFF, 100)

    Label_1 = label.new(chart.point.now(), “Highest: “+str.tostring(highestClose)+” / Lowest: “+str.tostring(lowestClose)+”\nChange: “+str.tostring(change, “###.###”)+” / ATR: “+str.tostring(atr_Plot, “###.###”)+”\nMACD: “+str.tostring(macdLine, “###.###”)+” / Signal: “+str.tostring(signalLine, “###.###”)+”\nRSI: “+str.tostring(rsiValue, “###.###”)+” / Stoch: “+str.tostring(stochD, “###.###”), style = label.style_label_left, color = color_Label, textcolor = color.purple)

    Label.delete(label_1[1])

    Label_2 = label.new(chart.point.now(), “\n\n\n\n\n\nStrg XAUUSD – Max +”+str.tostring(strategy.opentrades.max_runup(0)/unita, “###.###”)+”% / Min –“+str.tostring(strategy.opentrades.max_drawdown(0)/unita, “###.###”)+”%\n”, style = label.style_label_left, color = color_Label, textcolor = color.purple)

    Label.delete(label_2[1])

    Plot(highestClose, color = #27b097, display = display.status_line)

    Plot(lowestClose, color = #27b097, display = display.status_line)

    Plot(change, color = color.purple, display = display.status_line)

    Plot(atr_Plot, color = color.purple, display = display.status_line)

    Plot(macdLine, color = #27b097, display = display.status_line)

    Plot(signalLine, color = #27b097, display = display.status_line)

    Plot(rsiValue, color = color.purple, display = display.status_line)

    Plot(stochD, color = color.purple, display = display.status_line)

    Plot(strategy.opentrades.max_runup(0)/unita, color = #27b097, display = display.status_line)

    Plot(strategy.opentrades.max_drawdown(0)/unita, color = color.red, display = display.status_line)

    //calcolo delle variabili per l’apertura di posizioni long

    Longcondition1 = (macdLine>0.00 and rsiValue<30 and stochD<20)

    //apertura posizioni long se si verificano le condizioni di cui sopra (senza transazione in corso)

    If (dateRange and strategy.position_size==0 and (strategy.closedtrades==0 or (strategy.closedtrades>=1 and ((bar_index – strategy.closedtrades.exit_bar_index(strategy.closedtrades – 1))>=2))) and longcondition1)

    Profit_Line1 := 10

    Profit_Line2 := 15

    SL := 500-delta_TPSL

    Strategy.entry(“Acq”, strategy.long, comment = “XAUUSD1 – Open Long – TP +”+str.tostring((TP-delta_TPSL)/100)+”%/+”+str.tostring(((TP-delta_TPSL)/100)*unita)+”€ – SL –“+str.tostring((SL+delta_TPSL)/100)+”%/-“+str.tostring(((SL+delta_TPSL)/100)*unita)+”€”, alert_message = alertlong)

    Strategy.exit(“ExitAcq”, “Acq”, profit = TP, loss = SL, comment_profit = “XAUUSD1 – Exit Long – TP +”+str.tostring((TP-delta_TPSL)/100)+”%/+”+str.tostring(((TP-delta_TPSL)/100)*unita)+”€”, comment_loss = “XAUUSD1 – Exit Long – SL –“+str.tostring((SL+delta_TPSL)/100)+”%/-“+str.tostring(((SL+delta_TPSL)/100)*unita)+”€”, alert_message = alertcloselong)

    //calcolo delle variabili per l’apertura di posizioni short

    Shortcondition1 = (macdLine<0.00 and rsiValue>70 and stochD>80)

    //apertura posizioni short se si verificano le condizioni di cui sopra (senza transazione in corso)

    If (dateRange and strategy.position_size==0 and (strategy.closedtrades==0 or (strategy.closedtrades>=1 and ((bar_index – strategy.closedtrades.exit_bar_index(strategy.closedtrades – 1))>=2))) and shortcondition1)

    Profit_Line1 := 10

    Profit_Line2 := 15

    SL := 500-delta_TPSL

    Strategy.entry(“Ven”, strategy.short, comment = “XAUUSD1 – Open Short – TP +”+str.tostring((TP-delta_TPSL)/100)+”%/+”+str.tostring(((TP-delta_TPSL)/100)*unita)+”€ – SL –“+str.tostring((SL+delta_TPSL)/100)+”%/-“+str.tostring(((SL+delta_TPSL)/100)*unita)+”€”, alert_message = alertshort)

    Strategy.exit(“ExitVen”, “Ven”, profit = TP, loss = SL, comment_profit = “XAUUSD1 – Exit Short – TP +”+str.tostring((TP-delta_TPSL)/100)+”%/+”+str.tostring(((TP-delta_TPSL)/100)*unita)+”€”, comment_loss = “XAUUSD1 – Exit Short – SL –“+str.tostring((SL+delta_TPSL)/100)+”%/-“+str.tostring(((SL+delta_TPSL)/100)*unita)+”€”, alert_message = alertcloseshort)

    //calcolo delle variabili per l’apertura di posizioni long

    Longcondition2 = (open-close<0.00 and openema and openupperBand and change>atr and macdLine>0.00 and macdLine>signalLine)

    //apertura posizioni long se si verificano le condizioni di cui sopra (senza transazione in corso)

    If (dateRange and strategy.position_size==0 and (strategy.closedtrades==0 or (strategy.closedtrades>=1 and ((bar_index – strategy.closedtrades.exit_bar_index(strategy.closedtrades – 1))>=2))) and longcondition2)

    Profit_Line1 := 10

    Profit_Line2 := 15

    SL := 1000-delta_TPSL

    Strategy.entry(“Acq”, strategy.long, comment = “XAUUSD2 – Open Long – TP +”+str.tostring((TP-delta_TPSL)/100)+”%/+”+str.tostring(((TP-delta_TPSL)/100)*unita)+”€ – SL –“+str.tostring((SL+delta_TPSL)/100)+”%/-“+str.tostring(((SL+delta_TPSL)/100)*unita)+”€”, alert_message = alertlong)

    Strategy.exit(“ExitAcq”, “Acq”, profit = TP, loss = SL, comment_profit = “XAUUSD2 – Exit Long – TP +”+str.tostring((TP-delta_TPSL)/100)+”%/+”+str.tostring(((TP-delta_TPSL)/100)*unita)+”€”, comment_loss = “XAUUSD2 – Exit Long – SL –“+str.tostring((SL+delta_TPSL)/100)+”%/-“+str.tostring(((SL+delta_TPSL)/100)*unita)+”€”, alert_message = alertcloselong)

    //calcolo delle variabili per l’apertura di posizioni short

    Shortcondition2 = (open-close>0.00 and open>ema and closelowerBand and close=1 and ((bar_index – strategy.closedtrades.exit_bar_index(strategy.closedtrades – 1))>=2))) and shortcondition2)

    Profit_Line1 := 10

    Profit_Line2 := 15

    SL := 1000-delta_TPSL

    Strategy.entry(“Ven”, strategy.short, comment = “XAUUSD2 – Open Short – TP +”+str.tostring((TP-delta_TPSL)/100)+”%/+”+str.tostring(((TP-delta_TPSL)/100)*unita)+”€ – SL –“+str.tostring((SL+delta_TPSL)/100)+”%/-“+str.tostring(((SL+delta_TPSL)/100)*unita)+”€”, alert_message = alertshort)

    Strategy.exit(“ExitVen”, “Ven”, profit = TP, loss = SL, comment_profit = “XAUUSD2 – Exit Short – TP +”+str.tostring((TP-delta_TPSL)/100)+”%/+”+str.tostring(((TP-delta_TPSL)/100)*unita)+”€”, comment_loss = “XAUUSD2 – Exit Short – SL –“+str.tostring((SL+delta_TPSL)/100)+”%/-“+str.tostring(((SL+delta_TPSL)/100)*unita)+”€”, alert_message = alertcloseshort)

    ///////////////////////////////FINE STRATEGIA “@DP – XAUUSD – Strtg”////////////////////////////////////

    #244977

    Buongiorno. A dire il vero, mi è impossibile tradurre questo codice così come lo hai condiviso. Sto provando a trasferirlo in Trading View, ma è pieno di errori… Non riesco a vederlo in Trading View e la struttura condizionale rende impossibile seguirlo. Se puoi pubblicarlo su TradingView e condividere il link, posso aiutarti. Altrimenti, lo trovo difficile…

    #244980

    Buongiorno, hai ragione e mi scuso per il copia-incolla del codice venuto male. Ho tolto tutta la roba extra non necessaria e ti riallego il file con il contenuto del codice corretto (te lo riporto anche sotto). Spero che così sia più semplice convertirlo. Grazie in anticipo!

     

    // @version=5

     

    //dichiarazione variabili utilizzate per aprire e chiudere le transazioni

    var spread = 30                                     //spread applicato ad ogni transazione (espresso in pip)

    var valorePip = 0.010000                            //valore di 1 pip per 1 contratto (espresso in $)

    var delta_TPSL = spread*valorePip*100               //valore utilizzato per ottimizzare il calcolo di TP e SL

    var commissioni = spread*valorePip/2                //commissione applicata ad ogni transazione per 1 contratto (espressa in $)

    var contratto = 1                                   //numero di contratti acquistati ad ogni transazione

    var float TP = 10000+delta_TPSL                     //TP espresso in 0,1 pip. Il profitto è pari a circa al 100,00% del capitale investito per aprire una transazione, compresa la leva

    var float SL = 1000-delta_TPSL                      //SL espresso in 0,1 pip. La perdita è pari a circa al 10,00% del capitale investito per aprire una transazione, compresa la leva

     

    //dichiarazione strategia: Nome strategia, Mostra sul grafico, Valuta in Dollari, Contratti acquistati ad ogni transazione, Commissione applicata per ogni contratto acquistato

    strategy(“Pine Script – Strategy”, overlay = true, currency = “USD”, default_qty_type = strategy.fixed, default_qty_value = contratto, commission_type = strategy.commission.cash_per_contract, commission_value = commissioni)

     

    //verifica che non sia già stato modificato lo SL nella precedente candela

    if SL[1]<(1000-delta_TPSL)

    TP := TP[1]

    SL := SL[1]

     

    //aumento dello SL se la transazione in corso raggiunge o supera un determinato profitto

    for i = 100 to 10 by 5

    if (SL>((i*-100)+500-delta_TPSL) and (strategy.openprofit/contratto)>i)

    SL := (i*-100)+500-delta_TPSL

    break

    if SL[1]>SL

    strategy.exit(“ExitAcq”, “Acq”, profit = TP, loss = SL)

    strategy.exit(“ExitVen”, “Ven”, profit = TP, loss = SL)

     

    //calcolo degli indicatori

    ema = ta.ema(close, 21)

    [middleBand, upperBand, lowerBand] = ta.bb(close, 20, 2)

    change = ta.change(close, 14)

    atr = ta.atr(14)

    [macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)

    rsiValue = ta.rsi(close, 14)

    stochD = ta.stoch(close, high, low, 14)

     

    //calcolo delle variabili per l’apertura di posizioni long

    longcondition1 = (macdLine>0.00 and rsiValue<30 and stochD<20)

    //apertura posizioni long se si verificano le condizioni di cui sopra (senza transazione in corso)

    if (strategy.position_size==0 and longcondition1)

    SL := 500-delta_TPSL

    strategy.entry(“Acq”, strategy.long)

    strategy.exit(“ExitAcq”, “Acq”, profit = TP, loss = SL)

     

    //calcolo delle variabili per l’apertura di posizioni short

    shortcondition1 = (macdLine<0.00 and rsiValue>70 and stochD>80)

    //apertura posizioni short se si verificano le condizioni di cui sopra (senza transazione in corso)

    if (strategy.position_size==0 and shortcondition1)

    SL := 500-delta_TPSL

    strategy.entry(“Ven”, strategy.short)

    strategy.exit(“ExitVen”, “Ven”, profit = TP, loss = SL)

     

    //calcolo delle variabili per l’apertura di posizioni long

    longcondition2 = (open-close<0.00 and open<ema and close>ema and open<upperBand and close>upperBand and change>atr and macdLine>1.00 and macdLine>signalLine)

    //apertura posizioni long se si verificano le condizioni di cui sopra (senza transazione in corso)

    if (strategy.position_size==0 and longcondition2)

    SL := 1000-delta_TPSL

    strategy.entry(“Acq”, strategy.long)

    strategy.exit(“ExitAcq”, “Acq”, profit = TP, loss = SL)

     

    //calcolo delle variabili per l’apertura di posizioni short

    shortcondition2 = (open-close>0.00 and open>ema and close<ema and open>lowerBand and close<lowerBand and change<(atr*-1) and macdLine<-1.00 and macdLine<signalLine)

    //apertura posizioni short se si verificano le condizioni di cui sopra (senza transazione in corso)

    if (strategy.position_size==0 and shortcondition2)

    SL := 1000-delta_TPSL

    strategy.entry(“Ven”, strategy.short)

    strategy.exit(“ExitVen”, “Ven”, profit = TP, loss = SL)

    #245094

    Bene, eccoti qui.

Viewing 4 posts - 1 through 4 (of 4 total)

Create your free account now and post your request to benefit from the help of the community
Register or Login