1. 程式人生 > >配對交易(搬磚)

配對交易(搬磚)

首先,歷史前五日的Pearson相關係數若大於給定的閾值。 如果兩隻股票走勢趨同,則按上漲(下跌)趨勢買入(賣出)股票。 如果兩隻股票走勢背離,則買入下跌股票,賣出上漲股票。 首先需要在A股中尋找走勢相關性很大的股票,這是一項很繁複的工作。為簡單起見,這裡直接使用了一個現成的結果:000159和000967在2012年的走勢十分相似,這一點可以通過復權收盤價曲線來驗證。 df = DataAPI.MktEqudAdjGet(secID = '000159.XSHE', field = 'closePrice', beginDate = '20120101', endDate = '20130101')
df['000159'] = df['closePrice']
df = df.loc[:, ['000159']].reset_index()
df2 = DataAPI.MktEqudAdjGet(secID = '000967.XSHE', field = 'closePrice', beginDate = '20120101', endDate = '20130101')
df2['000967'] = df2['closePrice']
df2 = df2.loc[:, ['000967']].reset_index()
df = df.merge(df2, left_on=['index'], right_on=['index'])
df = df.loc[:, ['000159', '000967']]
df.plot() 回測: from scipy.stats.stats import pearsonr start = '2013-01-01'
end  = '2014-01-01'
benchmark = 'HS300'
universe = ['000159.XSHE', '000967.XSHE']
capital_base = 1000000 def initialize(account):
    account.cutoff = 0.9
    account.prev_prc1 = 0
    account.prev_prc2 = 0
    account.prev_prcb = 0 def handle_data(account):
    if len(account.universe) < 2: return
   
    clsp = account.get_attribute_history('closePrice', 5)
    stk1, stk2 = universe
    px1, px2 = clsp[stk1], clsp[stk2]
      
    prc1, prc2 = px1[-1], px2[-1]
    prcb = account.get_symbol_history('benchmark', 1)['return'][0]
   
    if account.prev_prc1 == 0: