使用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\目錄內,然後和主程序關聯一下就可以了。在正常交易日內,程序開始工作後,只要有行情信息變更,就會把行情保存至本地,有了行情數據,可做的事情還是蠻多的 。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章