Quando si parla di oscillatori, spesso ci si trova di fronte a pensieri pesanti riguardo alla loro efficacia. Personalmente, ho spesso sentito la necessità di normalizzare i valori di questi indicatori, portando le oscillazioni in un intervallo più gestibile, come [-1;1]. Questa operazione può aprire nuove possibilità, come controllare i valori dell'indicatore attraverso livelli concreti (0.5, 0.8, ecc.), invece di affidarci a valori casuali stimati in base al mercato. Naturalmente, se l'indicatore è già normalizzato, non c'è bisogno di considerare questo prodotto, ma se non lo è... usalo! Non giudicarmi troppo severamente per il codice non perfetto.
Parametri:
string Indicator - L'indicatore stesso che verrà passato alla funzione icustom(). Purtroppo, gli strumenti di automazione MQL4 non sono sufficienti per aggiungere indicatori standard. Ma chi può fermare un programmatore curioso dal modificare un'entrata nel programma?
int mode - il numero della riga necessaria dell'indicatore iniziale...
int param1
int param2 - e i suoi parametri. Ancora una volta, la creatività degli sviluppatori MQL sembra limitata a scrivere funzioni con un numero variabile di parametri (come Print), e a supportare l'aritmetica degli indirizzi (a mio parere, l'ultima cosa è fatta solo per far sentire gli utenti comuni inferiori rispetto ai 'dei' :))). Dobbiamo lavorare manualmente.
Immagine:

Commenti:
I calcoli avvengono in due fasi:
1. Nella fase di inizializzazione (la funzione init(), per chi non lo sapesse) si analizza l'intero array dei dati dell'indicatore per calcolare il periodo distintivo, ovvero il periodo in cui il valore medio quadratico dell'indicatore può fornire un'indicazione sullo stesso valore medio quadratico (MSV) ma su tutta la storia.
Facciamo un esempio. Supponiamo di avere un oscillatore e di aver calcolato il suo valore medio quadratico per diversi periodi di oscillazione consecutivi. Diciamo che dobbiamo avere, ad esempio, 3 periodi (come ho io - #define PERIODS_CHARACTERISTIC 3, ti consiglio di non usarne di più, altrimenti il processore sarà sovraccarico). L'essenza del calcolo consiste nel determinare quanti bar, in media, dura un periodo (cioè 2 * intervallo medio tra due zeri dell'indicatore) e moltiplicare il valore ottenuto per 3.
2. Rimane da calcolare l'MSV per ogni bar (come la radice quadrata della dispersione) sui tre periodi ottenuti, normalizzare il valore del nostro indicatore su di esso e, infine, portare tutto all'intervallo dinamico [-1;1] tramite una funzione compressore f(x)=tanh(x) (tangente iperbolica, ho dovuto scrivere la funzione da solo :)).
Un esempio puramente tecnico. La linea verde nell'immagine rappresenta il mio vecchio oscillatore che caratterizza l'attività del mercato (di fatto è simile al MACD ma basato sui volumi). La linea blu è anch'essa un oscillatore, ma già normalizzato tramite -=Normalizzatore=-. I livelli +-0.75, +-0.5, +-0.25 sono chiaramente visibili, e puoi notare che tutti i massimi e i minimi, le regioni di aumento e diminuzione, e i punti di incrocio con il livello zero mantengono le loro posizioni.
Quindi, ecco qua... Non sono colpevole se a qualcuno non piace.
Post correlati
- Master Tools: Il Nuovo Indicatore per MetaTrader 4
- Indicatori di Open Range Breakout per MetaTrader 5: Scopri Come Sfruttare le Uscite di Prezzo
- Previsione dei Prezzi con Reti Neurali: Un Guida per Trader
- PA Adaptive MACD: L'indicatore innovativo per MetaTrader 4
- Indicatori di Avviso su Nuovo Bar per MetaTrader 4: Guida Completa