è però un thread molto lungo e con numerose diramazioni, e il lavoro deve ancora continuare!
così in questo argomento mettiamo invece il primo importante passo: come avere i dati dei futures a disposizione in mql4
primo passo: procurarsi la NinjaTrader illimitata e gratuita
la NinjaTrader è una delle più diffuse e migliore piattaforme per il trading dei futures e altri prodotti, ma è a pagamento o la foniscono con i conti reali per operare su futures & Co. (il conto minimo di solito è qualche K USD...)
cercando in giro, ho trovato 3 broker che la forniscono gratuitamente e senza limiti di utilizzo anche aprendo un conto demo:
ampfutures.com/ninjatrader_cqg.php
https://ninjatrader.com/FreeLiveData
globalfutures.com/platforms/ninjatrader.asp
ad esempio io sto usando questo: globalfutures.com/platforms/ninjatrader.asp e sei già nella pagina della NinjaTrader e in alto centro/sinistra c'è il tasto REQUEST A FREE DEMO, basta seguire tutte le istruzioni, scaricare la NinjaTrader per il data feed CQG e installare tutto
secondo passo: connettersi al conto demo
ti arrivano due mail, una dalla NinjaTrader con la LICENZA da usare e l'altra dal broker con il nome del conto demo e la tua password
appena installata, lanci la NinjaTrader e inserisci la LICENZA che ti hanno inviato, poi dal menù tools in alto -> account connection -> ADD... -> connection name che vuoi, per esempio globalfutures -> Provider CQG -> Connect on startup -> compare la pagina per mettere il nome e la password del tuo conto demo -> seleziona DEMO MODE -> CONFERMA TUTTO
dopo qualche secondo dovresti avere il collegamento VERDE in basso a sinistra e i dati in alto a sinistra con ASK, BID, VOLUMI, ....
terzo passo: caricare il grafico giusto
il grafico che interessa a noi sono gli euro futures con scadenza a marzo 2015, poi ovviamente scorrono con il tempo, comunque noi prendiamo la scadenza più vicina
dal menù in alto FILE -> NEW -> CHART... -> click sul quadratino con i puntini ... -> seleziona il 6E 03 - 15 e hai il grafico che ci interessa
ovviamente qui puoi giocare a piacere con i vari indicatori e le diverse visualizzazioni!
quarto passo, esportare i dati dei futures
scarica il pacchetto DataFutures.zip allegato qui sotto
daI menù in alto della NinjaTrader: FILE -> UTILITIES -> IMPORT NINJASCRIPT -> selezioni il pacchetto che hai scaricato
a questo punto menù TOOLS -> EDIT NINJASCRIPT -> INDICATORS e selezioni DataFutures dall'elenco che compare... e qui comincia il lavoro per i programmatori
il cuore dell'esportazione dei dati è questa funzione, basta sostituire il percorso del file DataFutures.csv e ti ritrovi (finalmente!) tutti i dati dei futures in un file CSV leggibile dalla metatrader
ovviamente è necessario mettere il percorso della cartella FILES della o delle proprie metatrader, attenzione anche alla "sicurezza" di windows, che la cartella sia accessibile in lettura e scrittura dalla NinjaTrader
Codice: Seleziona tutto
protected override void OnMarketDepth(MarketDepthEventArgs e)
{
// Print MarketDepthEventArgs to string
//Print(e.ToString());
string dataStr = e.MarketDataType + " " + e.Operation + " pos " + e.Position + " price " + e.Price + " vol " + e.Volume;
string dataCSV = e.MarketDataType + ";" + e.Operation + ";" + e.Position + ";" + e.Price + ";" + e.Volume;
Print(dataStr);
try
{
StreamWriter sw = File.CreateText(@"C:\Program Files (x86)\MetaTrader - Pepperstone Edge 2\MQL4\Files\DataFutures.csv");
sw.Write(dataCSV);
sw.Dispose();
}
catch
{
Print("Data file busy...");
}
}
scarica l'indicatore DataFutures.mq4 allegato e lancialo su un grafico M5 o M15 della metatrader, sulla sinistra ti compaiono le barre dei contratti reali dei futures ai vari livelli di prezzo
per i programmatori, il cuore che importa i dati dal file CSV è questo
Codice: Seleziona tutto
int fHandle = FileOpen("DataFutures.csv", FILE_CSV | FILE_READ | FILE_SHARE_READ);
if (fHandle < 0)
{
Print("ERROR " + IntegerToString(GetLastError()));
}
else
{
// e.MarketDataType + ";" + e.Operation + ";" + e.Position + ";" + e.Price + ";" + e.Volume;
// Bid;Update;1;1981.5;237
string sType = FileReadString(fHandle);
string sOp = FileReadString(fHandle);
string sPos = FileReadString(fHandle);
string sPrice = FileReadString(fHandle);
string sVol = FileReadString(fHandle);
FileClose(fHandle);
Print(sType + " " + sOp + " " + sPos + " price " + sPrice + " vol " + sVol);
int nPos = StrToInteger(sPos);
double dPrice = StrToDouble (sPrice);
double dVol = StrToDouble (sVol);
}