股票量化交易軟件:外匯交易的基礎(chǔ)數(shù)學(xué)
為什么尋找入場點和出場點如此具有挑戰(zhàn)性?
如果你知道在哪里進入和退出市場,你可能不需要知道其他任何事情。不幸的是,出入場點問題是一個難以捉摸的問題。乍一看,您總是可以確定一個模式并遵循它一段時間。但是,如果沒有先進的工具和指標(biāo),如何檢測它呢?最簡單且總是重復(fù)出現(xiàn)的模式是趨勢和橫盤。趨勢是一個方向的長期運動,而橫盤意味著更頻繁的反轉(zhuǎn)。

編輯切換為居中

編輯切換為居中

編輯切換為居中
這些模式很容易被發(fā)現(xiàn),因為人眼可以在沒有任何指標(biāo)的情況下找到它們。這里的主要問題是,我們只能在模式被觸發(fā)之后才能看到它。此外,沒有人能保證有任何模式。沒有任何模式可以保住您的存款不被摧毀,無論使用什么樣的策略。我將嘗試用數(shù)學(xué)語言來提供可能的原因。
市場機制和水平
讓我告訴你一些有關(guān)價格和使市場價格變化的動力的事情。市場上有兩種力量——市場和限價。類似地,有兩種訂單——市價單和限價單。限價買家和賣家填充了市場深度,而市價買賣參與其中。市場深度基本上是一個垂直的價格尺度,表明那些愿意購買或出售的東西。在限價賣家和買家之間,永遠(yuǎn)有一個間隙,這個間隙叫做點差。點差是最佳買入和賣出價格之間的距離,以最小價格移動單位來衡量。買家想以最便宜的價格購買,而賣家想以最高價出售。因此,買方的限價單總是位于底部,而賣方的限價單總是位于頂部。標(biāo)記買家和賣家進入市場深度,兩個訂單(限額和市場訂單)相連。當(dāng)限價訂單被觸發(fā)時,市場就會發(fā)生變化。赫茲股票量化交易軟件
當(dāng)一個活躍的市價訂單出現(xiàn)時,它通常含有止損和獲利。與限價訂單類似,這些止損水平分散在市場四周,形成價格加速或反轉(zhuǎn)水平。一切都取決于止損水平的數(shù)量和類型,以及交易量。知道了這些水平,我們就可以說價格可能加速或逆轉(zhuǎn)。赫茲股票量化交易軟件
限價訂單也會形成難以通過的波動和集群。它們通常出現(xiàn)在重要的價格點,比如一天或一周的開盤。在討論基于水平的交易時,交易員通常是指限價訂單的水平。所有這些可以簡單地顯示如下。

