Ancora sul passaggio di variabili

Forums ProRealTime forum Italiano Supporto ProBuilder Ancora sul passaggio di variabili

Viewing 15 posts - 1 through 15 (of 15 total)
  • #215202

    Buongiorno a tutti. Ho continuato a sviluppare robot con il metodo di realizzare uno script Pro-Order che chiama al suo interno uno script Pro-Builder che contiene tutti gli indici e le variabili che servono a decidere quando entrare a mercato e come, comunicando allo script Pro-Order i segnali di apertura, chiusura etc…. Questo perchè mi consente di disegnare a video quello che faccio indicando anche i livelli di Stoploss e Takeprofit, cosa che non potrei fare da dentro uno script Pro-Order.

    Di conseguenza uso molto i metodi di passaggio delle variabili tra i due script cioè:

    • passo da Pro-Order a Pro-Builder le varibili tramite l’istruzione CALL
    • Prendo altre variabili (segnali, etc…) dallo script Pro-Builder tramite la funzione RETURN

    finora tutto bene, perchè le varibili passate da PO a PB erano di fatto delle costanti impostate al running (quelle che si possono impostare con il simbolino della chiave inglese).

    Quando però ho tentato di passare nella CALL una varibile calcolata da PO, mi sono accorto che il valore di questa variabile non cambia come dovrebbe essere ma rimane congelata al primo ciclo di calcolo.

    Esempio:

    pippo=EndPointAverage[epa](POSITIONPERF)
    pippo1=LinearRegressionSlope[20](pippo)
    if pippo1>0 then
    superpippo=1
    else
    superpippo=-1
    endif

    signalbuy, signalshort, logex, shotex, unitsize, ptp, psl, trail, ema1, ema2, ema3 = CALL “ENDPOINTZL-STRATEGY 1.0 T” [mtp, msl, openlong, openshort, maxloss, ATRscale, trail, reduperc, EMA12lenght, EMA3lenght, mm, pippo, superpippo]

    In pratica monitorando la variabile superpippo, mi sono accorto che questa cambia regolarmente ad ogni calcolo ma quello che viene passato nella CALL rimane congelato al primo giro di calcolo.

    come si può ovviare a questa cosa ?

     

    Grazie

    #215256

    Forse hai lasciato quella variabile settata nel codice dell’indicatore.

    Se usi questo indicatore, che ho chiamato indPROVA (con Variabile aggiunta alle variabili dell’indicatore, tramite la chiave inglese):

    ed utilizzi questo codice:

    funzionerà regolarmente.

    Se, tuttavia, dimentichi di commentare la linea 1 nell’indicatore:

    allora il dato che tu gli invii sarà sempre sovrascritto da quello che hai indicato alla riga 1 ed il risultato non cambierà mai.

    Se non fosse questo il motivo,  allora occorre vedere il codice.

     

     

     

     

    #215324

    Ti ringrazio Roberto ma è esattamente quello che ho fatto con alcune differenze.

    Provo a scrivere qui sotto un codice semplificato.

    //ricavo la variabile che devo passare all’indicatore tramite un altro indicatore

    pippo=EndPointAverage[11](POSITIONPERF)
    pippo1=LinearRegressionSlope[20](pippo)
    if pippo1>0 then
    superpippo=1
    else
    superpippo=-1
    endif

    //quindi passo le due variabili pippo e superpippo all’indicatore tramite la call

    signalbuy, signalshort = CALL “ind_pippo” [pippo, superpippo]

     

    A questo punto tramite l’istruzione call e la return dell’indicatore chiamato “ind_pippo”, confronto i risultati e mentre pippo e superpippo visualizzati con la graph cambiano, candela per candela, quelli passati all’indicatore ind_pippo e visualizzati nel pannello variabili tramite return,  rimangono statici.

     

    #215325

    Intendi dire che questi due dati variano:

    mentre questi due no:

    se è così, il problema dovrebbe essere nell’indicatore.

     

     

    #215339

    No intendo dire che :

    graph Pippo
    graph Superpippo
    Variano correttamente  ma quando li ricevo dalla return non sono uguali a quelli della graph e sono sempre gli stessi, non variano
    #215352

    I dati che ricevi sono signalbuy e signalshort. Non capisco cosa intendi dire.

     

    #215358

    Scusami ma sono nel pieno marasma. Non capisco cosa succede, se lo script lo faccio semplice questa istruzione messa in pro-order funziona:

    clf=EndPointAverage[epa](POSITIONPERF)

    Appena aggiungo delle cose, anche non legate a quella istruzione, non funziona più.

    Se poi vado a commentare le istruzioni appena immesse, continua a non funzionare anche se, di fatto dovrebbe essere come prima.

    Se cancello fisicamente le istruzioni che avevo commentato, ricomincia a funzionare.

    Mi devo fermare perchè è evidente che c’è qualcosa che non capisco.

    #215361

    No so, a me pare funzioni:

    hai tenuto presente che POSITIONPERF è 0 quando non si è a mercato?

    Quindi ci sono tratti, quelli più lunghi di 10 periodi,  in cui sia CLF che POSITIONPERF sono 0 (vedi riquadri ARANCIONI nella foto) ed altri in cui POSITIONPERF è 0 da meno di 10 periodi, per cui CLF viene valorizzata comunque dalla media delle barre precedenti (vedi riquadri ROSSI nella stessa foto).

     

    #215371

    così funziona anche a me. Il problema è quando passo il dato di clf ad un custom indicator. Credo che non sia possibile passare variabile dinamiche ma solo statiche.

    Ora faccio l’ennesima prova per vedere se è vero.

    Grazie comunque dell’aiuto

    #215372

    allora ecco la prova che ho fatto che mi conferma quello che pensavo, cioè posso passare solo costanti, non varibili dinamiche.

    questo il codice del pro-builder “test passaggio var strate”

    ——Variabile stratsma

    once emasma = 0
    emasma = average[20,1](stratsma)
    return emasma


    questo il codice del Pro-Order “test passaggio var order”

    //ONCE epa = 10
    //clf=EndPointAverage[epa](POSITIONPERF)
    sma=average[20,0](close)
    oremasma=call “test passaggio var strate” [sma]

    IF close CROSSES OVER Average[10,0](close) THEN
    BUY at Market
    ENDIF
    IF close CROSSES UNDER Average[10,0](close) AND LongOnMarket THEN
    SELL at Market
    ENDIF
    SET TARGET pPROFIT 200
    SET STOP pLOSS 100
    graph PositionPerf coloured(“Red”)
    //graph clf coloured(“Lime”)
    graph sma coloured(“Lime”)
    graph oremasma coloured( “white”)


    che produce l’immagine in allegato. Come puoi vedere la variabile emasma che torna dall’indice, ha valore sempre 1 mnìentre essendo una EMA di una SMA dovrebbe cambiare parecchio. Inoltre quando torna indietro al Pro_order che lo chiama assumel lo stesso valore di SMA.

    come la risolviamo ?

     

    #215374

    così si vede ancora meglio, ho duplicato variabili e calcoli per vedere cosa succede dentro a pro-build e pro-ord.

    Script pro-ord “test passaggio var order”

    //ONCE epa = 10
    clf=EndPointAverage[10](POSITIONPERF)
    orpositionperf = POSITIONPERF
    sma=average[20,0](close)
    oremasma, orclf=call “test passaggio var strate” [sma, orpositionperf]

    IF close CROSSES OVER Average[10,0](close) THEN
    BUY at Market
    ENDIF
    IF close CROSSES UNDER Average[10,0](close) AND LongOnMarket THEN
    SELL at Market
    ENDIF
    SET TARGET pPROFIT 200
    SET STOP pLOSS 100
    graph PositionPerf coloured(“Red”)
    graph clf+2 coloured(“Lime”)
    graph sma coloured(“grey”)
    graph oremasma coloured( “white”)

    graph orclf coloured (“green”)

    ————————————————————————————————

    script pro-build “test passaggio var strate”

    variabili stratsma, positionp

    once emasma = 0
    once positionp = 0
    emasma = average[20,1](stratsma)
    clf=EndPointAverage[10](positionp)
    return emasma as “stemasma”, clf as “stclf”

    lo stesso calcolo non ritorna nulla sul grafico dell’indice

     

     

    #215377

    Ah… solo adesso con la foto ho capito cosa vuoi dire.

    Non è possibile. Le strategie non hanno un rapporto con gli indicatori sul grafico, i quali, a loro volta, non sanno niente delle strategie che girano e che li stanno utilizzando.

    Quando viene creato il file ITF, al suo interno c’è una copia di tutti gli indicatori usati e sono questi che lavorano, quelli sul grafico è come fossero indicatori diversi.

    Se fai un indicatore SOLO per la strategia, non ha senso che tu lo metta sul grafico, resterà sempre con i valori iniziali.

     

    #215394

    si l’ho capito anch’io, facevo un errore di principio.

    Comunque si riesce a fare TS che ti fanno vedere tutto quello che succede sul grafico. Io ne ho realizzati diversi. Basta mettere tutta la logica di apertura e chiusura dentro all’indicatore e passare solo il segnale alla parte Pro-Order. Funza benissimo.

    In questo caso non và perchè ho il problema che il dato che mi serve lo posso prendere solo dentro a Pro-Order [Positionperf] e quindi il trasporto funziona solo dallo script pro-order all’indice richiamato non a quello che visualizzo.

    Questo è un limite importante di ProRealTime che avevo notato fin dall’inizio e che mi sono dimenticato.

    Conosci altri modi per avere il dato di equity oppure il Positionperf in uno script pro-builder ?

    #215464

    L’unico modo sarebbe creare un indicatore che simuli le entrate, le uscite, con stop loss, take profit ed eventuali trailing stop e gestione lotti.

    In pratica devi inserire la strategia all’interno dell’indicatore, dove al posto di BUY, SELLSHORT, SELL ed EXITSHORT metti delle variabili che ti indicano che sei a mercato, Long o Short, oppure no. Ovviamente devi farti tutti i calcolo di quando lo stop loss o il tale profit vengono colpiti, profitti e perdite per simulare POSITIONPERF ed eventualmente STRATEGYPROFIT.

    Non è che sia enormemente complicato, un pò lo è, ma è particolarmente lungo a farsi.

    Ti ho codificato questo, con un pò di tempo, dove manca il Trailing Stop, la Gestione dei Lotti (position sizing) e PositionPerf è calcolato in pips (sotto al calcolo ti ho messo una riga commentata per avere in alternativa il dato in denaro). Se la desideri in % come l’originale basta che modifichi il calcolo.

    Ovviamente non tiene conto dello Spread, non ha una gestione degli ordini pendenti e non considera lo slippage che può esserci in reale o demo

    L’indicatore puoi metterlo sia SUL grafico che SOTTO di esso (o anche entrambi), come puoi vedere dalla foto.

    L’entrata è una freccia gialla messa sotto la barra di entrata, ma puoi mettere 1 alla variabile BarraFreccia per ottenere lo stesso effetto del backtest.

     

     

    #215495

    ti ringrazio molto Roberto, lo avevo già fatto. Stavo solo cercando un metodo semplice per gestire la equity e switchare on/off il robot quando la equity cambia direzione.

    Se PRT mi avesse dato la possibilità di accedere ai dati della equity da pro-builder sarebbe stato tutto più facile.

    Niente, mi rassegnerò a dovermi calcolare tutto da solo.

    Grazie per l’aiuto

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

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