這篇文章適合有一定動(dòng)手能力的交易者,在這里找不到直接可以使用的DLL.
今天群里的朋友討論如何用MetaTrader交易國(guó)內(nèi)的期貨,我就把自己了解到的一部分內(nèi)容寫了下來(lái),然后就有了這篇文章討論一下程序化交易軟件的事情.
先說(shuō)MetaTrader4軟件功能強(qiáng)大,在很多國(guó)內(nèi)外的外匯交易上都有很多應(yīng)用,其中強(qiáng)大的腳本語(yǔ)言和測(cè)試功能都是相當(dāng)不錯(cuò)的.
如果得知MT4的內(nèi)部溝通方式,這款交易軟件大部分都是通過(guò)消息的方式來(lái)進(jìn)行溝通,使用VC自帶的SPY++ 能看到大部分消息特別是刷新部分也是通過(guò)
PostMessage 這個(gè)消息來(lái)發(fā)送的,包括刷新行情和自動(dòng)化交易;
其中比較重要的就是 RegisterWindowMessageA用來(lái)注冊(cè)內(nèi)部消息
后面跟WPARAM 和LPARAM 基本和VC里面的沒有差別.
重要的是Mt4本身還支持DLL ,很多程序化交易員都使用過(guò)CTP接口,將他封裝到DLL再使用CTP作為行情和交易接口.
下面就剩一個(gè)問(wèn)題就是 CTP數(shù)據(jù)如何與DLL交換 ,
使用MT4API 取CTP中保存的數(shù)據(jù),可以使用進(jìn)程間通信的命名管道,剪切板等,還以為使用ZMP等開源的通信庫(kù)來(lái)搭建,通過(guò)MT4的腳本來(lái)計(jì)算數(shù)據(jù)將下單信號(hào)送回CTP中來(lái)開倉(cāng).
最后附上二個(gè)數(shù)據(jù): mt4 歷史文件保存頭信息
struct HistoryHeader{
int version; // 基礎(chǔ)版本
char copyright[64]; // 版權(quán)信息
char symbol[12]; // 證券
int period; // 保證金期限
int digits; // 數(shù)字的總量
time_t timesign; // 基礎(chǔ)報(bào)時(shí)的創(chuàng)建
time_t last_sync; // 同步時(shí)間
int unused[13]; // 將來(lái)應(yīng)用
};
//隨后數(shù)據(jù)排列(一字節(jié)調(diào)整) 如下:
#pragma pack(push,1)//---- 以常規(guī)報(bào)價(jià)代理為基礎(chǔ)
struct RateInfo{
time_t ctm;// 以秒計(jì)算當(dāng)前時(shí)間
double open;
double low;
double high;
double close;
double vol;
};
#pragma pack(pop)