編輯切換為居中
市場的數(shù)學(xué)描述
我們在 赫茲股票量化交易軟件 窗口中看到的是t參數(shù)的離散函數(shù),其中t是時間。函數(shù)是離散的,因為報價點(tick)的數(shù)目是有限的。在當(dāng)前情況下,報價點是中間不包含任何內(nèi)容的點。報價點是可能的價格離散化的最小元素,較大的元素是柱、M1、M5、M15燭形等。市場既有隨機因素,又有模式因素。這些模式可以有不同的規(guī)模和持續(xù)時間。然而,市場在很大程度上是一個概率性的、混亂的、幾乎不可預(yù)測的環(huán)境。要理解市場,就要用概率論的概念來看待市場。引入概率和概率密度的概念需要離散化。
為了介紹預(yù)期收益的概念,我們首先需要考慮術(shù)語“事件”和“窮盡事件”:
C1 事件 — 利潤,它等于獲利
C2 事件 — 虧損,它等于止損
P1 — C1 事件的概率
P2 — C2 事件的概率
С1和С2事件形成一組完全相反的事件(即,在任何情況下都會發(fā)生其中一個事件)。因此,這些概率之和等于1 P2(tp,sl) + ?P2(tp,sl) = 1. 這個方程式以后可能會很有用。
在測試 EA 交易或者人工策略時,如果使用隨機開啟倉位,以及隨機止損和獲利,我們將會得到隨機的結(jié)果,而預(yù)期收益會等于“-(點差)”,如果我們可以把點差設(shè)為0,結(jié)果就是0。這表明無論止損水平如何,在隨機市場上我們總是得到零預(yù)期收益。在非隨機市場上,只要市場具有相關(guān)的模式,我們總是得到一個損益。我們可以通過假設(shè)預(yù)期收益(Tick[0].Bid-Tick[1].Bid)也等于零得出相同的結(jié)論。這些結(jié)論非常簡單,可以通過多種方式得出。
M=P1*tp-P2*sl= P1*tp-(1- P1)*sl ?— 對于任何市場
P1*tp-P2*sl= 0 — 對于無序的市場
這是主要的無序市場方程描述了混亂使用限價水平打開和關(guān)閉訂單的預(yù)期收益。在解完最后一個方程后,我們得到了所有我們感興趣的概率,包括完全隨機性和相反的情況,只要我們知道限價數(shù)值。 赫茲股票量化交易軟件
這里提供的方程只適用于最簡單的情況,可以推廣到任何策略。這正是我現(xiàn)在要做的,以達到一個完整的理解,什么構(gòu)成了最終的預(yù)期回報,我們需要使它不為零。另外,讓我們引入利潤因子的概念,并寫出相應(yīng)的方程式。
假設(shè)我們的策略包括通過止損水平和一些其他信號來關(guān)閉倉位。為此,我將引入С3、С4事件空間,其中第一個事件通過止損水平關(guān)閉倉位,而第二個事件通過信號關(guān)閉倉位。它們也構(gòu)成了一組完整的對立事件,所以我們可以用類比來寫:
M=P3*M3+P4*M4=P3*M3+(1-P3)*M4, 其中 ?M3=P1*tp-(1- P1)*sl, 而 ?M4=Sum(P0[i]*pr[i]) - Sum(P01[j]*ls[j]); ?Sum( P0[i] )+ ?Sum( P01[j] ) =1
M3 — 當(dāng)訂單止損關(guān)閉時的預(yù)期收益。
M4 ?— 當(dāng)根據(jù)信號關(guān)閉倉位時的預(yù)期收益。
P1 , P2 ?— 如果在任何情況下觸發(fā)其中一個止損水平,而止損水平激活的概率。
P0[i] ? — 沒有觸發(fā)止損水平而關(guān)閉交易并取得了 pr[i] 利潤的概率。i ?— 關(guān)閉選項編號
P01[j] ?— 沒有觸發(fā)止損水平而關(guān)閉交易并取得 ls[j] 虧損的概率 j ?— 關(guān)閉選項編號
換句話說,我們有兩個相反的事件。它們的結(jié)果形成了另外兩個獨立的事件空間,在這里我們也定義了完整的組。然而,P1、P2、P0[i] 和 P01[j] 概率現(xiàn)在是有條件的,而P3和P4是假設(shè)的概率。條件概率是假設(shè)發(fā)生時事件發(fā)生的概率。一切都嚴(yán)格按照總概率公式(貝葉斯公式)進行。我強烈建議你仔細(xì)研究一下,以掌握這件事。對于完全無序的交易, M=0.
現(xiàn)在這個等式變得更加清晰和寬泛,因為它考慮了通過止損水平和信號來關(guān)閉。我們可以更進一步地遵循這個類比,寫出任何策略的一般方程式,甚至考慮到動態(tài)止損水平。這就是我要做的。讓我們來介紹N個新的事件,形成一個完整的組,這意味著以類似的止損和獲利來開始交易。CS[1] .. CS[2] .. CS[3] ....... CS[N] . 類似地, PS[1] + PS[2] + PS[3] + ....... +PS[N] = 1.
M = PS[1]*MS[1]+PS[2]*MS[2]+ ... + PS[k]*MS[k] ... +PS[N]*MS[N] , MS[k] = P3[k]*M3[k]+(1- P3[k])*M4[k], ?M3[k] = ?P1[k] *tp[k] -(1- P1[k] )*sl[k], M4[k] = ?Sum(i)(P0[i][k]*pr[i][k]) - Sum(j)(P01[j][k] *ls[j][k] ); ?Sum(i)( P0[i][k] ?)+ ?Sum(j)( P01[j][k] ?) =1.
PS[k] ?— 設(shè)置第k個止損水平選項的概率.
MS[k] ?— ? 使用第k個止損水平關(guān)閉交易的預(yù)期收益。
M3[k] ?— 當(dāng)根據(jù)第k個止損水平關(guān)閉訂單的預(yù)期收益。
M4[k] ?— 對于第k個止損水平由信號關(guān)閉訂單的預(yù)期收益。
P1[k] , P2[k] ?— 任何情況下某一止損水平被觸發(fā)的概率。
P0[i][k] ?— 關(guān)閉交易時利潤是 pr[i][k],并且是根據(jù) 第k個止損水平所對應(yīng)的信號關(guān)閉的概率. i ?— 關(guān)閉選項編號
P01[j][k] ?— 關(guān)閉交易時虧損是ls[j][k] , 并且是根據(jù)第k個止損水平所對應(yīng)的信號關(guān)閉的概率 。 ?j ?— 關(guān)閉的選項編號
和之前 (更加簡單) 的方程類似, 如果是無序交易并且沒有點差,那么 M=0。你能做的最多的就是改變策略,但是如果它沒有合理的基礎(chǔ),你只需要改變這些變量的平衡,仍然得到0。為了打破這種不必要的均衡,我們需要知道市場在任何一個固定的運動區(qū)間內(nèi)向任何方向運動的概率,或者在一段時間內(nèi)預(yù)期的價格運動收益。入場/出場點的選擇取決于此。如果你設(shè)法找到他們,那么你將有一個有利可圖的戰(zhàn)略。
現(xiàn)在讓我們來建立利潤因子方程。PF = Profit/Loss. 利潤因子是利潤與虧損的比率。如果該數(shù)字超過1,則該策略是有利可圖的,否則就不是。這可以使用預(yù)期收益重新定義。PrF=Mp/Ml. 這意味著預(yù)期凈利潤回報與預(yù)期凈虧損的比率。讓我們寫下他們的方程式。
Mp = PS[1]*MSp[1]+PS[2]*MSp[2]+ ... + PS[k]*MSp[k] ... +PS[N]*MSp[N] , MSp[k] = P3[k]*M3p[k]+(1- P3[k])*M4p[k] , ?M3p[k] = ?P1[k] *tp[k], M4p[k] = ?Sum(i)(P0[i][k]*pr[i][k])
Ml = PS[1]*MSl[1]+PS[2]*MSl[2]+ ... + PS[k]*MSl[k] ... +PS[N]*MSl[N] , MSl[k] = P3[k]*M3l[k]+(1- P3[k])*M4l[k] , ?M3l[k] = ? (1- P1[k] )*sl[k], M4l[k] = ?Sum(j)(P01[j][k]*ls[j][k])
Sum(i)( P0[i][k] ) + ?Sum(j)( P01[j][k] ?) =1.
MSp[k] ?— ? 在第k個止損水平關(guān)閉交易的預(yù)期收益。
MSl[k] ?— ? 在第k個止損水平關(guān)閉交易的預(yù)期收益.
M3p[k] ?— 當(dāng) 第k個止損水平由止損來關(guān)閉訂單的預(yù)期收益。
M4p[k] ?— 當(dāng) 第k個止損水平由信號來關(guān)閉訂單的預(yù)期收益。
M3l[k] ?— 在第k個止損水平上由止損來關(guān)閉訂單的預(yù)期虧損。
M4l[k] ?— 在第k個止損水平上由信號來關(guān)閉訂單的預(yù)期虧損。
為了更深入地理解,我將描述所有嵌套事件:

