應用 queuing model 對 limit order book 進行預測

利用不同的排隊論模型得到limit order book的平均隊列長度QL和平均等待時間DLC特咆,與收益率進行相關性分析个从。

模型假設

使用買一價和賣一價的平均值作為 reference price,用一段時間間隔下reference price 的變化率作為收益率坎穿。利用use.total_amount和use.net_amount可以得到買方和賣方的成交單量沟优,分別作為隊列的離開與到達岔擂。

使用數據

文件/data/intern/3_weeks.pq,每0.25s一個數據點惩嘉。后面主要用到中頻和高頻兩種取樣方法罢洲。
中頻:每10s的volume求和作為一個點。對于每個點文黎,使用其前30分鐘的數據作為隊列計算惹苗,與后15min的收益率進行相關性檢驗。
高頻:每1s的volume求和作為一個點耸峭。對每個點桩蓉,使用其前60s的數據作為隊列計算,與后15s的收益率進行相關性檢驗劳闹。

模型總結

M/M/1模型
假定到達與離開都服從poisson分布,參數記為\lambda, \mu本涕,則有緩沖效用\rho=\frac{\lambda}{\mu}

QL=\frac{\rho}{1-\rho} , DLC=\frac{\rho}{\mu-\lambda}

M/M/1/N
在上模型基礎上限定最大隊長N

DLC=\rho*\frac{1-(N+1)\rho^N+N\rho^{N+1}}{(1-\rho)(1-\rho^{N+1})}

M/G/1模型
假定離開是獨立同分布业汰,其他同M/M/1

QL=\frac{\lambda^2 \overline {X^2}}{2(1-\rho)} , DLC=\frac{\lambda \overline {X^2}}{2(1-\rho)}

G/G/1模型
到達與離開都是獨立同分布,沒有直接的計算公式偏友,需要先算出隊列的概率密度函數再計算蔬胯。具體到本limit order book的問題,概率分布的公式如下:

\pi_i(n)=\pi_i(0)\prod_{j=1}^n \rho_i(j-1)
\pi_i(0)=(1+\sum_{n=1}^\infty \prod_{j=1}^n\rho_i(j-1))^{-1}
則一般情況下可得:
DLY_i=1-\pi_i(0)
QL_i=\sum_{k=1}^\infty k\pi_i(1+k)

運算代碼

M/M/1模型

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import math
from scipy.stats import pearsonr
data = pd.read_parquet('/data/intern/3_weeks.pq')

Pref=(data['ask1']+data['bid1'])/2
data["Pref"]=Pref
use=data.loc[:,['net_amount','total_amount','Pref']]
use['decrease_amount']=(use.total_amount+use.net_amount)/2#買方成交單量 離開
use['increase_amount']=(use.total_amount-use.net_amount)/2#賣方成交單量 到達

use=use.resample('10s').sum()#以10s的數據計算
lambda_=use.increase_amount.rolling('30T').mean()
mu_=use.decrease_amount.rolling('30T').mean()
rate=np.ones(len(use))
for i in range(len(use)):
    if i < 60:
        rate[i]=(use.Pref[i]-use.Pref[0])/use.Pref[0]
    else:
        rate[i]=(use.Pref[i-60]+use.Pref[i])/use.Pref[i-60]
use["rate"]=rate
#清除死亡率小于出生率的點
lambda0=[]
mu0=[]
rate0=[]
for i in range(len(mu_)):
    if mu_[i]>lambda_[i]:
        lambda0.append(lambda_[i])
        mu0.append(mu_[i])
        rate0.append(rate[i])
rho=np.array(lambda0)/np.array(mu0)
lambda_=np.array(lambda0)
mu_=np.array(mu0)
rate=np.array(rate0)
#平均等待時間W,平均隊長N
W=rho/(mu_-lambda_)
N=lambda_*W
N_use=N[180:-60]
rate_use=rate[240:]
pearsonr(N_use,rate_use)

M/G/1模型

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import math
from scipy.stats import pearsonr
data = pd.read_parquet('/data/intern/3_weeks.pq')
Pref=(data['ask1']+data['bid1'])/2
data["Pref"]=Pref
use=data.loc[:,['net_amount','total_amount','Pref']]
use['decrease_amount']=(use.total_amount+use.net_amount)/2#買方成交單量 離開
use['increase_amount']=(use.total_amount-use.net_amount)/2#賣方成交單量 到達

