CANDELA IN CUI E' AVVENUTA L'APERTURA DEL TRADE

Viewing 15 posts - 1 through 15 (of 16 total)
  • Author
    Posts
  • #92509 quote
    Beppe
    Participant
    New

    Buon Giorno,

    qualcuno puo’ aiutarmi a creare una funzione che determini la  candela di tipo Day  in cui e’ avvenuta l’apertura dell’ultima posizione identificando anche il Low e Higt a candela chiusa, per utilizzarli come Stop loss sul trade in corso?

    Nei video tutorial ho intravisto la funzione TRADEINDEX ma non gli si puo’ applicare il Low e l’High, inoltre non la vedo presente nelle “funzioni” aggiuntive per la creazione di indicatori personalizzati, quindi non presente nella memoria del programma e inutilizzabile.

    Vi ringrazio

    Giuseppe

    #92522 quote
    robertogozzi
    Moderator
    Master

    TRADEINDIX è l’indicazione giusta per una strategia, ma tu stai parlando di strategie o indicatori?

    Perché solo una strategia può aprire posizioni, però alla fine parli di indicatori personalizzati, che sono un’altra cosa.

    #92570 quote
    Beppe
    Participant
    New

    Ciao Roberto,

    grazie per avermi risposto, effettivamente avevo visionato solo le funzioni per la creazione degli indicatori ed il TRADEINDEX e’ presente nelle funzioni per la  creazione delle strategie.

    Quello di cui avrei bisogno e’ il Dlow ed il Dhigt di tale funzione (TRADEINDEX) per la creazione di una strategia di uscita da un trade aperto . Infatti, da quel che ho capito, posso solo decidere se tale funzione appartiene all’ultimo ordine lasciando TRADEINDEX(1) oppure tre precedenti ordini mettendo TRADEINDEX(3), ma non e’ possibile impostare il Low o Higt di tale candela.

    Non avendo una buona padronanza del sistema trovo un po’ complicato impostarlo, se riesci a darmi una soluzione ben volentieri.

    Grazie

    #92593 quote
    robertogozzi
    Moderator
    Master

    Intanto ho spostato il topic nel supporto ProOrder, trattandosi di un problema relativo ad una strategia.

    La barra dove è iniziata l’operazione in corso è TRADEINDEX, per cui basta fare la differenza tra BARINDEX (totale barre) e TRADEINDEX per capire di quante barre indietro devi andare per cercare i valori di HIGH e LOW.

    Stiamo parlando di candele DAILY:

    BarraApertura = BARINDEX - TRADEINDEX
    Massimo       = high[BarraApertura]
    Minimo        = low[BarraApertura]
    #92631 quote
    Beppe
    Participant
    New

    Ho provato ad inserire il tuo suggerimento nella strategia che sto testando ma non mi da’ le chiusure che dovrebbe dare .

    provo ad iserirla sul portale , in pratica attivo un acquisto a candela low (a 2 min)quando il prezzo tocca verso il basso una media mobile esp.152 periodi con spostamento verticale -0,86(di tipo giornaliera), e dovrebbe uscire dal trade quando la candela high(a due min) tocca al rialzo una seconda media mobile esp.152 periodi con spostamento verticale -1,8(di tipo giornaliera) oppure in stop loss utilizzando quello che mi hai scritto , ossia quando la candela low(a 2 min) e’ inferiore al Low[BarraApertura](di tipo giornaliero).

    Il test viene eseguito su un grafico a 1 minuto con 100000 barre precaricate nelle x unita’

    // Definizione dei parametri del codice
    DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
    
    // Condizioni per entrare su posizioni long
    TIMEFRAME(2 minute)
    
    a = low
    
    TIMEFRAME(1440 minute)
    
    indicator1 = ExponentialAverage[152](close)*0.982
    
    c1 = (a CROSSES UNDER indicator1)
    
    IF c1 THEN
    BUY 1 CONTRACT AT MARKET
    ENDIF
    
    // Condizioni per uscire da posizioni long
    TIMEFRAME(1440 minute)
    
    indicator2 = ExponentialAverage[152](close)*0.855
    
    ab = BARINDEX-TRADEINDEX
    
    Minimo = low[ab]
    
    TIMEFRAME(2 minute)
    
    b = high
    
    c2 = (b CROSSES OVER indicator2)
    
    C3 = (a<Minimo)
    
    IF c2 or c3 THEN
    SELL AT MARKET
    ENDIF
    Screenshot-27.png Screenshot-27.png Screenshot-28.png Screenshot-28.png
    #92636 quote
    robertogozzi
    Moderator
    Master

    Per scrivere il codice , utilizza il pulsante <> “insert PRT code”, in modo da rendere il codice più comprensibile.

    Grazie.

    #92640 quote
    Beppe
    Participant
    New
    // Definizione dei parametri del codice
    
    DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
    
    // Condizioni per entrare su posizioni long
    TIMEFRAME(2 minute)
    a = low
    
    TIMEFRAME(1440 minute)
    indicator1 = ExponentialAverage[152](close)*0.982
    
    c1 = (a CROSSES UNDER indicator1)
    
    IF c1 THEN
    BUY 1 CONTRACT AT MARKET
    ENDIF
    
    // Condizioni per uscire da posizioni long
    TIMEFRAME(1440 minute)
    indicator2 = ExponentialAverage[152](close)*0.855
    
    ab = BARINDEX - TRADEINDEX
    
    Minimo = low[ab]
    
    
    TIMEFRAME(2 minute)
    b = high
    
    c2 = (b CROSSES OVER indicator2)
    
    C3 = (a<Minimo)
    
    IF c2 or c3 THEN
    SELL AT MARKET
    ENDIF
    
    #92676 quote
    robertogozzi
    Moderator
    Master

    Ci sono vari problemi:

    1. Lo scostamento delle medie è veramente enorme, 0.982 è già molto elevato, perché è l’1.8%, ma l’altro di 0.855 è praticamente quasi impossibile vederlo sul grafico perché ha una distanza dal prezzo del 14.5%, credo sia impossibile da raggiungere (sul DAX assolutamente impossibile, su EUR/USD qualche volta accade)
    2. BarIndex fa riferimento alle barre trascorse di ciascun TF, per cui ha valore diverso secondo il TF dove lo usi, inoltre ha un valore diverso, nello stesso TF, se usi UPDATEONCLOSE oppure no
    3. TradeIndex fa riferimento sempre al TF principale, cioè il più basso utilizzato, nel tuo caso quello ad 1 minuto da cui hai eseguito la strategia

    Per cui il problema è che la riga 22 assegna ad AB un valore sballato.

    Inoltre non ha molto senso eseguirla da un TF ad 1 minuto quando nella strategia il più basso TF che usi è il 2 minuti, perché così facendo “sprechi” un Time Frame (ProOrder ne permette 6, compreso quello di default) ed inoltre hai un minore numero di barre di storico a disposizione.

    #92723 quote
    Beppe
    Participant
    New

    Ciao Roberto, ancora grazie per avermi supportato.

    In realta’ le medie mobili che ho utilizzato sono m.m.esp. 152 scost. vert. -1.25 e la seconda idem con scost.vert. -1,8 entrambe giornaliere.

    Per quanto riguarda i timeframe , a me piacerebbe utilizzare un solo timeframe giornaliero, il problema e’ che l’ attivazione della posizione arriva solo dopo la sua chiusura , quindi nella candela giornaliera successiva, per me troppo tardi dopo aver toccato un determinato indicatore. Ho quindi optato per entrare con timeframe bassi come i 2 minuti . Un altro paletto che ho riscontrato e’ che quando provo a testare in backtest devo farlo con timeframe multipli ma uguali o inferiori a quello piu’ basso utilizzato nel progetto. Non mi e’ chiaro la possibilita’ di avere 6 possibilta’ di timeframe piu’ quello di default per il backtest.

    Per quanto riguarda il TRADEINDEX, che mi crea veramente un vero blocco nell’andare avanti nella progettazione, pensavo che introducendolo all’interno della programmazione nelle righe inerenti al TIMEFRAME(1440 minute) con la colorazione rossastra come per gli indicatori m.m.e. di tipo Day potesse essere visionato dal programma proprio come la candela di tipo Day. L’ UPDATEONCLOSE non so a cosa si riferisca , non l’ ho riscontrato nel glossario della programmazione.

    Se mi potessi aiutare ad inserire un TRADEINDEX all’interno del programma in modo che venga letto di tipo DAY pur usando il backtesting a 2 minuti ti sarei molto grato.

    // Definizione dei parametri del codice
    
    DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
    
    // Condizioni per entrare su posizioni long
    TIMEFRAME(2 minute)
    a = low
    
    TIMEFRAME(1440 minute)
    indicator1 = ExponentialAverage[152](close)*0.982
    
    c1 = (a CROSSES UNDER indicator1)
    
    IF c1 THEN
    BUY 1 CONTRACT AT MARKET
    ENDIF
    
    // Condizioni per uscire da posizioni long
    TIMEFRAME(1440 minute)
    indicator2 = ExponentialAverage[152](close)*0.9875
    
    ab = BARINDEX - TRADEINDEX
    
    Minimo = low[ab]
    
    
    TIMEFRAME(2 minute)
    b = high
    
    c2 = (b CROSSES OVER indicator2)
    
    C3 = (a<Minimo)
    
    IF c2 or c3 THEN
    SELL AT MARKET
    ENDIF
    
    Screenshot-33.png Screenshot-33.png
    #92744 quote
    robertogozzi
    Moderator
    Master

    UpdateOnClose fa aggiornare le variabili solo alla chiusura di quella barra, mentre Default (o niente, viene assunto per difetto se l’ometti) le aggiorna ogni volta che la strategia viene letta ed eseguita, quindi ogni candela del TF principale che è il più piccolo e che viene usato per lanciare la strategia.

    Prova a lanciare questa da un TF a 4 ore e vedi la differenza dei valori delle variabili, candela dopo candela, nella finestra delle variabili che viene aperta da ProBackTest;

    Timeframe(Daily)
    Media1 = average[20,0](close)
    Timeframe(Daily,updateonclose)
    Media2 = average[20,0](close)
    Timeframe(default)
    if Media1 > Media2 then
       Buy at -close limit
    Endif
    Graph Media1
    Graph Media2
    #92754 quote
    Beppe
    Participant
    New

    Ciao Roberto, ho provato ad inserire UpDateOnClose nel T.F. Daily  per far si che avvenisse la lettura delle variabili a fine candela di quel T.F. (Daily) ma non ha risposto come dovuto , infatti se prendi il trade con apertura del giorno 3/10/2018, avrebbe dovuto chiudere in loss in data 08/10/2018 ma ha chiuso in data 11/10/2018.

    Possibile che abbia sbagliato qualcosa nella procedura della programmazione ?

    Grazie

    // Definizione dei parametri del codice
    
    DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
    
    // Condizioni per entrare su posizioni long
    TIMEFRAME(2 minute,updateonclose)
    a = low
    
    TIMEFRAME(daily,updateonclose)
    indicator1 = ExponentialAverage[152](close)*0.982
    indicator2 = ExponentialAverage[152](close)*0.9875
    c1 = (a CROSSES UNDER indicator1)
    
    IF c1 THEN
    BUY 1 CONTRACT AT MARKET
    ENDIF
    
    // Condizioni per uscire da posizioni long
    TIMEFRAME(daily,updateonclose)
    
    ab = BARINDEX - TRADEINDEX
    
    Minimo = low[ab]
    
    
    TIMEFRAME(2 minute,updateonclose)
    b = high
    
    c2 = (b CROSSES OVER indicator2)
    
    C3 = (a<Minimo)
    
    IF c2 or c3 THEN
    SELL AT MARKET
    ENDIF
    Screenshot-8.png Screenshot-8.png
    #92757 quote
    robertogozzi
    Moderator
    Master

    Prova a sostituire le righe 21-23 con:

    If OnMarket and Not OnMarket[1] Then
       Minimo = low[1]
    Endif

    prova eventualmente anche togliendo UpdateOnClose dalla riga 19.

    #92758 quote
    Beppe
    Participant
    New

    credo di non aver capito il significato della condizione  If OnMarket and Not OnMarket[1]

    #92761 quote
    robertogozzi
    Moderator
    Master

    Per verificare se è stata appena aperta una posizione.

    Se la barra prima non era a mercato, mentre ora si, significa che è appena stata aperta una nuova posizione e calcola il minimo sulla barra precedente, quella di setup.

    #92762 quote
    Beppe
    Participant
    New

    e se volessi calcolarla su una barra daily? l’ ho impostato sotto il time frame della riga 21 (daily) ma il risultato non varia, mi apre sempre la posizione in data 03/10 e chiude sempre in data 11/10.

Viewing 15 posts - 1 through 15 (of 16 total)
  • You must be logged in to reply to this topic.

CANDELA IN CUI E' AVVENUTA L'APERTURA DEL TRADE


ProOrder: Trading Automatico & Backtesting

New Reply
Author
author-avatar
Beppe @beppe Participant
Summary

This topic contains 15 replies,
has 2 voices, and was last updated by robertogozzi
6 years, 11 months ago.

Topic Details
Forum: ProOrder: Trading Automatico & Backtesting
Language: Italian
Started: 02/28/2019
Status: Active
Attachments: 4 files
Logo Logo
Loading...