股票量化交易軟件:將概率論應(yīng)用于缺口交易

本文延續(xù)作者之前文章中開始的話題:在交易中應(yīng)用概率論和數(shù)理統(tǒng)計。 赫茲股票量化將研究運用相應(yīng)的方法來創(chuàng)建并測試交易策略。

首先,赫茲股票量化將探索這種交易的可能性,即檢測來自隨機漫游假想的偏差。 事實證明,如果價格表現(xiàn)為零漂移隨機漫游(沒有方向趨勢),那么盈利交易是不可能的。 這為尋找反制這一假想的方法提供了基礎(chǔ)。 如果找到一種反制該假想的方法,我們也許會嘗試運用它來制定交易策略。
赫茲股票量化還將繼續(xù)研究我們在之前發(fā)表的文章中開始的風(fēng)險主題。 進而,我們將它們作為 第一 和 第二 參考文章。
由于赫茲股票量化的方法基于概率論,因此建議理解其基礎(chǔ),但這并非強制性的。 重要的是理解概率方法的本質(zhì) ? 越是系統(tǒng)和經(jīng)常性地使用它們,得到的結(jié)果越可觀和明顯(由于大數(shù)定律)。 當然,它們的應(yīng)用要充分論證。
有關(guān)智能交易系統(tǒng)的一般性注意事項
開發(fā) EA 大致可分為三個階段:
產(chǎn)生思路。
運用各種簡化驗證思路。
令思路適配市場現(xiàn)實。
本文將主要探討第二階段,令赫茲股票量化能夠更加徹底地契合所述主題。 此外,在論壇上針對這個階段的討論比其它階段更頻繁。
我們來描述已實現(xiàn)的簡化。 我們將 EA 限定在僅交易單一資產(chǎn)。 赫茲股票量化假設(shè)資產(chǎn)價格以賬戶貨幣表示。 我們將排除非交易操作(如賬戶中的利息和資金存?。?,并且不會考慮不同類型的訂單(僅按市價進行買賣)。 我們將在執(zhí)行訂單時忽略滑點,且將點差(s)視為固定數(shù)值。 我們還假設(shè)由 EA 管控我們賬戶上的所有資金,并且沒有其它 EA 參與干擾。
通過所有這些簡化,EA 操作結(jié)果確定無疑地定義為 v(t) 函數(shù) ? 取決于時間的持倉量。 正數(shù)值 v(t) 對應(yīng)買入,而負數(shù)值對應(yīng)賣出。 此外,p(t) (資產(chǎn)價格) 函數(shù)和 c0 (初始資金)。 下圖展示了可能的 v=v(t) 持倉圖表。

編輯
買入價格和賣出價格之間的算術(shù)平均值。
v(t) 和 p(t) 是分段常數(shù)(步進)函數(shù),因為它們的值是一些最小增量步長的倍數(shù)。 如果需要更嚴格的數(shù)學(xué)定義,則可以認為它們自右側(cè)是連續(xù)的,并且在左側(cè)的缺口處有限制。 赫茲股票量化假定 v(t) 缺口點數(shù)永遠不會匹配 p(t)。 換言之,任意時刻至多改變兩者當中其一的數(shù)值 ? 價格或持倉量,或兩者都保持不變。 值得注意的是,價格或交易量可能發(fā)生變化的時間點,也是某個最小步長的倍數(shù)。
根據(jù)這些數(shù)據(jù),赫茲股票量化可以找到 c(t) 函數(shù) ? 取決于時間的資金數(shù)值。 它被定義為我們在 t 時刻平倉情況下由 EA 管控的賬戶部分的余額值。 由于我們在賬戶上只有一個 EA,因此該數(shù)值與 赫茲股票量化中定義的賬戶凈值一致。
定義 c(t) 在 t 時刻的變化。 如果此時的交易量和價格沒有變化,那么它自然為零。 如果價格變化,資金的增長等于交易量乘以價格增量的乘積。 如果交易量發(fā)生變化,則可能有兩種選項 ? 當絕對持倉量減少時,資金保持不變,當它增長時,資金降低的額度等于點差與交易量變化絕對值的乘積。 換言之,如果一筆持倉部分平倉,凈值不會變化,而加倉則會導(dǎo)致凈值略有下降。 所以,c(t) 在 t 時刻的資金數(shù)值等于 c0=c(0) 之總合,且其所有變化都是從零時刻直至 t。
在開發(fā)我們的風(fēng)險理論時(在之前的兩篇文章中),赫茲股票量化使用了“交易(deal)”的概念。 這個概念與 赫茲股票量化中所謂的“成交(deal)”并不完全吻合,更多的對應(yīng)于那里所謂的“交易(trade)”。 確切地說,它對應(yīng)于我們所說的簡單倉位。 根據(jù)我們的定義,一筆簡單倉位是由開倉和平倉的時刻決定的。 它的交易量和方向在那些時刻之間保持不變。 下面是一筆簡單倉位的樣本 v=v(t) 圖表。

編輯
任何倉位(因為它總是分段常數(shù))可以想象為簡單倉位的總和。 這種表示可以由無數(shù)種方式完成。 下圖展示了由兩種不同方式表示的單筆倉位,即簡單倉位的總和。 初始倉位以藍色顯示,而所有交易以綠色和紅色分開顯示。 當采用 赫茲股票量化 中的成交概念時,赫茲股票量化還有另一種選擇。 這些方法中的每一種都非常合理。

編輯切換為居中
有些 EA,采用這樣表示沒有多大意義。 例如,可能有些 EA,其倉位遞增,之后再遞減。 與此同時,還有些 EA,采用這樣表示則非常自然。 例如,一筆持倉可以由一系列在時間上不相交的簡單倉位組成。 下圖包含此類持倉的示例。

編輯切換為居中
每筆交易(簡單倉位)后的資金相對變化 c1/c0 表示為兩個數(shù)值 ? 盈利能力 a 和風(fēng)險 r: c1/c0=1+ra。 盈利能力等于交易期間的價格上漲與入場價格和止損之間差值的比率,而風(fēng)險與交易量成比例,且意味著在止損確切激活的情況下將虧損的資金份額。
所以,替代研究 v(t), p(t) 和 c(t) 時間函數(shù),赫茲股票量化轉(zhuǎn)向分析表征交易順序的數(shù)字序列。 這極大地簡化了進階研究。 特別是,當處理不確定性的概率模型時,我們能避免在有限隨機變量集合上應(yīng)用自我限定隨機過程理論。
針對資產(chǎn)價格行為與交易結(jié)果,概率論是一種普遍接受的不確定性數(shù)學(xué)建模方法。 根據(jù)這種方法,我們應(yīng)考慮將 v(t), p(t) 和 c(t) 函數(shù)作為一些隨機過程的具體實現(xiàn)(軌跡)。 一般而言,這項任務(wù)實際上是無法解決的。 主要原因是缺乏準確描述價格行為的契合概率模型。 因此,考慮可能的解決方案的特殊情況是有意義的。 如上所述,在本文中,赫茲股票量化將考慮由 EA 形成的倉位可以恰如其分地表示為一系列簡單倉位(交易)。
值得一提的是與 EA 相關(guān)的另一個問題 – 參數(shù)。 詳研究慮它們對于在 EA 開發(fā)過程實現(xiàn)一些形式化(標準化)將會很有用。 我們將參數(shù)分為三種類型:
歷史參數(shù)。 EA 操作期間,可能會在一筆交易至另一筆交易時變化的參數(shù)。 這些是指標值,日間時刻,新聞數(shù)據(jù),月相等。 一般來說,它們是時間函數(shù),就像價格或持倉量一樣。 在應(yīng)用簡化的情況下,我們可將它們視為已知的達成交易時刻的數(shù)字序列。 每個特定交易的參數(shù)(方向,交易量,止損和止盈)基于歷史參數(shù)的數(shù)值來定義。
實際參數(shù)。 赫茲股票量化簡單地稱它們?yōu)槎虝簠?shù)。 它們在 EA 開始交易時設(shè)置,并且只能在測試和優(yōu)化 EA 時應(yīng)用。
元參數(shù)設(shè)置 EA 優(yōu)化算法,例如,自定義優(yōu)化條件參數(shù)。 假設(shè)我們想要通過兩個條件來優(yōu)化 EA,盡管僅能逐一來完成。 我們將兩個原始條件形成一個新條件,并取它們的一些權(quán)重總和。 這些權(quán)重作為元參數(shù)。
例如,在下面描述的基于缺口的 EA 中,最小缺口是 EA 參數(shù),而每個特定缺口的大小是歷史參數(shù)。 在這種情況下,元參數(shù)可以包括優(yōu)化條件編號(我們假設(shè)條件以某種順序編號,例如,按照利潤優(yōu)化是#1,而按照回撤優(yōu)化是#2,等等)。
在本文中,我們將使用與歷史參數(shù)相關(guān)的一個重要簡化。 當我們談?wù)摻灰椎幕貓蠓植紩r,通??赡苋Q于這些參數(shù)。 我們假設(shè)這種依賴性是微不足道的。 主要原因是考慮到這種依賴性通常令模型過度復(fù)雜化,最終可能導(dǎo)致過度擬合。
交易策略是反制隨機漫游假想的一種嘗試
我們已經(jīng)提到缺乏描述價格行為的準確模型。 然而,近似的模型也可能有用。 例如,存在一種眾所周知的價格行為模型,視其價格作為零漂移的隨機漫游(沒有定向趨勢)。 該模型稱為 隨機漫游假想。 根據(jù)這一假想,如果我們考慮到點差,任何 EA 的平均利潤均為零或小有虧損。
證明不可能在隨機漫游中賺錢是相當困難的,因為它需要涉及隨機過程理論的復(fù)雜數(shù)學(xué)裝置(伊藤演算,停止時間, 等等)。 一般來說,它歸結(jié)為這樣的陳述,即在沒有趨勢的隨機漫游交易時,資本是 鞅(martingale)(概率論,不要與賭博系統(tǒng)的 馬丁格爾(martingale) 混淆)。 鞅是一個隨機過程,其平均值(數(shù)學(xué)期望)不隨時間變化。 在我們的例子中,這意味著任何時候資本數(shù)值的數(shù)學(xué)期望等于其初始值。
因此,我們開始研究交易思路時,應(yīng)搜索隨機漫游的統(tǒng)計數(shù)據(jù)中的明顯價格偏差。 為此,我們將使用概率論和數(shù)理統(tǒng)計中的思路,但首先,我們做一些觀察:
任何這種解決方案本質(zhì)上都是概率性的 ? 我們的結(jié)論總是會有一些非零概率是錯誤的。
如果我們的方法沒有檢測到偏差,這并不意味著它們完全沒有。 也許,其它一些方法會檢測到它們。
統(tǒng)計上明顯的偏差并不能保證獲得統(tǒng)計上顯著的正盈利 ? 偏差的存在是必要的,但不是充分條件。
我們來構(gòu)建一個搜索隨機漫游偏差的方法。 為此,我們考慮一些隨機變量,我們將依據(jù)采用實際價格形成的樣本建立經(jīng)驗概率分布。 此外,假設(shè)價格行為是隨機漫游,我們將構(gòu)建相同數(shù)值的理論概率分布。 比較這些分布,我們將決定反制(或不可能反制)隨機漫游假想。
我們lai1構(gòu)建一個合適數(shù)值的示例。 假設(shè)在 t0 初始時刻,價格等于 p0。 我們?nèi)∑渌?p1 價格值不等于 p0。一直等到價格抵達數(shù)值 p(t1)=p1 的 t1 時刻。 我們在 t0 and t1 時間段中搜尋價格 p2,其距價格 p1 最遠。 我們引入數(shù)值 K=(p2-p0)/(p0-p1)。 p1<p0≤p2 或 p2≤p0<p1 條件永遠有效,因此在任意時間 K≥0。 下面提供了解釋這一思路的圖表。 藍線代表 p0 價位,而它與價格圖表的交叉時刻是 t0。 紅線代表 p1 價位,它在 t0 之后觸及圖表的時刻為 t1。 綠線代表 p2 價位,位于距 p1 盡可能遠的地方。

