使用MQL语言获取mt4行情并保存至本地

        可能大家知道大智慧、同花顺多一些,因为平时多少会接触一些股票知识,也会进行一些股票投资。虽然A股市场想赚钱还是非常难的,但是手头有一点钱难免会蠢蠢欲动。在股票这个领域,大智慧和同花顺名气大一些,可以用来看行情或者交易。但是在另一个投资领域,外汇、期货和现货市场,什么软件名气更大呢,我想应该是MetaTrader 4,简称mt4,虽然现在mt5也已经出来了,但是身边朋友还是习惯用mt4。外汇、期货和现货这个领域投资风险很高,杠杆也高,一般都是百倍左右杠杆,很刺激,方向做对了,分分钟收益翻倍,方向做错了,瞬间爆仓也是可能的。这一领域已经不算价值投资了,更多还是考验人的心里、技术分析,甚至也有一些运气成分。回到本文话题,在使用mt4看行情时,如何把行情也保存至本地呢?需要使用mql编程语言,该语言主要用于编写交易策略,实现自动化交易,说白了就是使用该语言编写脚本,然后满足一定条件就开始交易,所谓程序化、自动化、智能化交易。那么mql语言难学吗?如果懂c语言的话,会感觉很简单。所以当有人问我初学者该学哪门编程语言时,我都推荐学c语言,很古董吗?有点,但是一旦掌握了c语言,或者说入门了c语言,在看其他很多语言都比较容易了,其实很多编程语言都是在c的基础上衍生的,也就是后续很多编程语言的设计者,他们都是c语言高手,都很精通c语言,所以在设计新语言时,难免会借鉴一些c语言的规范及思想。学习c语言,不一定使用c语言写多少代码,而是通过c语言建立编程思想,最简单的编程思想。如果一开始学习java,很可能基础编程思想还没有建立,就被一对面向对象、函数式编程等等词汇概念搞晕了,甚至积极性被打击。下面就是获取行情信息并保存至本地的代码:
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int handle;
int OnInit()
{
    int hour = TimeHour(TimeLocal());
    int minute = TimeMinute(TimeLocal());
    minute = minute - (minute % 5);
    string timeLocal = TimeToStr(TimeLocal(), TIME_DATE);
    string fileName = timeLocal + "/" + hour + "/XAU_" + minute + ".txt";
    handle = FileOpen(fileName, FILE_TXT|FILE_WRITE|FILE_SHARE_READ, ",");
    
    Print("OnInit..........");
    return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
    FileClose(handle);
    Print("OnDeinit..........");
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
    // 创建新文件
    int minute = TimeMinute(TimeLocal());
    if (minute % 5 == 0) {
        int hour = TimeHour(TimeLocal());
        string timeLocal = TimeToStr(TimeLocal(), TIME_DATE);
        string fileName = timeLocal + "/" + hour + "/XAU_" + minute + ".txt";
        
        FileClose(handle);
        handle = FileOpen(fileName, FILE_TXT|FILE_WRITE|FILE_SHARE_READ, ",");
    }

    // 写文件
    FileWrite(handle, Bid, TimeLocal(), "*");
    FileFlush(handle); 
}
//+------------------------------------------------------------------+
        代码很简单,我的思路是每隔指定时间,会创建一个小文件,在该时间段内,所有行情信息会写进这个小文件,这样可以方便文件检索和管理。整个代码结构一个资源初始化函数,一个资源释放函数,一个事件触发函数,获取行情和保存的主逻辑都在这个函数内。这些函数会以回调的形式被mt4主程序调用,所以运行这段代码,先要打开mt4主程序,并将代码文件放置在MQL4\Experts\目录内,然后和主程序关联一下就可以了。在正常交易日内,程序开始工作后,只要有行情信息变更,就会把行情保存至本地,有了行情数据,可做的事情还是蛮多的 。



你可能感兴趣的:(程序化交易)