Ora vediamo i codici di alcuni indicatori molto famosi, presenti come esempi nella piattaforma di prorealtime.
La programmazione di questi indicatori è molto utile perchè possiamo capire la loro costruzione e possiamo anche modificarli o implementarli a nostro piacimento.
Li trovate nella sezione ESEMPI nella finestra principale degli indicatori.
IF BARINDEX = 0 THEN
inizializzazione = 2 // siamo a metà giornata
ELSE
IF DAYOFWEEK[1] <> DAYOFWEEK THEN
prevmax = newmax
prevmin = newmin
prevclose = newclose
newmax = HIGH
newmin = LOW
newopen = OPEN
newclose = CLOSE
inizializzazione = MAX(0, inizializzazione - 1)
// inizializzazione = 1 significa che siamo sul primo giorno intero
// inizializzazione = 0 significa che siamo almeno sul 2-ndo giorno
ELSE
newmax = MAX(newmax, HIGH)
newmin = MIN(newmin, LOW)
newclose = close
// solo doppo le inizializzazioni
IF inizializzazione = 0 THEN
IF pivotmethod = 0 THEN
pivot = (prevmax + prevmin + prevclose) / 3
ELSIF pivotmethod = 1 THEN
pivot = (prevmax + prevmin + prevclose + newopen) / 4
ELSE
pivot = (prevmax + prevmin + newopen) / 3
ENDIF
curva0 = pivot + prevmax - prevmin
curva1 = (2 * pivot) - prevmin
curva2 = pivot
curva3 = (2 * pivot) - prevmax
curva4 = pivot - (prevmax - prevmin)
ENDIF
ENDIF
ENDIF
RETURN curva0, curva1, curva2, curva3, curva4
//VARIABILI DI DEFAULT: PIVOTMETHOD[0]
REM Determina le variazione giornaliere
rialzo = MAX(0, CLOSE - CLOSE[1])
ribasso = MAX(0, CLOSE[1] - CLOSE)
REM Calcola la media dei guadagni i giorni di rialzo
REM e delle perdite i gorni di ribasso
mmRialzo = WILDERAVERAGE[p](rialzo)
mmRibasso = WILDERAVERAGE[p](ribasso)
REM En déduit le RS
RS = mmRialzo / mmRibasso
REM E finalmente le RSI
mioRSI = 100 - 100 / (1 + RS)
RETURN mioRSI AS "Relative Strength Index"
//VARIABILI DI DEFAULT: P[14]
REM Determina i piu alti et più bassi su p barre
piuAlto = HIGHEST[p](HIGH)
piuBasso = LOWEST[p](LOW)
REM Construit l'oscillateur
oscillatore = (CLOSE - piuBasso) / (piuAlto - piuBasso) * 100
REM Ne deduca le linee dello stocastico
lineaK = AVERAGE[q](oscillatore)
lineaD = AVERAGE[r](lineaK)
RETURN lineaK AS "%K", lineaD AS "%D"
//VARIABILI DI DEFAULT: R[5], Q[3], P[14]
REM Calcolo dell'oscillatore di Bollinger
delta = CLOSE - BOLLINGERDOWN
width = 4 * STD
BBO = delta * 100 / width
RETURN BBO AS "Bollinger Band Oscillator"
REM Determina +DM et -DM
piuDM = MAX(HIGH-HIGH[1], 0)
menoDM = MAX(LOW[1]-LOW, 0)
IF piuDM > menoDM THEN
menoDM = 0
ENDIF
IF piuDM < menoDM THEN
piuDM = 0
ENDIF
IF piuDM = menoDM THEN
piuDM = 0
menoDM = 0
ENDIF
REM Calcolo degli indicatori direzionali
piuDI = WILDERAVERAGE[p](piuDM)
menoDI = WILDERAVERAGE[p](menoDM)
REM Calcolo del ADX
DX = ABS(piuDI - menoDI) / (piuDI + menoDI) * 100
mioADX = WILDERAVERAGE[p](DX)
RETURN mioADX AS "ADX"
//VARIABILI DI DEFAULT: P[14]
mediaBollinger = AVERAGE[p](CLOSE)
REM Determina lo scarto quadratico medio (senza passare dalla funzione STD)
REM per l'esempio, in pratica si deve utilizzare STD !
IF BARINDEX >= p-1 THEN
sumy2 = 0
sumy = 0
FOR i = 0 TO p-1
sumy2 = sumy2 + SQUARE(CLOSE[i])
sumy = sumy + CLOSE[i]
NEXT
scartoQuadraticoMedio = SQRT(sumy2 / p - SQUARE(sumy / p))
ELSE
scartoQuadraticoMedio = UNDEFINED
ENDIF
REM Ne deduciamo le curve di Bollinger
bollSup = mediaBollinger + s * scartoQuadraticoMedio
bollInf = mediaBollinger - s * scartoQuadraticoMedio
RETURN bollSup AS "Boll+", bollInf AS "Boll-"
//VARIABILI DI DEFAULT: S[2], P[20]
REM questo esempio calcola il MACD
MMveloce = EXPONENTIALAVERAGE[p](CLOSE)
MMlento = EXPONENTIALAVERAGE[q](CLOSE)
mioMACD = MMveloce - MMlento
Linea = EXPONENTIALAVERAGE[r](mioMACD)
RETURN mioMACD - linea AS "istogramma MACD"
//VARIABILI DI DEFAULT: R[9], Q[26], P[12]
Scrivi commento