編輯
數(shù)值背后的思路很簡單。 假設(shè)我們在 t0 入場交易。 在價位 p0 賣出,而 p1, p1>p0 ? 止損。 p2 是止盈的最低可實現(xiàn)價格,而 K 是交易中可實現(xiàn)的最高利潤。 實際上,我們在執(zhí)行交易時并不知道確切的 K 值。 在這種不確定性的概率模型框架內(nèi),我們只能談?wù)撝獣缘母怕史植夹螒B(tài)。 假設(shè)我們知曉 Fk(x) 概率分布函數(shù),其定義為 K<x 的概率。 假設(shè)我們使用某個 pk 價位作為止盈: pk-p0=k(p0-p1)。 在此情況下,F(xiàn)k(k) 等于觸及止損先于止盈的概率。 相應(yīng)地,1-Fk(k) 等于先激活止盈的概率。 現(xiàn)在讓點差等于零。 那么,在止損激活的情況下,盈利能力等于 -1,而在止盈激活的情況下,它等于 k。 這種交易中的數(shù)學(xué)期望:M=(-1)*Fk(k)+k*(1-Fk(k))=k-(k+1)*Fk(k),如果 Fk(k)=k/(k+1) 其等于零。
如果我們知道方程式 Fk(x),我們甚至可以執(zhí)行 EA 的初步優(yōu)化。 例如,我們可以尋找最優(yōu)的止盈/止損比率,令交易盈利能力的數(shù)學(xué)期望最大化。 然后我們可以在交易中找到最優(yōu)風(fēng)險值。 因此,EA 甚至可以在就緒之前進行優(yōu)化。 這樣可以節(jié)省時間,并可令您在早期階段舍棄明顯不合適的思路。
如果我們假設(shè)價格表現(xiàn)得像沒有趨勢的隨機漫游,那么 K 數(shù)值的分布則由 Fk(x)=Fk0(x) 分布函數(shù)設(shè)置,其中 Fk0(x)=0 如果 x≤0 以及 Fk0(x)=x/(x+1) 如果 x>0。 為了更加確定,我們可以假設(shè)這里使用的隨機漫游是一個零漂移的維納(Wiener)過程(無趨勢)。 正如我們所看到的,如果滿足隨機漫游假想并且點差等于零,則在任何止盈/止損比率下,盈利能力的數(shù)學(xué)期望等于零。 在非零點差的情況下,它是負數(shù)。
替代 K,我們可以考慮數(shù)值 Q=K/(K+1)=(p2-p0)/(p2-p1),K=Q/(1-Q)。 這一數(shù)值可表示為止盈與(止損 + 止盈)的比率。 它更方便,因為它取自 [0;1) 間隔內(nèi)的數(shù)值,并且在隨機漫游的情況下它具有比 K 更簡單的分布(在此間隔內(nèi)均勻)。
接下來,我們將主要討論 Q 值。 我們來考察如何構(gòu)造和應(yīng)用其經(jīng)驗分布函數(shù) Fq(x)。 假設(shè)我們有一個交易思路,我們檢查價格歷史。 我們有 n 個入場點的集合。 入場價格 p0,i 和止損 p1,i,其中 i=1,...,n,為它們當中的每一個定義。 現(xiàn)在我們應(yīng)定義這個思路是否具有一定的盈利潛力。 對于每筆交易,我們應(yīng)搜索盡可能遠離止損的價格 p2,i,直到激活時刻。 基于此價格,我們得到了 n 個樣本 Qi=(p2,i-p0,i)/(p2,i-p1,i), ?i=1,...,n。 由該樣本構(gòu)建的經(jīng)驗分布函數(shù)由 Fq(x)=m(x)/n 方程定義,其中 m(x) 等于 Qi 樣本元素小于 x 的數(shù)量。 如果價格行為表現(xiàn)得像沒有趨勢的隨機漫游(零漂移維納(Wiener) 過程),Q 數(shù)值的 Fq0(x) 分布函數(shù)看起來很簡單: Fq0(x)=0 如果 x≤0,F(xiàn)q0(x)=x 如果 0<x≤1,以及 Fq0(x)=1 如果 x>1。
如果 Fq(x) 與隨機漫游的理論分布函數(shù) Fq0(x) 有顯著差異,我們需要在盈利能力方面檢查這種差異的重要性。 如果即使考慮到點差,盈利能力也足夠正面,那么是時候選擇適當?shù)闹褂?止損比率了。 這可以通過最大化盈利預(yù)期來實現(xiàn)。 之后,我們可以為每筆交易的風(fēng)險值選擇一個最優(yōu)值,然后初步測試這一思路。 如果結(jié)果很正面,那么繼續(xù)創(chuàng)建實際的交易 EA 就有意義了。 接下來,我們將嘗試在實際操作中展示此算法。
問題升級了 – 如何運用隨機漫游進行類似的比較,以便獲得更復(fù)雜的離場算法。 通常答案與上面研究的狀況相同。 主要障礙是隨機漫游的利潤分布只可在極少數(shù)情況下以分析形式獲得。 但總是可以使用蒙特卡羅模擬方法得到其經(jīng)驗近似。