valori costanti in un indicatore
Forums › ProRealTime forum Italiano › Supporto ProBuilder › valori costanti in un indicatore
- This topic has 17 replies, 2 voices, and was last updated 1 year ago by robertogozzi.
-
-
03/01/2023 at 12:29 PM #210717
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
Endifreturn indicator8
Allego un’immagino in cui è presente l’errore.
Grazie per il supporto
03/01/2023 at 12:46 PM #210722T sta per…?
Su quali timeframe vuoi utilizzarlo?
03/01/2023 at 2:23 PM #210728Grazie 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.
03/01/2023 at 2:27 PM #210729relativamente al time frame, lo sto utilizzando sul mensile ma vorrei fosse valido per tutti i time frames..
03/02/2023 at 6:56 PM #210785Non 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):
123456789101112131415161718192021222324252627282930313233ONCE HH2 = highONCE HH1 = highONCE HH = highONCE CL2 = closeONCE CL1 = closeONCE CL = closeTF = GetTimeframeIF TF = 2592000 THENHH2 = high[2]HH1 = HH[1]HH = highCL2 = close[2]CL1 = close[1]CL = closeELSIF TF < 2592000 THENIF OpenMonth <> OpenMonth[1] THENHH2 = HH1HH1 = HHHH = highCL2 = CL1CL1 = CLCL = closeELSECL = closeHH = max(HH,high)ENDIFELSEHH2 = 0HH1 = 0HH = 0CL2 = 0CL1 = 0ENDIFintegra 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.
03/13/2023 at 4:41 PM #211489Grazie 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
03/13/2023 at 5:35 PM #211493Puoi scriverlo così:
1234567IF (low[1] > low[2] and close[1] < indicator5[1]) OR (close[1] > close[2] and close[1] < indicator5[1]) THENindicator1 = (max(high[2], max(high[1], high)) + min(low[2], min(low[1], low)))/2indicator2 = AverageTrueRange[10](close)indicator3 = indicator1 + indicator2indicator4 = indicator3[1]indicator5 = max(high[1], indicator4)ENDIF03/13/2023 at 10:09 PM #211512Grazie. 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
03/15/2023 at 5:13 PM #211599Prova questo:
123456789101112indicator1 = (max(high[2], max(high[1], high)) + min(low[2], min(low[1], low)))/2indicator2 = max(high[2], max(high[1], high))indicator3 = AverageTrueRange[10](close)indicator4 = indicator1 + indicator3indicator5 = max(indicator2, indicator4)indicator6 = indicator5[1]indicator7 = max(high[1], indicator6)indicator8 = indicator7IF (close < indicator7) AND ((low[1] >= low[2]) OR (close[1] > close[2])) THENindicator8 = indicator7[1]endifreturn indicator8 AS "ind8",indicator7 AS "ind7"03/15/2023 at 5:15 PM #211601Ho spostato la tua richiesta da ProScreener a ProOrder in quanto si tratta di un indicatore.
03/15/2023 at 10:28 PM #211615Grazie di cuore Roberto per il supporto.
Provato anche con questa ma l’errore persiste. Allego screenshot.
03/15/2023 at 11:11 PM #211617Scusa, puoi dettagliare meglio in cosa consiste l’errore?
03/20/2023 at 5:41 PM #211829Grazie 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
03/24/2023 at 3:41 PM #212060Ciao Roberto,
hai per caso avuto modo di leggere il mio messaggio sopra? Grazie e perdona il disturbo
Nicola
03/24/2023 at 5:08 PM #212072No, 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.
-
AuthorPosts
Find exclusive trading pro-tools on