量化交易軟件:多元回歸分析策略生成程序和策略分析程序二合一

簡介
我的一位熟人在參加 Forex 培訓(xùn)課時(shí)曾經(jīng)接到開發(fā)一個(gè)交易系統(tǒng)的任務(wù)。被其困擾大約一個(gè)星期之后,他說,這項(xiàng)任務(wù)或許比寫一篇論文還要困難。就在那時(shí),我建議他使用多元回歸分析。結(jié)果,他從頭開始,一個(gè)晚上就開發(fā)出一個(gè)交易系統(tǒng),成功獲得了審查者的認(rèn)可。
成功使用多元回歸在于能夠快速找到指標(biāo)和價(jià)格之間的關(guān)系。發(fā)現(xiàn)的關(guān)系允許基于指標(biāo)值,在一定的概率下預(yù)測價(jià)格。現(xiàn)代統(tǒng)計(jì)軟件允許同時(shí)過濾數(shù)以千計(jì)的參數(shù),試圖找出這些關(guān)系。這可與工業(yè)化砂里淘金相比。
通過將指標(biāo)數(shù)據(jù)加載到多元回歸分析并相應(yīng)地應(yīng)用數(shù)據(jù)處理,開發(fā)一個(gè)即用型策略和策略生成程序。
本文說明使用多元回歸分析創(chuàng)建交易策略的過程。
1. 開發(fā)交易機(jī)器人 - 小菜一碟!
前文中提及的通宵開發(fā)出來的交易系統(tǒng)的骨干是一個(gè)等式:
Reg=22.7+205.2(buf_DeMarker[1]-buf_DeMarker[2])-14619.5*buf_BearsPower[1]+22468.8*buf_BullsPower[1]-139.3*buf_DeMarker[1]-41686*(buf_AC[1]-buf_AC[2])
其中,如果 Reg >0,則我們買入,如果 Reg < 0,則我們賣出。
該等式是使用來自標(biāo)準(zhǔn)指標(biāo)的數(shù)據(jù)樣本進(jìn)行多元回歸分析的結(jié)果。依據(jù)該等式開發(fā)了一個(gè) EA。負(fù)責(zé)交易決策的代碼僅由 15 行構(gòu)成。本文附帶了含有完整源代碼的 EA (R_check)。
? //--- checking the price change range ? double price=(mrate[2].close-mrate[1].close)/_Point; ? //--- if the range is big, do not take trades and close the current positions ? if(price>250 || price<-250) ? ? { ? ? ?ClosePosition(); ? ? ?return; ? ? } ? //--- regression equation ? double Reg=22.7+205.2*(buf_DeMarker[1]-buf_DeMarker[2]) ? ? ? ? ? ? ? ? -14619.5*buf_BearsPower[1]+22468.8*buf_BullsPower[1] ? ? ? ? ? ? ? ? -139.3*buf_DeMarker[1] ? ? ? ? ? ? ? ? -41686*(buf_AC[1]-buf_AC[2]); ? //--- checking for open positions ? if(myposition.Select(_Symbol)==true) //--- open positions found ? ? { ? ? ?if(myposition.PositionType()==POSITION_TYPE_BUY) ? ? ? ?{ ? ? ? ? Buy_opened=true; ?// long position (Buy) ? ? ? ?} ? ? ?if(myposition.PositionType()==POSITION_TYPE_SELL) ? ? ? ?{ ? ? ? ? Sell_opened=true; //--- short position (Sell) ? ? ? ?} ? ? } ? //--- if an open position follows the trend as predicted by the equation, abstain from doing anything. ? if(Reg>0 ?&& ?Buy_opened==true) return; ? if(Reg<=0 && Sell_opened==true) return; ? //--- if an open position is against the trend as predicted, close the position. ? if(Reg<=0 && Buy_opened==true) ClosePosition(); ? if(Reg>0 && Sell_opened==true) ClosePosition(); ? //--- opening a position in the direction predicted by the equation. ? //--- using level 20 to filter the signal. ? if(Reg>20) BuyOrder(1); ? if(Reg<-20) SellOrder(1);
回歸分析使用 EURUSD H1 從 2011 年 7 月 1 日至 2011 年 8 月 31 日的兩個(gè)月的數(shù)據(jù)樣本。
圖 1 顯示了 EA 在其開發(fā)數(shù)據(jù)期內(nèi)的性能結(jié)果。非常罕見,沒有在培訓(xùn)數(shù)據(jù)中觀察到在測試程序中經(jīng)常出現(xiàn)的超額利潤。這肯定是缺少再優(yōu)化的標(biāo)記。

