Salve, avrei questa esigenza di codifica.
Mi servirebbe una media mobile a x periodi che pero’ finisca ad un orario da me definito, per poi riprendere dall’apertura del giorno dopo. Nello specifico avrei bisogno di una media mobile a x periodi che inizi alle 9.00 (orario di apertura) e termini alle 17.50 anziché arrivare fino alla chiusura delle 20.30.
E’ possibile creare un codice in tal senso ?
Grazie anticipatamente.
In sostanza vorrei che la media mobile che appare nel grafico non tenga conto dei prezzi dopo le 17.30.
Mi spiego meglio.
La media mobile deve calcolare la media dei prezzi dall’ apertura fino alle 17.50, per poi continuare il giorno dopo all’ apertura tenendo conto dell’ ultimo prezzo delle 17.50.
(nel post precedente ho scritto erroneamente 17.30……intendevo 17.50)
E’ una richiesta un pò stravagante, anche perché la media inizia ogni giorno daccapo, partendo dall’ultimo prezzo di ieri. Dall’orario penso tu la voglia usare su un TF a 10 minuti, io l’ho testata su EurUsd 10 minuti.
In pratica come inizio va specificato nell’indicatore 085000 (85000 in quanto numero) perché la prima volta non essendoci il prezzo delle 17:50 di ieri prende quello delle 085000 del giorno stesso, poi dalle 090000 fa una media, aumentando ad ogni candela, i periodi, quindi alle 090000 farà una media a 2 periodi, alle 091000 a 3 periodi ecc… fino alle 174000. Alle 1750 registra l’ultimo prezzo e smette di operare. In realtà NON può smettere, se tu non lo togli materialmente dal grafico, solo che non aggiorna più i valori e resta un dato identico fino all’indomani mattina.
Nell’indicatore devi specificare 3 parametri: ora d’inizio (10 minuti prima di quella che desideri), ora di fine e tipo di media prescelta (sono 7 tipi, vedi elenco https://www.prorealcode.com/documentation/average/).
Questo è il codice, che allego anche in formato importabile. Testala e fammi sapere.
DEFPARAM CalculateOnLastBars = 2000
ONCE UltimoPrezzoIeri = 0
ONCE Barre = 0
IF time = Inizio THEN
Barre = 1
IF UltimoPrezzoIeri <> 0 THEN
Prezzo = UltimoPrezzoIeri
ELSE
Prezzo = close
ENDIF
ENDIF
IF time = Fine THEN
UltimoPrezzoIeri = close
ENDIF
IF time > Inizio AND time < Fine THEN
Barre = Barre + 1
Prezzo = close
Media = Average[Barre,TipoMedia](Prezzo)
ENDIF
RETURN Media
Roberto
Ciao Roberto, innanzitutto grazie per l’interessamento. Ti spiego il motivo di questa stravaganza. Io opero nell’intraday con la tecnica dei cicli. Da qualche mese la contrattazione del derivato italiano FIB ha subito un allungamento delle contrattazioni fino alle 20.30, mentre prima terminavano alle 17.50, quasi come il sottostante indice. Da quando e’ accaduto questo le medie mobili identificative dei cicli e i relativi indicatori si sono letteralmente sballati, ed io sono costretto ad usarle adesso nel grafico dell’ indice sottostante. Ho notato che facendo questo la cosa si riassesta, ma e’ molto scomodo e, soprattutto mi distrae, il fatto di guardare l’indice con le rispettive medie mobili ed indicatori mentre sto tradando il derivato. Ecco il perché di questa mia richiesta. Una piattaforma che si chiama Visual Trader da’ la possibilita’ di interrompere il grafico ad un orario prestabilito e di farlo ricominciare il giorno dopo all’ apertura. Questo e’ molto utile in quanto permette alle mie medie ed indicatori di non terner conto di cio’ che accade dopo le 17.50. Ho notato inoltre che, in base alla mia tecnica, il movimento si sviluppa nell’ intraday quando le medie e gli indicatori del derivato si allineano con quelle dell’ indice, ma questo (come ti dicevo) mi obbliga a guardare anche l’indice. Pensavo si potesse creare un codice che si comporta come fa la piattaforma di Visual Trader che blocca il grafico alle 17.50 e lo fa ripartire il giorno dopo all’ apertura. O per lo meno far si che questo comportamento lo possano avere solo le medie mobili. Cioe’ la media mobile deve continuare a calcolare i prezzi partendo dall’ ultimo valore delle 17.50 collegandolo al valore di apertura della giornata. In pratica deve continuare a calcolare i prezzi ignorando cio’ che accade dopo le 17.50.
Cioe’ la media deve continure all’apertura partendo dall’ ultimo prezzo delle 17.50.
Il time frame che uso e’ quello a 5m
Forse c’è una soluzione. Prova ad andare (su ProRealTime ovviamente) nelle “Opzioni della piattaforma”, da li passa al tag “Fuso orario”, cerca “Indices MIB” e poi metti gli orari e le spunte come ho indicato io sull’immagine allegata. ATTENZIONE però, PRIMA scriviti i dati esattamente com’erano o, meglio ancora, fagli una foto col cellulare se non hai la possibilità di salvare la schermata. In tal modo potrai ripristinare all’occorrenza eventuali modifiche che risultano errate.
L’orario, non so per quale motivo (forse lo interpretano non come distanza da UTC/GMT, ma da quello di Londra, per cui deve sserci lo sfalzamento indietro di 1 ora, poi sul grafico vedrai dalle 9 alle 17:50 secondo il fuso orario italiano.
In tal modo se tu applichi una qualsiasi media o altro indicatore, farà il calcolo come lo desideri tu, almeno credo.
In pratica potresti impostare orari diversificati, diversi da quelli predefiniti, per ogni strumento.
Se NON funzionasse ripristina le opzioni precedenti e prova la mia soluzione (magari provala subito ugualmente, così puoi dirmi cosa te ne pare), ma credo non funzioni come vuoi tu.
Penso che utilizzare le possibilità che offre il sistema sia di gran lunga preferibile (quando possibile).
E’ proprio quello che a me serve, ma purtroppo nella versione ridotta di WEBANK, che io uso, quella funzione non c’è. Peccato davvero. Quella funzione fa terminare il flusso dati di un grafico agli orari che si vuole. Peccato. Comunque grazie per la tua cortesia.
Per Roberto Gozzi.
Dato che la mia piattaforma non supporta la funzione di personalizzare il flusso dati del server, vorrei chiederti questo: non si potrebbe creare una formula che dica alla media mobile di lasciare invariato il suo valore dalle 17.50 fino a chiusura. e di riprendere normalmente il conteggio dalle ore 9.00 agganciandosi al valore della media mobile delle 17.50 ?
Se vuoi una media mobile semplice si, perché basta aggiungere i periodi che vogliamo e poi fare una divisione, quindi ci si può fermare e riprendere, se, invece la volessi in un qualunque altro modo allora NO.
Se ti va bene semplice dimmelo e provo a scriverla.
Si Roberto, va bene la media mobile semplice. Grazie
Eccolo:
DEFPARAM CalculateOnLastBars = 100
Periodi = 10
Inizio = 090000
Fine = 175000
i = 0
MMS = 0 //Media Mobile Semplice
FOR j = 0 TO 5000
IF opentime[j] >= Inizio AND opentime[j] <= Fine THEN
MMS = MMS + close[j]
i = i + 1
IF i = Periodi THEN
BREAK
ENDIF
ENDIF
NEXT
MMS = (MMS / Periodi)
IF MMS = 0 THEN
MMS = close
ENDIF
Return MMS
Il limite di 5000 che vedi è il numero massimo di barre in cui può andare indietro per il calcolo.
Periodi è il numero di periodi della media.
Fai attenzione agli orari, i grafici su cui li usi è bene che chiudano su quel limite, ad esempio con 175000 puoi usare grafici a 1 minuto, a 5 o 10 minuti, ma è meglio non a 2, 3, 15 minuti o maggiori per non avere risultati sballati. Se, invece, metti 180000 puoi arrivare fino al grafico orario (ma non il 4 ore).
Grazie Roberto….lo provo subito.
Mi da’ un errore. Mi chiede di definire la variabile opentime. Non so che fare.