編輯切換為居中
事實上,這兩個等式是相同的,盡管第一個等式缺少與損失相關(guān)的部分,而第二個等式缺少與利潤相關(guān)的部分。在無序交易的情況下,PrF=1,前提是價差再次等于零。M 和 PrF 是兩個足以從各個方面評估策略的值。
特別是,有能力評估趨勢或橫盤性質(zhì)的某一工具使用相同的概率理論和組合數(shù)學(xué)。此外,利用概率分布密度也可以從隨機性中找出一些差異。赫茲股票量化交易軟件
我將建立一個隨機值分布概率密度圖,其離散價格間隔固定的H步。讓我們假設(shè),如果價格向任何方向移動了H個點,那么就已經(jīng)進行了一步。X軸是以垂直價格圖的形式顯示一個隨機值,以步數(shù)計量。在這種情況下,需要n個步驟,因為這是評估整體價格變動的唯一方法。赫茲股票量化交易軟件
n ?— 步數(shù)總數(shù) (常數(shù)值)
d ?— 價格下降的步數(shù)
u ?— 價格提升的步數(shù)
s ?— 總的向上步數(shù)
在定義了這些數(shù)值之后,計算u和d:
要提供總的“s”向上移動步數(shù)(該值可以是負(fù)的,表示向下移動步數(shù)),應(yīng)提供一定數(shù)量的向上和向下移動步數(shù):“u”、“d”。最終的“s”向上或向下移動取決于總的所有步數(shù):
n=u+d; s=u-d;
這是一個由兩個方程組成的系統(tǒng)。求解它得到u和d:
u=(s+n)/2, d=n-u.
但是,并非所有的“s”值都適合某個“n”值??赡艿膕值之間的步長始終等于2。這樣做是為了給“u”和“d”提供自然數(shù)的值,因為它們將用于組合數(shù)學(xué),或者更確切地說,用于計算組合。如果這些數(shù)字是分?jǐn)?shù),那么我們就不能計算階乘,階乘是所有組合數(shù)學(xué)的基石。下面是18個步驟的所有可能場景,該圖顯示了事件選項的范圍。