編輯切換為居中
圖 1. 訓(xùn)練期內(nèi)的 EA 性能
圖 2 說明了使用測試數(shù)據(jù)(來自 2011 年 9 月 1 日至 2011 年 11 月 1 日的 EA 性能結(jié)果。看來兩個(gè)月的數(shù)據(jù)足以讓 EA 在另兩個(gè)月內(nèi)保持盈利。也就是說,EA 在測試期內(nèi)的盈利與在訓(xùn)練期內(nèi)的盈利是相同的。

編輯切換為居中
圖 2. 測試期內(nèi)的 EA 性能
這樣,基于多元回歸分析,開發(fā)出了一個(gè)盈利超過訓(xùn)練數(shù)據(jù)的相當(dāng)簡單的 EA。因此,在建立交易系統(tǒng)時(shí),可以成功應(yīng)用回歸分析。
然而,不應(yīng)過高估計(jì)回歸分析的資源。以下將進(jìn)一步指出其優(yōu)點(diǎn)和缺點(diǎn)。
2. 多元回歸分析
多元回歸分析的一般目的在于分析幾個(gè)獨(dú)立變量和一個(gè)依存變量之間的關(guān)系。量化交易的案例中,它分析指標(biāo)值和價(jià)格運(yùn)動(dòng)之間的關(guān)系。
以最簡單的形式,這個(gè)等式可如下所表示:
價(jià)格變化 = a * RSI + b * MACD + с
只有在若干個(gè)獨(dú)立變量和一個(gè)依存變量之間存在相關(guān)性時(shí)才能生成回歸等式。指標(biāo)值相關(guān)是一項(xiàng)原則,如果在分析中添加指標(biāo)或從分析中去除指標(biāo),則按指標(biāo)進(jìn)行預(yù)測所做出的貢獻(xiàn)可能會(huì)有很大不同。請(qǐng)注意,回歸等式僅僅說明數(shù)字依存關(guān)系,并不說明因果關(guān)系。系數(shù) (a, b) 表示每個(gè)獨(dú)立變量對(duì)其與一個(gè)依存變量的關(guān)系做出的貢獻(xiàn)。
回歸等式表示變量之間的理想依存關(guān)系。然而,在 Forex 中這是不可能的,預(yù)測始終與實(shí)際不同。預(yù)測值與觀察值之間的差異稱為殘差。殘差分析尤其用于識(shí)別指標(biāo)和價(jià)格之間的非線性依存關(guān)系。在我們的案例中,量化交易假定在指標(biāo)和價(jià)格之間僅有非線性依存關(guān)系。幸運(yùn)地是,回歸分析不受與線性的微小偏差的影響。
它只能用于分析定量參數(shù)。沒有過渡值的定量參數(shù)不適合此分析。
回歸分析能處理任意數(shù)量的參數(shù)這一事實(shí)或許誘使盡可能多的參數(shù)被包含在分析中。但是,如果獨(dú)立參數(shù)的數(shù)量大于它們與一個(gè)依存參數(shù)的互動(dòng)的觀察結(jié)果的數(shù)量,則有極大的可能獲得具有良好預(yù)測結(jié)果的等式,然而這種預(yù)測結(jié)果以隨機(jī)波動(dòng)為基礎(chǔ)。
觀察結(jié)果的數(shù)量應(yīng)比獨(dú)立參數(shù)的數(shù)量大 10-20 倍。
在我們的案例中,數(shù)據(jù)樣本中包含的指標(biāo)數(shù)量應(yīng)比我們的樣本中的交易數(shù)量大 10-20 倍。生成的等式將被視為可靠。據(jù)其開發(fā)出第 1 節(jié)所述的交易機(jī)器人的樣本包含 33 個(gè)參數(shù)和 836 個(gè)觀察結(jié)果。因此,觀察結(jié)果的數(shù)量比參數(shù)的數(shù)量大 25 倍。此要求是統(tǒng)計(jì)學(xué)中的一個(gè)基本原則。它還適用于量化交易策略測試程序優(yōu)化程序。
此外,優(yōu)化程序中指標(biāo)的每一個(gè)指定值事實(shí)上都是一個(gè)單獨(dú)的參數(shù)。換言之,在測試 10 個(gè)指標(biāo)值時(shí),量化交易處理為了避免再優(yōu)化而要考慮的 10 個(gè)獨(dú)立參數(shù)。優(yōu)化程序的報(bào)告或許應(yīng)包含另一個(gè)參數(shù):交易的平均數(shù)量/所有優(yōu)化參數(shù)的值的數(shù)量。如果指標(biāo)值小于 10,則需要再優(yōu)化。
要考慮的另外一樣?xùn)|西是異常值。罕見且反應(yīng)強(qiáng)烈的事件(比如本例中的價(jià)格尖峰)可能向等式添加虛假的依存關(guān)系。比如說,繼意外消息后,市場會(huì)以持續(xù)數(shù)小時(shí)的大幅波動(dòng)為響應(yīng)。這種情況下的技術(shù)指標(biāo)值對(duì)于預(yù)測而言幾乎沒有作用,但在回歸分析中它們?nèi)匀槐徽J(rèn)為非常重要,就是因?yàn)榇嬖谝粋€(gè)顯著的價(jià)格變動(dòng)。因此,過濾樣本數(shù)據(jù)或檢查是否有可能的異常值是明智的。
3. 創(chuàng)建您自己的策略
量化交易已經(jīng)接近關(guān)鍵部分,在這個(gè)部分,我們將查看如何依據(jù)您自己的數(shù)據(jù)生成一個(gè)回歸等式。回歸分析的實(shí)施類似于以前介紹的判別分析的實(shí)施?;貧w分析包括:
準(zhǔn)備用于分析的數(shù)據(jù);
從準(zhǔn)備數(shù)據(jù)中選擇最佳變量;
獲得回歸等式。
多元回歸分析是大量用于統(tǒng)計(jì)數(shù)據(jù)分析的高級(jí)軟件產(chǎn)品的一部分。最流行的軟件是 Statistica(StatSoft 公司出品)和 SPSS(IBM 公司出品)。量化交易將使用 Statistica 8.0 進(jìn)一步研究回歸分析的應(yīng)用。
3.1. 準(zhǔn)備用于分析的數(shù)據(jù)
量化交易即將生成一個(gè)回歸等式,可以依據(jù)當(dāng)前柱上的指標(biāo)值預(yù)測下一柱上的價(jià)格行為。
使用用于準(zhǔn)備判別分析數(shù)據(jù)的同一 EA 來收集數(shù)據(jù)。量化交易將通過添加一個(gè)用于存儲(chǔ)具有其它周期的指標(biāo)值的函數(shù)來擴(kuò)展其功能。將依據(jù)相同指標(biāo),但具有不同周期的分析,使用擴(kuò)展的參數(shù)組合來進(jìn)行策略優(yōu)化。
要將數(shù)據(jù)載入到 Statistica,應(yīng)該具備含有以下結(jié)構(gòu)的 CSV 文件。變量應(yīng)按列排列,每列對(duì)應(yīng)一個(gè)特定的指標(biāo)。行中應(yīng)包含連續(xù)測量值(情況),即特定柱指標(biāo)的值。換而言之,水平表頭包含指標(biāo),垂直表頭則包含連續(xù)柱。