期貨量化軟件:從市場(chǎng)里選擇智能交易系統(tǒng)的正確途徑
智能交易系統(tǒng)運(yùn)營(yíng)機(jī)制的關(guān)鍵
我們將研究清單中的前三項(xiàng)組合。 基于測(cè)試我自己和其他人員開(kāi)發(fā)的系統(tǒng)經(jīng)驗(yàn),以及其他用戶的經(jīng)驗(yàn),我可以說(shuō)有這樣幾種類型的智能交易系統(tǒng):
基于即時(shí)報(bào)價(jià)的 EA
基于柱線的 EA
由計(jì)時(shí)器控制的 EA
如您所見(jiàn),類型并不多。 例如,如果一個(gè) EA 是基于即時(shí)報(bào)價(jià)操作的,那么它只會(huì)在該事件發(fā)生后,才會(huì)執(zhí)行所有計(jì)算和交易操作。 第二種類型稍微復(fù)雜一些。 以前我在開(kāi)發(fā)基于即時(shí)報(bào)價(jià)的機(jī)器人,現(xiàn)在我已經(jīng)切換到基于柱線操作的 EA。 不幸的是,在 MQL4 和 MQL5 的智能交易系統(tǒng)中,不可能收到新柱線出現(xiàn)事件。 但它可以通過(guò)運(yùn)用其它功能,以不同的途徑實(shí)現(xiàn)。 這與測(cè)試間隔的長(zhǎng)度直接相關(guān)。 第三類智能交易系統(tǒng)是由計(jì)時(shí)器操控的。 并非所有此類 EA 都能在策略測(cè)試器中正確測(cè)試。 開(kāi)發(fā)人員通??梢宰C明這種選擇是合理的,但我對(duì)這種解決方案非常懷疑。
如果一款智能交易系統(tǒng)跟蹤即時(shí)報(bào)價(jià),這會(huì)在實(shí)際運(yùn)行時(shí)導(dǎo)致自發(fā)產(chǎn)生額外的風(fēng)險(xiǎn)和困難。 此類 EA 通常對(duì)網(wǎng)速非常敏感,尤其是靠市價(jià)單進(jìn)行交易的情況下。 對(duì)它們來(lái)說(shuō),即使是 50 毫秒的延遲也是至關(guān)重要的。 在這種情況下,人們只能租用靠近交易服務(wù)器的VPS(虛擬服務(wù)器),從而盡量降低這種延遲影響。
如果機(jī)器人使用掛單,則幾乎可以完全消除這種負(fù)面情況。 無(wú)論如何,這樣的系統(tǒng)可以產(chǎn)生更多的利潤(rùn)、或減少可能的損失。
根據(jù)我的經(jīng)驗(yàn),最穩(wěn)定的是追蹤柱線的系統(tǒng) — 我將在文章末尾用我自己開(kāi)發(fā)的系統(tǒng)來(lái)證明這一點(diǎn)。 當(dāng)然,根據(jù)即時(shí)報(bào)價(jià)數(shù)據(jù)可以找到盈利豐厚的系統(tǒng),但這要困難得多。 我之所以提及這一點(diǎn),是因?yàn)楸疚牡哪康氖?strong>提供制定正確決策的最簡(jiǎn)單方法。
根據(jù)上述思路,最重要的部分是根據(jù)以下原則對(duì)系統(tǒng)進(jìn)行測(cè)試:
EA 跟蹤即時(shí)報(bào)價(jià)
EA 跟蹤柱線
我們來(lái)看看這些事件是如何在代碼中實(shí)現(xiàn)的。 以下是新的即時(shí)報(bào)價(jià)出現(xiàn)事件:
//+------------------------------------------------------------------+//| Expert tick function???????????????????????????????????????????? |//+------------------------------------------------------------------+void OnTick() ??{ ??//some logic??}
一次即時(shí)報(bào)價(jià)是來(lái)自服務(wù)器的每個(gè)新價(jià)格。 如果服務(wù)器上的價(jià)格發(fā)生變化,服務(wù)器會(huì)將此事件發(fā)送給所有客戶端。 基于柱線的操作可由此事件及額外應(yīng)用過(guò)濾功能來(lái)實(shí)現(xiàn)://+------------------------------------------------------------------+//| Expert new bar function??????????????????????????????????????????|//+------------------------------------------------------------------+datetime PrevTimeAlpha=0;??bool bNewBar() ?? { ?? if ( Time[1] > PrevTimeAlpha ) ?????? { ?????? if ( PrevTimeAlpha > 0 ) ??????????{ ??????????PrevTimeAlpha=Time[1]; ??????????return true; ??????????} ?????? else??????????{ ??????????PrevTimeAlpha=Time[1]; ??????????return false; ??????????} ?????? } ?? else return false; ?? }??
這是我如何做到這一點(diǎn)的一個(gè)示例。 還有其它可能的方法。 重要的是,所有這些函數(shù)最終都將在 OnTick 事件中用到:void OnTick() ??{ ??if ( bNewBar() ) { /*some logic*/ } ??}
下面是計(jì)時(shí)器事件://+------------------------------------------------------------------+//| Timer function?????????????????????????????????????????????????? |//+------------------------------------------------------------------+void OnTimer() ??{ ??//some logic??}
可以看出,就像在前面的事件中一樣,所有邏輯都源自事件,任何智能交易系統(tǒng)代碼都正是由這些事件驅(qū)動(dòng)才進(jìn)行操作。 在此之前,應(yīng)在 EA 啟動(dòng)期間為計(jì)時(shí)器事件設(shè)置所需的時(shí)間(以毫秒為單位)://+------------------------------------------------------------------+//| Expert initialization function?????????????????????????????????? |//+------------------------------------------------------------------+int OnInit() ??{ ?? EventSetTimer(60); ?? return(INIT_SUCCEEDED); ??}
這就行了。 我們已經(jīng)看到了三種可能的 EA 邏輯范式,這足夠進(jìn)一步的分析了。 當(dāng)然,還有很多其它的事件,但是算法交易者很少會(huì)用到它們,因?yàn)樗鼈兪欠浅9之惡颓榫盎摹?/p>