Oggi parliamo di un argomento interessante per tutti noi trader: l'implementazione di un classificatore basato sui k-nearest neighbors (k-NN) per MetaTrader 4. Ho provato a mettere a punto un sistema di trading che sfrutta questa tecnica di machine learning, ma non è andata come speravo. Probabilmente non ho dedicato abbastanza tempo a perfezionarlo, e può darsi che mi manchi qualche conoscenza in merito. Tuttavia, voglio condividere con voi il mio approccio per discutere e magari trovare insieme spunti utili.
La funzione Euclidean_Metric funge da classificatore. Utilizzando un database di vettori che descrivono le operazioni o le situazioni di mercato, questa funzione determina se un vettore di input appartiene a uno dei gruppi definiti. La suddivisione in gruppi è semplice: se un'operazione si chiude con un risultato positivo, appartiene alla classe 1; se negativa, alla classe 0. La ricerca dei vicini più prossimi di un vettore multidimensionale avviene tramite la distanza euclidea. Successivamente, la funzione calcola quanti di quei k vettori appartengono alla classe 1. Dividendo questo valore per il totale dei vicini (k), otteniamo la probabilità che il vettore appartenga alla classe 1. A causa della selezione non ottimale delle coordinate, la classificazione potrebbe non essere completamente affidabile. Pertanto, ho deciso di aggiungere un valore di soglia: se la probabilità di un'operazione profittevole è superiore a 0,7, allora possiamo entrare nel mercato. Ho utilizzato i rapporti delle medie mobili come misure (coordinate) dei vettori, supponendo che questi rapporti siano statici e che la classificazione possa essere utilizzata anche nei test futuri. Ma non è così semplice! :) Perché proprio i k-nearest neighbors? Perché il primo vicino potrebbe essere un valore anomalo e non considerare che ci sono cluster di vettori opposti nelle vicinanze. Per una descrizione dettagliata, consiglio il libro di S. Haykin «Neural Networks: A Comprehensive Foundation».
Il classificatore presenta due problematiche:
- 1) Trovare dati statici che descrivano le situazioni di mercato (o operazioni future) con il livello di accuratezza desiderato.
- 2) L'elevato volume di operazioni matematiche, il che porta a un tempo di calcolo piuttosto lungo (un po' meno rispetto al PNN).
In parole povere, i problemi sono simili a quelli dei tradizionali sistemi di trading. L'aspetto positivo è che il classificatore può formalizzare condizioni che il trader potrebbe non vedere, ma che intuisce che alcuni valori degli indicatori influenzano l'apertura di un'operazione.
Passiamo ora all'implementazione concreta.
- Base - true scrive un file con il database dei vettori, false per il trading con classificazione.
- buy_threshold = 0.6: soglia per tutte le posizioni Buy.
- sell_threshold = 0.6: stessa cosa per le posizioni Sell.
- inverse_position_open ? = true: se la probabilità di un'operazione profittevole è molto bassa, perché non entrare nel mercato con una posizione invertita? Questo flag abilita tali posizioni.
- invers_buy_threshold = 0.3: soglia quando la probabilità di una posizione Buy profittevole è minore; in questo caso, si apre un'operazione Sell.
- invers_sell_threshold = 0.3: stessa cosa per le posizioni Sell.
- fast = 12: parametri per MACD.
- slow = 34.
- tp = 40: Take Profit.
- sl = 30: Stop Loss.
- close_orders = false: flag per chiudere solo con un segnale opposto se l'operazione è in profitto.
Utilizzo: prima di tutto, imposta Base su true, imposta sl = tp e esegui la storia (solo una volta!) per scrivere il file dei vettori. La volta successiva imposta Base su false e ottimizza le soglie, che scelgo in base al primo report (senza classificazione). Se la probabilità di successo = 0,5, le soglie saranno 0,6 e 0,4 (per invertire la posizione).
Questo è solo un esempio, ma il classificatore può essere applicato ad altri sistemi di trading in modo simile, utilizzando dati di input diversi.
Prima della classificazione:

Dopo, con ottimizzazione delle soglie.



Post correlati
- Dematus: Il Sistema di Trading per MetaTrader 5
- RRS Impulse: Il Tuo Esperto per MetaTrader 4
- MQL5 Wizard: Creare Trading Signals con Morning/Evening Stars e MFI per MetaTrader 5
- Creare Expert Advisor con MQL5 Wizard: Segnali di Trading basati su Bullish e Bearish Harami con Stochastic
- MQL5 Wizard: Creare Expert Advisor per Segnali di Trading con Bullish Harami, Bearish Harami e MFI