valori costanti in un indicatore

Viewing 15 posts - 1 through 15 (of 18 total)
  • Author
    Posts
  • #210717 quote
    NicolaGanz
    Participant
    New

    Buongiorno,

    sto creando un’indicatore di trend che segue il prezzo (da sopra o da sotto a seconda della dinamica dei prezzi). Vorrei codificare la seguente logica: se il mese precedente non vengono aggiornati i minimi di 2 mesi fa, oppure se la chiusura del mese precedente è superiore a quella di 2 mesi fa, il valore del mio indicatore, nel mese corrente, non cambi rispetto al valore che ha assunto il in T – 1. Questa logica deve rimanere tale per tutto il periodo in cui “close < indicator and ((low[1] > low[2]) or (close[1] > close[2]))”. Purtroppo riesco solo a codificare quanto segue:

    indicator1 = (max(high[2], max(high[1], high)) + min(low[2], min(low[1], low)))/2
    indicator2 = max(high[2], max(high[1], high))
    indicator3 = AverageTrueRange[10](close)
    indicator4 = indicator1 + indicator3
    indicator5 = max(indicator2, indicator4)
    indicator6 = indicator5[1]
    indicator7 = max(high[1], indicator6)

    if close < indicator7 and ((low[1] > low[2]) or (close[1] > close[2])) then
    indicator8 = indicator7[1]
    else
    indicator8 = indicator7
    Endif

    return indicator8

     

    Allego un’immagino in cui è presente l’errore.

     

    Grazie per il supporto

    trend.png trend.png
    #210722 quote
    robertogozzi
    Moderator
    Master

    T sta per…?

    Su quali timeframe vuoi utilizzarlo?

    #210728 quote
    NicolaGanz
    Participant
    New

    Grazie Roberto,

    con “T – 1” intendevo la barra precedente. Vorrei che l’indicatore, verificate le condizioni, mantenesse il valore che aveva alla barra precedente. Questo valore potrebbe non coincidere necessariamente con il calcolo dell’indicatore alla barra precedente, se le condizioni si verificano.

    #210729 quote
    NicolaGanz
    Participant
    New

    relativamente al time frame, lo sto utilizzando sul mensile ma vorrei fosse valido per tutti i time frames..

    #210785 quote
    robertogozzi
    Moderator
    Master

    Non capisco la logica delle  righe che hai scritto.

    Comunque questo è il codice che calcola i dati desiderati, Massimo e Chiusura, del 2° mese precedente (HH2 e CL2), del 1° mese precedente (HH1 e CL1) e di quello corrente (HH e CL):

    ONCE HH2 = high
    ONCE HH1 = high
    ONCE HH  = high
    ONCE CL2 = close
    ONCE CL1 = close
    ONCE CL  = close
    TF       = GetTimeframe
    IF TF = 2592000 THEN
       HH2   = high[2]
       HH1   = HH[1]
       HH    = high
       CL2   = close[2]
       CL1   = close[1]
       CL    = close
    ELSIF TF < 2592000 THEN
       IF OpenMonth <> OpenMonth[1] THEN
          HH2 = HH1
          HH1 = HH
          HH  = high
          CL2 = CL1
          CL1 = CL
          CL  = close
       ELSE
          CL  = close
          HH  = max(HH,high)
       ENDIF
    ELSE
       HH2 = 0
       HH1 = 0
       HH  = 0
       CL2 = 0
       CL1 = 0
    ENDIF

    integra te il tuo indicatore con i dati di cui sopra.

    Tieni presente che TUTTE le variabili mantengono il valore che avevano nella barra precedente, a meno che quel valore non venga intenzionalmente cambiato. Per cui devi cambiare il valore del tuo indicatore solo quando necessario, non importa che tu metta INDICATORE = INDICATORE[1], anche se non è un errore, ovviamente.

    #211489 quote
    NicolaGanz
    Participant
    New

    Grazie Roberto,

    purtroppo non mi è semplice orientarmi in quanto mi hai proposto.

    Data la seguente logica:

    indicator1 = (max(high[2], max(high[1], high)) + min(low[2], min(low[1], low)))/2
    indicator2 = AverageTrueRange[10](close)
    indicator3 = indicator1 + indicator2
    indicator4 = indicator3[1]
    indicator5 = max(high[1], indicator4)

    la cui formula fa effettivamente quello che deve, come posso integrare il tuo codice per evitare che l’indicatore, nella barra corrente, si aggiorni con le formule sopra se e solo se (low[1] > low[2] and close[1] < indicator5[1]) OR (close[1] > close[2] and close[1] < indicator5[1])?

     

    Grazie

    #211493 quote
    robertogozzi
    Moderator
    Master

    Puoi scriverlo così:

    IF (low[1] > low[2] and close[1] < indicator5[1]) OR (close[1] > close[2] and close[1] < indicator5[1]) THEN
       indicator1 = (max(high[2], max(high[1], high)) + min(low[2], min(low[1], low)))/2
       indicator2 = AverageTrueRange[10](close)
       indicator3 = indicator1 + indicator2
       indicator4 = indicator3[1]
       indicator5 = max(high[1], indicator4)
    ENDIF
    #211512 quote
    NicolaGanz
    Participant
    New

    Grazie. Se ho capito bene il codice che mi hai riportato andrebbe inserito tale e quale sull’editor. tuttavia la condizione “if” sull’indicatore viene verificata prima del calcolo dell’indicatore stesso e quindi alla fine l’indicatore non viene plottato sul grafico. Ho provato a prendere comunque spunto e codificare quanto segue (tralasciando la condizione sulla close riportata nei messaggi precedenti):

    indicator1 = (max(high[2], max(high[1], high)) + min(low[2], min(low[1], low)))/2
    indicator2 = AverageTrueRange[10](close)
    indicator3 = indicator1 + indicator2
    indicator4 = indicator3[1]
    indicator5 = max(high[1], indicator4)

    IF (low[1] > low[2] and close[1] < indicator5[1]) THEN

    indicator6 = min(indicator5, indicator5[1])

    ENDIF

    return(indicator6)

     

    tuttavia non funziona. riporto screen dove ho individuato l’errore.

     

    Grazie

     

    Nicola

    Immagine-2023-03-13-220859.png Immagine-2023-03-13-220859.png
    #211599 quote
    robertogozzi
    Moderator
    Master

    Prova questo:

    indicator1 = (max(high[2], max(high[1], high)) + min(low[2], min(low[1], low)))/2
    indicator2 = max(high[2], max(high[1], high))
    indicator3 = AverageTrueRange[10](close)
    indicator4 = indicator1 + indicator3
    indicator5 = max(indicator2, indicator4)
    indicator6 = indicator5[1]
    indicator7 = max(high[1], indicator6)
    indicator8 = indicator7
    IF (close < indicator7) AND ((low[1] >= low[2]) OR (close[1] > close[2])) THEN
       indicator8 = indicator7[1]
    endif
    return indicator8 AS "ind8",indicator7 AS "ind7"
    #211601 quote
    robertogozzi
    Moderator
    Master

    Ho spostato la tua richiesta da ProScreener a ProOrder in quanto si tratta di un indicatore.

    #211615 quote
    NicolaGanz
    Participant
    New

    Grazie di cuore Roberto per il supporto.

    Provato anche con questa ma l’errore persiste. Allego screenshot.

    error.png error.png
    #211617 quote
    robertogozzi
    Moderator
    Master

    Scusa, puoi dettagliare meglio in cosa consiste l’errore?

    #211829 quote
    NicolaGanz
    Participant
    New

    Grazie Roberto.

    se dal calcolo matematico risulta un valore superiore, vorrei che l’indicatore mantenesse il valore che aveva alla barra precedente se soddisfatta la seguente condizione: low[1] > low[2]. Altrimenti se low[1] > low[2] e matematicamente l’indicatore è minore rispetto alla barra precedente, va calcolato l’indicatore  normalmente.

    Nicola

    #212060 quote
    NicolaGanz
    Participant
    New

    Ciao Roberto,

     

    hai per caso avuto modo di leggere il mio messaggio sopra? Grazie e perdona il disturbo

    Nicola

    #212072 quote
    robertogozzi
    Moderator
    Master

    No, perché non riesco a capire qual’è l’errore.

    Spiegamelo per favore ed allega una foto da cui si veda lo strumento, forex, indice o altro, il timeframe, data ed ora della candela con l’errore.

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

valori costanti in un indicatore


ProBuilder: Indicatori & Strumenti Personalizzati

New Reply
Author
author-avatar
NicolaGanz @nicolaganz Participant
Summary

This topic contains 17 replies,
has 2 voices, and was last updated by robertogozzi
2 years, 10 months ago.

Topic Details
Forum: ProBuilder: Indicatori & Strumenti Personalizzati
Language: Italian
Started: 03/01/2023
Status: Active
Attachments: 4 files
Logo Logo
Loading...