use=use.resample('10s').sum()#以10s的數據計算
lambda_=use.increase_amount.rolling('30T').mean()
mu_=use.decrease_amount.rolling('30T').mean()
rate=np.ones(len(use))
#計算10分鐘平均收益率
for i in range(len(use)):
    if i < 90:
        rate[i]=(use.Pref[i]-use.Pref[0])/use.Pref[0]
    else:
        rate[i]=(use.Pref[i-90]+use.Pref[i])/use.Pref[i-90]
use["rate"]=rate
key=use.decrease_amount*use.decrease_amount
key=key.rolling('30T').mean()
#清除死亡率小于出生率的點
lambda0=[]
mu0=[]
rate0=[]
for i in range(len(mu_)):
    if mu_[i]>lambda_[i]:
        lambda0.append(lambda_[i])
        mu0.append(mu_[i])
        rate0.append(rate[i])
rho=np.array(lambda0)/np.array(mu0)
lambda_=np.array(lambda0)
mu_=np.array(mu0)
rate=np.array(rate0)
#平均等待時間W,平均隊長N
W=(lambda_*key)/(2*(1-rho))
N=lambda_*W
N_use=N[180:-60]
rate_use=rate[240:]
pearsonr(N_use,rate_use)

G/G/1模型

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import pearsonr
data = pd.read_parquet('/data/intern/3_weeks_1s.pq')
use=data.loc[:,['net_amount','total_amount']]
use['decrease_amount']=(use.total_amount+use.net_amount)/2#買方成交單量 離開
use['increase_amount']=(use.total_amount-use.net_amount)/2#賣方成交單量 到達

use=use.resample('10s').sum()
use=use[:500]#確定隊列長度

Pref=(data['ask1']+data['bid1'])/2
use["Pref"]=Pref
#計算隊列
use['total_size']=np.add.accumulate(use.increase_amount)-np.add.accumulate(use.decrease_amount)
#用clip函數處理極值
use.decrease_amount=np.clip(use.decrease_amount.values,0.001,100000)
use.increase_amount=np.clip(use.increase_amount.values,0.001,100000)
use.total_size=use.total_size/4000#size減小倍位他,這樣size的概率密度函數有意義氛濒,不然都是0或1
use.total_size=use.total_size.astype(int)#模型需要用整數計算
t=180#30min*6數據點個數
#frho函數产场,用于確定第i個點的rho(n)的值,
def frho(i,n):
  queue=use[i-t:i]
  sincrease=0.00001
  sdecrease=0.00001
  for j in range(len(queue)-1):
      if queue.total_size[j] == n:
          sincrease+=queue.increase_amount[j]
          sdecrease+=queue.decrease_amount[j+1]
  return sincrease/sdecrease
use['num']=range(len(use))
times=40#無窮次求和,設置一個大數,觀察知rho_times=0舞竿,則設為t足夠
def fpi(i,n):
  a_use1=[]
  onlyusethere=[]
  for j in range(times):
      x=frho(i,j+1)
      onlyusethere.append(x)
  a_use1=np.add.accumulate(onlyusethere)    
  t_use=np.multiply.accumulate(a_use1)
  pi_0=1/(1+t_use.sum())
  if n==0:
      return pi_0
  else:
      return pi_0*t_use[n-1]
QL=[]
for i in range(len(use))[t:len(use)]:
  sum=0
  for j in range(times):
      sum+=j*fpi(i,j)
  QL.append(sum)
  print(len(QL))
QL  
#將QL寫入外部文件京景,便于并行時調用
output = open('1.pk', 'wb')
pickle.dump(QL, output)
output.close()
rate=np.ones(len(use))
#計算10分鐘平均收益率
for i in range(len(use)):
  if i < 90:
      rate[i]=(use.Pref[i]-use.Pref[0])/use.Pref[0]
  else:
      rate[i]=(use.Pref[i-90]+use.Pref[i])/use.Pref[i-90]
use["rate"]=rate
N_use=QL[:-60]
rate_use=use.rate[240:]
pearsonr(N_use,rate_use)

結果分析

M/M/1

高頻:
pearson相關系數:-8.09*10^{-5}
中頻:
pearson相關系數:0.0104

M/M/1/N

N 取50時

高頻:
pearson相關系數:-0.04734
中頻:
pearson相關系數:-0.0378

N 取10時

