Scanner di Condizioni (cs)
Vi presento un'idea interessante dietro il codice che vi allego: sognate una (o più) condizione(i). Scrivete il codice per testare queste condizioni e integrate il vostro codice in questi frammenti. Facendo alcune semplici modifiche, avrete a disposizione alcuni indicatori.
Uno degli indicatori mostrerà storicamente sul grafico attuale dove si sono verificate le vostre condizioni, mentre l'altro indicherà in un pannello se, per tutti gli strumenti e timeframe che vi interessano, le condizioni si sono attualmente verificate. In questo modo, eviterete di dover controllare manualmente coppie e timeframe alla ricerca delle vostre condizioni.
Come installare:
Copia i contenuti delle quattro cartelle (Indicatori, Include, Modelli, Profili) nelle corrispondenti cartelle della tua installazione. Non c'è nulla di pericoloso, solo indicatori e simili. Esci e rientra nel programma MetaQuotes.
Dimostrazione delle capacità dello scanner:
Questo esempio si basa su Power Pro (identificatore setup = "PP") che è stato diffuso da Russ Horn. Si tratta di una strategia di breakout delle bande, dove il limite superiore è una EMA dei massimi e il limite inferiore è una EMA dei minimi. Non endorse queste strategie, ma è solo un esempio di ciò che potete sviluppare.
Nel vostro sistema, cambiate al profilo cspp. Potrebbe richiedere alcuni secondi per la prima visualizzazione, ma non utilizza molte risorse del computer successivamente.
Dovreste vedere uno schermo simile a questo:
L'esempio sopra consiste in:
- un indicatore sul grafico con 4 trame,
- un indicatore in finestra separata che mostra l'EMA dell'RSI,
- un indicatore in finestra separata che mostra dove storicamente si sono verificate condizioni suggerenti trade long o short,
- e un indicatore di pannello che mostra dove le stesse condizioni si sono appena verificate o si stanno attualmente verificando su una serie di coppie e timeframe.
Il codice comune a tutte le scansioni:
Utils.mqh contiene alcune funzioni di utilità che possono essere utilizzate in qualsiasi indicatore o advisor esperto. cs_Chart.mqh contiene quasi tutto il codice che va nell'indicatore del grafico attuale. cs_Panel.mqh contiene quasi tutto il codice che va nell'indicatore di visualizzazione del pannello.
Il codice specifico per la strategia PP (Power Pro):
csPP_0.mq4 mostra gli indicatori pertinenti "finestra-grafico". csPP_1.mq4 mostra gli indicatori pertinenti "finestra-separata". csPP_Chart.mq4 è l'indicatore che mostra cosa è successo storicamente sul grafico attuale. csPP_Panel.mq4 è l'indicatore che mostra la situazione attuale su tutte le coppie e timeframe di vostro interesse. csPP_GetBarFlag.mqh è il codice "incluso" sia negli indicatori Chart che Panel. È la parte che decide se esiste una condizione di interesse in una particolare barra.
Un altro esempio meno complesso (identificatore=MAX):
csMAX_0.mq4 è un indicatore personalizzato che visualizza due medie mobili. È completamente autonomo. Non esiste un equivalente csMAX_1 perché, a differenza di PP, non c'è bisogno di una visualizzazione in finestra separata. csMAX_Chart.mq4, csMAX_Panel.mq4 e csMAX_GetBarFlag.mqh svolgono la stessa funzione per la strategia PP.
Come procedo a codificare una nuova condizione:
Decido un identificatore di strategia (es. PB per pinbars) e configuro la mia finestra come sopra, rimuovendo eventuali indicatori esistenti.
Se la mia nuova scansione si basa su indicatori sul grafico, li costruisco utilizzando csXXXX_0.mq4 come modello. Ricordo di 'salvare come...' csPB_0.mq4 e applico il mio indicatore personalizzato al grafico sinistro.
Se ho bisogno di un indicatore in finestra separata, lo costruisco anch'esso e ricordo di 'salvare come...' csPB_1.mq4 applicandolo al grafico sinistro.
Costruisco indicatori personalizzati piuttosto che utilizzare indicatori standard per poterli richiamare altrove utilizzando la funzione iCustom. In questo modo, se cambio idea sui parametri di base della mia strategia (es. metodo della media mobile), devo cambiare solo i miei indicatori personalizzati.
Prendo csXXXX_Chart.mq4, sostituisco tutte le occorrenze di 'XXXX' con il mio identificatore di strategia 'PB', e salvo il codice come csPB_Chart.mq4. Non compila ancora perché c'è del codice "include" da scrivere.
Per fornire il codice "include", se le condizioni che voglio testare sono molto semplici, utilizzo semplicemente il file "include" csXXXX_GetBarFlag.mqh, codifico ciò che voglio e 'salvo come...' csPB_GetBarFlag.mqh. Se la codifica è complicata, torno a csPB_Chart.mq4, commento la riga che ora legge "#include <csPB_GetBarFlag.mqh>", e costruisco direttamente il codice che voglio all'interno del file csPB_Chart.mq4. Quando ho finito, sposto/incollare il codice per trovare la condizione nel file "include" 'csPB_GetBarFlag.mqh' e ri-commento la dichiarazione #include nel file 'csPB_Chart.mq4'.
Ora il file 'csPB_Chart.mq4' può essere compilato e applicato al grafico sinistro.
A questo punto, salvo il modello per il grafico sinistro come csPB-CHART.tpl. Incorpora eventuali indicatori personalizzati sul grafico, indicatori personalizzati in finestra separata e la trama dei risultati come si applicano al grafico attuale.
Carico il file 'csXXXX_Panel.mq4', sostituisco tutte le occorrenze di "XXXX" con "PB", e 'salvo come...' "csPB_Panel.mq4". Questo ultimo file viene compilato e applicato al grafico destro. Può essere un po' lento all'inizio, ma non utilizza molte risorse durante l'esecuzione.
Di solito salvo csPB come profilo.
NOTA: Quando costruisco indicatori personalizzati e poi li richiamo con la funzione iCustom, faccio attenzione che i nomi siano esattamente corretti. Non ricevi alcun avviso se iCustom si riferisce a un indicatore che non esiste.
NOTA: Potrebbe esserci un bug per cui, quando l'indicatore del pannello viene caricato per la prima volta, produce risultati che non sono coerenti con quelli sul grafico specifico in visualizzazione. Trovo che se cambio la scala temporale nella finestra del pannello (forzando così un ricalcolo), tutto torna a posto. Sarebbe utile se qualcuno potesse aiutarmi a risolvere questo problema.
Alcuni aspetti del software:
Il codice è stato scritto come indicatori in modo che, quando un pannello è visualizzato e si desidera guardare una determinata coppia e timeframe, basta selezionare la coppia dalla finestra Market Watch, trascinarla e rilasciarla nello spazio del grafico attuale e cambiare il timeframe a piacere. Il modello si occupa del resto.
Per ridurre il sovraccarico del computer, ho fatto due cose:
- Quando lavoro con array di serie temporali, di solito torno indietro solo di 200 barre.
- Il software di visualizzazione del pannello non testa le condizioni dell'utente ad ogni tick. Utilizza un meccanismo a timer tale che il test viene applicato solo alla barra[0] se la barra[0] è formata al 90%, altrimenti si applica alla barra[1]. Se la barra[1] ha il focus (cioè la barra[0] è meno del 90% formata), viene testata una volta e viene calcolato un cambio alla barra[0]. Per ogni tick successivo che arriva fino a quando non si raggiunge il tempo di cambio, non succede nulla. Non sono sicuro al 100% di averlo codificato correttamente, ma sembra funzionare piuttosto bene.
In aggiunta al meccanismo del timer menzionato sopra, la linea superiore del pannello mostra la data e l'ora dell'evento di test delle condizioni più recente. Inoltre, negli esempi forniti qui, i wingdings neutrali mostreranno uno zero se la barra[0] è a fuoco e un '1' se la barra[1] è a fuoco.
Post correlati
- Indicatori ZigZag Potenziati: Scopri le Nuove Funzionalità per MetaTrader 4
- Indice di Volatilità Chaikin: Scegli il Giusto Algoritmo di Smussamento per MetaTrader 5
- Volatilità Stocastica: Indicatore per MetaTrader 5 da Utilizzare sul Grafico
- Notis: L'Indicatore per Misurare la Volatilità su MetaTrader 5
- Indicatore Donchian Ultimate per MT4: Scopri tutte le Funzionalità