Nel corso della tua attività di trading, quante volte avresti voluto provare a modificare leggermente un indicatore? Non intendo modificare i parametri ma ad esempio aggiungere delle informazioni alla linea che sull'indicatore base non esistono. E' con questo spirito che provo a guidarti alle basi per la costruzione di un indicatore con cTrader.
Iniziamo
Dopo aver acceso il nostro cTrader accediamo alla sezione Automate:
Cliccando poi su indicators e successivamente sul bottone new si apre il template dell'indicatore.
Il template con il codice sarà cosi costituito:
Ora se non familiarizzi con la programmazione potrebbe sembrarti ostico il tutto. Non ti preoccupare ora analizziamo tutto passo passo. La parte iniziale prevede degli "using" che non sono altro che delle informazioni che vengono date a cTrader per dirgli che "useremo" delle funzioni o delle proprietà o degli oggetti che sono implementati la dentro.
Namespace serve per dichiarare che utilizzeremo e che il nostro stesso indicatore appartiene allo spazio dei nomi cAlgo (è una cosa un pò tecnica ma non è necessario comprenderla subito, in caso approfondisci cercando su Google).
Arriviamo ora al cuore. Tra parentesi quadre viene definito il nostro indicatore con i seguenti parametri:
- IsOverlay dice a cTrader se il nostro indicatore sarà sul grafico (come la SMA) o su una finestra a parte (come l'RSI)
- TimeZone dice a cTrader che utilizzeremo eventualmente date e ore con orario UTC
- AccessRight dice a cTrader se dobbiamo utilizzare risorse esterne alla piattaforma, come ad esempio se dovessimo scrivere su File ecc...
Tralasciando ora i vari modificatori class, public, override ecc, che possono essere approfonditi tramite una semplice ricerca su Google, in quanto derivano dal paradigma ad oggetti della programmazione. Vediamo che il template ci propone:
- Parameter con defaultValue = 0.0 di nome parameter e di tipo double (numero con virgola)
- Result che è una indicator series ovvero una serie di numeri che poi verranno tracciati sul grafico. questi numeri non sono altro che dei punti che verranno poi uniti da una linea
- La funzione Initialize() è importante e viene eseguita solo nel momento in cui andiamo a mettere l'indicatore sul grafico
- La funzione calculate che viene chiamata per calcolare dei valori dell'indicatore
Pinbar indicator
Proviamo ora a costruire un indicatore che non fa altro che indicarci la formazione di una pinbar al rialzo o al ribasso:
- la pinbar deve essere a rialzo se ha il prezzo di apertura inferiore a quello di chiusura e vice versa per quella a rialzo
- ci devono essere 2 parametri uno relativo alla percentuale massima do body che la pinbar deve avere e uno rispetto al massimo break out
- alla presenza di una pinbar deve essere presentata una freccia che indichi il verso della pinbar (rialzista o ribassista)
Per i nostri conti abbiamo bisogno dei dati OHLC (Open High Low Close) e in base a questi ricaviamo:
- l'escursione di prezzo in valore assoluto
- il prezzo al 50%
- la massima chiusura per la pinbar rialzista
- la massima chiusura per la pinbar ribassista
Per fare questo cTrader ci permette di utilizzare Bars.LowPrices che è una serie di elementi, e noi prendiamo l'elemento attuale tramite il parametro index, che viene passato dalla funzione.
double lastLow = Bars.LowPrices[index];
Dopo aver recuperato tutte le info della candela, Il primo if verifica che la differenza tra apertura e chiusura sia minore dell'escursione moltiplicata il parametro percentuale di massima escursione quindi se l' espressione:
priceExcursion * BodyPerc < Math.Abs(lastOpen - lastClose)
E' vera quindi se apertura - chiusura in valore assoluto è maggiore dell'escursione voluta la funzione fa return, ovvero ritorna senza fare altro. Successivamente se:
lastOpen < lastClose && lastOpen > halfPrice && lastClose > halfPrice && lastClose >= highCloseTh
l'apertura è < della chiusure e l'apertura è sopra al 50% del prezzo e la chiusura è oltre la soglia minima di chiusura
allora in nome dell'oggetto sarà "Pin-Up X" dove X è l'indice della serie (in realtà questo parametro serve solo per non dare nomi univoci agli oggetti). Viene calcolato un offset in y perchè la freccia che andremo a disegnare non sia troppo sovrapposta al grafico. Infine con:
Chart.DrawText(arrowName, upArrow, index - 1, y, Color.Green);
disegnamo un testo con il valore upArrow alla posizione index-1 in quanto il testo viene scritto a partire dal bordo destro della candela quindi necessitiamo di calcolare i valori al tempo i-esimo ma dobbiamo "stamparli" su grafico al tempo i-1.
Successivamrnte scegliamo il colore verde per la pinbar rialzista. Lascio a te studiare il caso ribassista mostrato nella figura precedente.
Per fare il build dell'indicatore premi il pulsante build nella barra in alto e controlla nella finestrina buildResults che non ci siano stati errori e in caso correggili.
Troverai direttamente l'indicatore in cT con il nome che gli hai dato nel sotto menu custom
Indicatore all'opera
Ecco il nostro indicatore all'opera con i parametri standard.
Conclusioni
Nel codice è volutamente escluso il caso in cui OPEN è uguale a CLOSE. Lascio a te la gestione e l'implementazione del caso in questione qualora tu voglia cimentarti.
La semplicità di implementazione è decisamente disarmante, il motore di cTrader è il C-Sharp (C#) che puoi approfondire tranquillamente su Google. Prova a implementare un tuo indicatore o estendere questo. Puoi commentare l'articolo o scrivermi per dubbi e perplessità o richiedermi approfondimenti.