Drawsegment con coordinate barindex

Viewing 12 posts - 1 through 12 (of 12 total)
  • Author
    Posts
  • #149129 quote
    tom81ad
    Participant
    Average

    Buongiorno e buona festa di Ognissanti a tutti,

    ho riscontrato un altro ostacolo nella realizzazione di uno script (che allego) e riporto qui sotto.

    Lo scopo è quello di tracciare dei segmenti sul Momentum in base a delle coordinate ricavate dal movimento dei prezzi.

    L’indicatore infatti vacaricato sul momentum

    In sintesi se ho una condizione di start verificata a Barindex 50 e una condizione di end a Barindex 150 voglio tracciare un segmento sul momentum da 50 a 150.

    Il problema (sorvolando sulle condizioni ricercate che sono giusto di esempio) è che sul momentum non viene tracciato nulla (o al più una barra orizzontale sul margine superiore del riquadro). Le ho provate un po’ tutte  ma non ne vengo a capo.

    Grazie a chi vorrà rispodnere

     

    ONCE Lup = 1000000 // Low
    ONCE Hdown = 0 //High
    ONCE Swing =1 // 1 = Up -1 = Down
    ONCE Startbar = 0 // barra inizio segmento
    ONCE Endbar = 0 // Barra fine segmento
    
    
    M= Momentum
    
    IF Swing = 1 AND high < Lup THEN
    Endbar = barindex
    Lup = low
    Swing = -1 // aggiorna stato swing
    ELSIF Swing = 1 AND high => Lup THEN
    Lup= low
    ELSIF Swing = -1 AND low > Hdown THEN
    Startbar = barindex
    hdown= high
    Swing = 1 // aggiorna stato swing
    ELSIF Swing = -1 AND low <= Hdown THEN
    Hdown = high
    ENDIF
    
    
    DRAWSEGMENT (x1,y1,x2,y2)
    x1= barindex[startbar]
    y1= M [Startbar]
    x2= barindex[Endbar]
    y2= M [Endbar]
    
    RETURN
    Divergen.itf
    #149139 quote
    robertogozzi
    Moderator
    Master

    E’ per questo che sto tardando a risponderti all’altro topic.

    Un moderatore, Noobywan , mi ha suggerito (solo per la v10.3, in quanto la v11 funziona correttamente), di verificare che siano trascorse almeno le barre necessarie a calcolare gli indicatori.

    Tu hai usato MOMENTUM senza periodi, quindi prende per default 12 ed il parametro CLOSE (ti consiglio però di indicare sempre i periodi e, quando necessario, anche il parametro su cui fare i calcoli), quindi devi scrivere alla riga 9:

    IF BarIndex > 12 THEN

    ed alla riga 30 scrivi:

    ENDIF
    #149314 quote
    tom81ad
    Participant
    Average

    Spero per venerdi di riuscire a provare, al momento sono un po impicciato con il lavoro.

    Certo che come dice il detto il diavolo si nasconde nei dettagli.

    A tutto avrei pensato tranne che a quello.

     

    Per il momento ringrazio te e Noobywan

    #150686 quote
    tom81ad
    Participant
    Average

    Buonasera a tutti,

    scrivo sempre per i posteri che dovessero riscontrare la mia stessa problematica.

    Atteso che anche con la v. 11 lo script presenta evidenti difetti (in breve vengono si tracciati dei segmenti nell’arco temporale desiderato ma con dei valori insensati che non ho ben compreso dove peschi) la sintassi per così dire corretta da utilizzare per ottenere dei segmenti nell’arco temporale e con i valori corretti è la seguente

    ONCE Lup = 1000000 // Low
    ONCE Hdown = 0 //High
    ONCE Swing =1 // 1 = Up -1 = Down
    ONCE Startbar = 0 // barra inizio segmento
    ONCE Endbar = 0 // Barra fine segmento
     
     
    M= Momentum [12] (Close)
     
    IF Swing = 1 AND high < Lup THEN
    Endbar = barindex
    Lup = low
    Swing = -1 // aggiorna stato swing
    ELSIF Swing = 1 AND high => Lup THEN
    Lup= low
    ELSIF Swing = -1 AND low > Hdown THEN
    Startbar = barindex
    hdown= high
    Swing = 1 // aggiorna stato swing
    ELSIF Swing = -1 AND low <= Hdown THEN
    Hdown = high
    ENDIF
     
    bary1 = barindex [Startbar]
    bary2 = barindex [Endbar]
    
    DRAWSEGMENT (x1,y1,x2,y2)
    x1= Startbar
    y1= M [bary1]
    x2= Endbar
    y2= M [bary2]
     
    RETURN

    Nella sostanza occorre calcolare (o ricalcolare se preferite) il barindex con la formula

    bary1 = barindex [Startbar] 
    bary2 = barindex [Endbar]

    e poi utilizzare il barindex ottenuto per determinare il valore che l’indicatore ha in quella barra

    y1= M [bary1] 
    y2= M [bary2]

    Il che non ha molto senso visto che i valori di Starbar ed >Endbar vengono correttamente riconosciuti nelle variabili temporali x1 e x2 ma tant’è

    Ovviamente come già segnalato dal buon Robert è opportuno indicare il periodo ed il valore di calcolo del Momentum

    #150687 quote
    robertogozzi
    Moderator
    Master

    La definizione e valorizzazione delle coordinate mettile alla riga 26, altrimenti come fa DRAWSEGMENT a conoscerle?

    #150692 quote
    tom81ad
    Participant
    Average

    Ciao Roberto,

    la tua osservazione è corretta ma anche spostandole a riga 26 il risultato non cambia devo “ridefinire” il barindex altrimenti ottengo valori a casaccio.

    Cmq mercoledi quando presumibilmente riesco a rimetterci mano proverò a fare altre prove.

    Tra le altre stranezze ho notato che richiamando un indicatore in un altro mi “importa” anche alcuni segmenti tracciati col comando DRAW nell’indicatore importato.

    Il problema l’ho aggirato creando una copia dell’indicatore ed eliminando i comandi DRAW

    Non saprei…nel caso apriro un altro post con lo script incriminato cosi magari gli dai un’occhiata

    #150792 quote
    robertogozzi
    Moderator
    Master

    Ti spiace riepilogarmi cosa vuoi eveidenziare, cioè le condizione in base alle quali i segmenti devono essere tracciati?

    Hai la v10.3 o la v11?

    #151336 quote
    tom81ad
    Participant
    Average

    ciao Roberto,

    appena ho la mente un po’ libera dai casini quotidiani ti posto un codice di esempio semplice e concreto cos’ cerchiamo di arrivare ad una soluzione.

    Voglio solo dire che il problema l’ho risolto (aggirato) ricalcolando il barindex.

     

    Cmq come detto appena possibile scrivo nel dettaglio

    #152916 quote
    tom81ad
    Participant
    Average

    Rieccomi con la questione drawsegment

    Di seguito un esempio giusto per di script che dovrebeb fare quanto segue

    Se la candela 5 ha un high maggiore del 10% rispetto al low della candela 0 deve essere tracciato un segmento sul momentum al valore che lo stesso ha alla fine dell’ultimo segmento tracciato fino alla candela 5

    Il problema riscontrato è che il segmento salvo applicare un piccolo escamotage non viene tracciato

    Lo script va caricato nel riquadro del momentum

    M= Momentum
    ONCE Startbar = 0
    Condizione = High[5]> Low+(Low*0,05)
    
    IF Condizione then
    Endbar = barindex [5]
    x1= Startbar
    y1= M [Startbar]
    x2= Endbar
    y2= M [Endbar]
    DRAWSEGMENT (x1,y1,x2,y2)
    Startbar = Endbar
    ENDIF
     
    RETURN

    Grazie

    #152925 quote
    robertogozzi
    Moderator
    Master

    Alle righe 8 e 10 devi mettere, tra parentesi quadre:

    [BarIndex - Startbar] //riga 8
    [BarIndex - Endbar]   //riga 10
    #152958 quote
    tom81ad
    Participant
    Average

    ah perchè barindex conta da 0 (la prima a sinistra) a diciamo 99 (l’ultima a destra)

    invece il valore tra [] conta da 0 (l’ultima a destra)  a 99 (la prima a sinistra)

    Giusto?

    #152968 quote
    robertogozzi
    Moderator
    Master

    Esatto, l’ultima candela è, ad esempio, BARINDEX=1367 a cui si accede mediante l’indice [0] oppure niente, se STARTBAR (o ENDBAR) sono uguali a BARINDEX, facendo la differenza trovi 0 che è l’indica corretto.

    BARINDEX è progressivo, da 0 (la prima candela) in avanti, mentre l’indice da mettere tra le parentesi quadre parte da quella corrente [0] e va indietro.

    Ed è ovvio che sia così, un contatore come BARINDEX non può che incrementare indefinitivamente (fino alla chiusura dell’indicatore o della piattaforma), mentre per le candele NON puoi fare riferiomento a quelle future, ma a quelle passate, per cui il loro indice è sempre relativo a quella corrente, quindi parte da 0 e deve essere incrementato man mano che ci si sposta nel passato.

    Il BARINDEX delle candele si aggiorna man mano che se ne formano di nuove, ma quella corrente avrà sempre valore 0, quella precedente 1, ecc… quindi se tra parentesi quadre metti BARINDEX ti riferisci alla prima candela caricata:

    • close[0]                  si riferisce al prezzo di chiusura delle candela corrente (che è la candela identificata da BarIndex, ad esempio la 1367esima)
    • close[BarIndex] è come se avesse 1367 come indice, quindi si riferisce al  prezzo di chiusura della candela 0
    tom81ad thanked this post
Viewing 12 posts - 1 through 12 (of 12 total)
  • You must be logged in to reply to this topic.

Drawsegment con coordinate barindex


ProBuilder: Indicatori & Strumenti Personalizzati

New Reply
Author
author-avatar
tom81ad @tom81ad Participant
Summary

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

Topic Details
Forum: ProBuilder: Indicatori & Strumenti Personalizzati
Language: Italian
Started: 11/01/2020
Status: Active
Attachments: 1 files
Logo Logo
Loading...