編輯切換為居中
很容易定義期權(quán)的數(shù)量包括2^n,因為每個步驟后只有兩個可能的移動方向-上升或下降。沒有必要試圖抓住每一個選項,因為這是不可能的。相反,我們只需要知道我們有n個獨特的單元,其中u和d應(yīng)該分別是向上和向下的。具有相同u和d的選項最終提供相同的s。為了計算提供相同“s”的選項總數(shù),我們可以使用組合數(shù)學(xué)中的組合公式 С=n!/(u!*(n-u)!),以及等效方程С=n!/(d!*(n-d)!)。在u和d不同的情況下,我們得到了相同的C值。由于組合可以由上升段和下降段組成,這必然導(dǎo)致有重復(fù)。那么我們應(yīng)該用什么片段來組成組合呢?答案是任意的,因為這些組合是等價的,盡管它們不同。我將在下面使用基于MathCad 15的應(yīng)用程序來證明這一點。赫茲股票量化交易軟件
現(xiàn)在我們已經(jīng)確定了每個場景的組合數(shù),我們可以確定特定組合(或事件,無論您喜歡什么)的概率。P = ?С/(2^n). 可以為所有“s”計算該值,并且這些概率之和始終等于1,因為這些選項中的一個無論如何都會發(fā)生?;谶@個概率數(shù)組,我們可以在s步為2的情況下建立相對于s隨機值的概率密度圖。在這種情況下,可以簡單地通過將概率除以s步長(即除以2)來獲得特定步長處的密度。原因是我們無法為離散值建立連續(xù)函數(shù)。此密度保持與左右半步相關(guān),即1。它幫助我們找到節(jié)點,并允許數(shù)值積分。對于負(fù)的“s”值,我將簡單地鏡像相對于概率密度軸的圖形。對于偶數(shù)n值,節(jié)點編號從0開始,對于奇數(shù)n值,節(jié)點編號從1開始。在偶數(shù)n值的情況下,我們不能提供奇數(shù)s值,而在奇數(shù)n值的情況下,我們不能提供偶數(shù)s值。下面的計算應(yīng)用程序屏幕截圖闡明了這一點:

編輯切換為居中
它列出了我們需要的一切。應(yīng)用程序附在下面,這樣您就可以嘗試不同的參數(shù)。最熱門的問題之一是如何界定當(dāng)前的市場形勢是趨勢還是橫盤。我已經(jīng)提出了我自己的公式來量化一個工具的趨勢或平坦性質(zhì)。我把趨勢分為阿爾法趨勢和貝塔趨勢。阿爾法意味著一種趨勢,要么買要么賣,而貝塔只是一種趨勢,繼續(xù)運動,沒有明確界定買或是賣。最后,橫盤意味著回到初始價格的趨勢。赫茲股票量化交易軟件
不同交易者對趨勢和橫盤的定義差別很大。我試圖給所有這些現(xiàn)象下一個更嚴(yán)格的定義,因為即使對這些問題及其量化方法有一個基本的理解,也允許應(yīng)用許多以前被認(rèn)為是死的或過于簡單的策略。以下是主要方程式:
K=Integral(p*|x|) 或者 K=Summ(P[i]*|s[i]|)
第一個選項用于連續(xù)隨機變量,而第二個選項用于離散隨機變量。為了更清楚,我已經(jīng)使離散值連續(xù),因此使用了第一個方程。積分的跨度從負(fù)到正無窮大。這是均衡或趨勢比率。在計算了一個隨機值后,我們得到了一個平衡點,用來比較報價的真實分布和參考分布。如果 Кp > K, 市場可以被認(rèn)為是趨勢性的。富國 Кp < K, 市場就屬于橫盤。赫茲股票量化交易軟件
我們可以計算出比率的最赫茲股票量化交易軟件大值。它等于 KMax=1*Max(|x|) or KMax=1*Max(|s[i]|). 我們也可以計算出比率的最小值。它等于 KMin=1*Min(|x|) = 0 or KMin=1*Min(|s[i]|) = 0. KMid 是中點, 最小值和最大值是評估所分析區(qū)域的趨勢或橫盤性質(zhì)所需的全部百分比。赫茲股票量化交易軟件
if ( K >= KMid ) KTrendPercent=((K-KMid)/(KMax-KMid))*100 ?else ?KFletPercent=((KMid-K)/KMid)*100. ?
但這仍然不足以充分描述這種情況。還有需要解決的第二個比率 T=Integral(p*x), ?T=Summ(P[i]*s[i])。它基本上顯示了上升步驟數(shù)量的預(yù)期收益,同時也是阿爾法趨勢的一個指標(biāo)。Tp > 0 表示買入趨勢, 而 Tp < 0 表示賣出趨勢, 也就是說 T=0 用于隨機游走。 赫茲股票量化交易軟件
讓我們找到這個比率的最大值和最小值: ?TMax=1*Max(x) 或者 TMax=1*Max(s[i]), 最小值的絕對值等于最大值, 只不過它是負(fù)的 ?TMin= - TMax. 如果我們測量從100到-100的α趨勢百分比,我們可以編寫與上一個類似的計算公式:赫茲股票量化交易軟件
APercent=( T /TMax)*100.
如果百分比為正,則趨勢為牛市,如果為負(fù),則趨勢為熊市。情況可能混合出現(xiàn)??赡艽嬖讦?橫盤和α-趨勢,但不同時存在α-橫盤和α-趨勢。下面是上述陳述的圖解,以及為不同步數(shù)構(gòu)造的密度圖的示例。赫茲股票量化交易軟件