高頻:
pearson相關系數:-0.0059
中頻:
pearson相關系數:0.04312

M/G/1

高頻:
pearson相關系數:8.66*10^{-4}
中頻:
pearson相關系數:0.0015

G/G/1

考慮到中頻的相關性明顯高于高頻情況,只列出中頻的結果骗奖,并用過去5min收益率确徙、10min收益率、15min收益率作為信號执桌,同未來15min收益率計算相關性進行對比鄙皇。

計算1.5h的數據(540個數據點)

pearson相關系數:0.44798
前5min收益率與后15min收益率相關性:-0.3894
前10min收益率與后15min收益率相關性:-0.4175
前15min收益率與后15min收益率相關性:-0.5029

計算12小時的數據(4000個數據點)

pearson相關系數:0.08827
前5min收益率與后15min收益率相關性:-0.4396
前10min收益率與后15min收益率相關性:-0.4275
前15min收益率與后15min收益率相關性:-0.4147

計算24小時的數據(8000個數據點)

pearson相關系數:0.05169
前5min收益率與后15min收益率相關性:-0.4582
前10min收益率與后15min收益率相關性:-0.4570
前15min收益率與后15min收益率相關性:-0.4515

數據量變大時,前5min,10min,15min收益率和后15min收益率的相關性系數基本不變仰挣,維持較高的值伴逸,而GG1模型得出的相關系數持續(xù)減小

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市膘壶,隨后出現的幾起案子错蝴,更是在濱河造成了極大的恐慌,老刑警劉巖颓芭,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件顷锰,死亡現場離奇詭異,居然都是意外死亡亡问,警方通過查閱死者的電腦和手機官紫,發(fā)現死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來玛界,“玉大人万矾,你說我怎么就攤上這事∩骺颍” “怎么了良狈?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長笨枯。 經常有香客問我薪丁,道長,這世上最難降的妖魔是什么馅精? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任严嗜,我火速辦了婚禮,結果婚禮上洲敢,老公的妹妹穿的比我還像新娘漫玄。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布睦优。 她就那樣靜靜地躺著渗常,像睡著了一般。 火紅的嫁衣襯著肌膚如雪汗盘。 梳的紋絲不亂的頭發(fā)上皱碘,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天,我揣著相機與錄音隐孽,去河邊找鬼癌椿。 笑死,一個胖子當著我的面吹牛菱阵,可吹牛的內容都是我干的踢俄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼送粱,長吁一口氣:“原來是場噩夢啊……” “哼褪贵!你這毒婦竟也來了?” 一聲冷哼從身側響起抗俄,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎世舰,沒想到半個月后动雹,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡跟压,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年胰蝠,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片震蒋。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡茸塞,死狀恐怖,靈堂內的尸體忽然破棺而出查剖,到底是詐尸還是另有隱情钾虐,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布笋庄,位于F島的核電站效扫,受9級特大地震影響,放射性物質發(fā)生泄漏直砂。R本人自食惡果不足惜菌仁,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望静暂。 院中可真熱鬧济丘,春花似錦、人聲如沸洽蛀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至泪掀,卻和暖如春听绳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背异赫。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工椅挣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人塔拳。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓鼠证,卻偏偏與公主長得像,于是被迫代替她去往敵國和親靠抑。 傳聞我的和親對象是個殘疾皇子量九,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內容

  • 對于 D 題的原題意,出題人和驗題人賽前都沒有發(fā)現標算存在的問題颂碧,導致了許多選手的疑惑和時間的浪費荠列,在此表示真誠的...
    _Carryon閱讀 257評論 0 0
  • 古陶瓷的年輪 北京華夏物證古陶瓷鑒定技術研究所采用現代量子物理學檢測技術,通過測定古陶瓷釉的老化程度來鑒定古陶瓷的...
    古風雅韻閱讀 176評論 0 0
  • 來源: 微信號: Allen趙 ID:zhao456zhao 上映9...
    Allen趙閱讀 565評論 0 1
  • 時隔一年川队,終于又身臨其境,走進劇院去看場話劇睬澡,這次是非常林奕華四大名著終結篇《紅樓夢What's sex?》 它借...
    cyliabai閱讀 435評論 0 0
  • 第一種基本情況:沒有使用position left 和 top設置屬性無效. 效果圖如下 符合文檔流的基本順序: ...
    司馬捷閱讀 1,437評論 0 1