編輯切換為居中

編輯切換為居中

編輯切換為居中

編輯切換為居中
如我們所見,隨著步數(shù)的增加,圖形變得越來越窄,越來越高。對于每個步數(shù),對應(yīng)的alpha和betta值是不同的,就像分布本身一樣。更改步數(shù)時,應(yīng)重新計算參考分布。赫茲股票量化交易軟件
所有這些方程都可以用來建立自動交易系統(tǒng)。這些算法也可以用來開發(fā)指標(biāo)。一些交易者已經(jīng)在EA中實現(xiàn)了這些功能。我確信一件事:應(yīng)用這種分析比避免它要好。那些熟悉數(shù)學(xué)的人會馬上想出一些新的方法來應(yīng)用它,而那些不熟悉數(shù)學(xué)的人將不得不做出更多的努力。
寫一個簡單的指標(biāo)
在這里,我將把我簡單的數(shù)學(xué)研究轉(zhuǎn)化為一個指標(biāo),檢測市場進入點,并作為開發(fā)EA交易的基礎(chǔ)。我將使用 MQL5 開發(fā)指標(biāo)。但是,代碼要是可適應(yīng)的,以便最大限度地移植到MQL4。一般來說,只有當(dāng)代碼變得不必要的麻煩和不可讀時,我才嘗試使用最簡單的方法求助于OOP。然而,這在90%的情況下是可以避免的。不必要的彩色面板、按鈕和圖表上顯示的大量數(shù)據(jù)只會妨礙視覺感知。相反,我總是盡量少用視覺工具。
讓我們從指標(biāo)的輸入?yún)?shù)開始。赫茲股票量化交易軟件
input uint BarsI=990;//Bars TO Analyse ( start calc. & drawing ) input uint StepsMemoryI=2000;//Steps In Memory input uint StepsI=40;//Formula Steps input uint StepPoints=30;//Step Value input bool bDrawE=true;//Draw Steps
當(dāng)指標(biāo)加載時,我們能夠以最后的燭形為基礎(chǔ),對一定數(shù)量的步數(shù)進行初始計算。我們還需要緩沖區(qū)來存儲有關(guān)最后一步的數(shù)據(jù)。新數(shù)據(jù)將取代舊數(shù)據(jù)。它的大小是有限的。在圖表上用同樣的尺寸畫步驟。我們應(yīng)該指定步驟的數(shù)量,為其構(gòu)建分布并計算必要的值。然后我們應(yīng)該以點為單位告知系統(tǒng)步長,以及是否需要可視化步長。步驟要通過在圖表上繪圖來可視化。赫茲股票量化交易軟件
我在一個單獨的窗口中選擇了指示器樣式,顯示中立分布和當(dāng)前情況。有兩條線,不過最好有第三條。不幸的是,指標(biāo)功能并不意味著在一個單獨的主窗口中繪圖,所以我不得不求助于繪圖。赫茲股票量化交易軟件