量化合約對沖交易策略系統開發與應用(原始碼演示)

v_ch3nguang發表於2023-04-11

量化,是指利用統計方法、數學模型來指導投資,其本質是定性投資的數量化實踐,爭取透過模型構建出可以持續跑贏市場的投資組合,從而獲取超額利潤收益。

 

對沖,是指 同時進行兩筆行情相關、方向相反、數量相當、盈虧相抵的交易,透過對沖策略降低組合系統性風險,獲得對沖後的絕對收益。

 

我們舉個例子:
假設某一 股票 某年的收益可分為兩部分:

A :利用量化方法進行選股構建的股票組合,當年收益 10%

B :市場調整引起的下跌幅度 -15%

在沒有對沖的情況下,雖然選出的股票組合跑贏了市場,但並未實現增值。收益率為 -5%

假設運用對沖工具,對沖掉市場波動導致的投資組合收益變動,只賺取 A 部分的投資收益,那麼同樣的市場環境,該 股票 仍能實現 10% 左右正收益。

 

量化合約對沖交易系統開發一般擁有以下特點:

 

1 、投資範圍廣泛,投資策略靈活;

2 、無論市場上漲還是下跌,均以獲取絕對收益為目標;

3 、 更好的風險調整收益,長期中對沖基金在獲取穩定收益的同時提供了更好的防禦性;

4 、與主要市場指數相關性低,具備資產配置價值。

 

 

 

量化 合約 對沖 策略系統 開發 構建

1 α策略:用量化選股模型確定股票組合,同時買入股票組合,做空股指期貨以對沖股票組合的市場風險(β),獲取股票組合超越市場指數的超額預期年化預期收益,即α預期年化預期收益。

 

 

2 量化 CTA 基金:說白了就是投向期貨市場的期貨基金,只不過用量化投資方法研究期貨品種的價格變化趨勢,以程式化實現交易。以滬深 300 股指期貨為例,滬深 300 股指期貨上漲時做多,下跌時做空,漲跌都盈利。

 

量化合約對沖交易系統開發原始碼演示示例:

obj = ext.NewPositionManager() # 使用量化交易類庫

 

# 此處用來獲取持倉資訊

positions = exchange.GetPosition() # 獲取持倉陣列

if len(positions) == 0: # 如果持倉陣列的長度是 0

    return 0 # 證明是空倉,返回 0

for i in range(len(positions)): # 遍歷持倉陣列

    if (positions[i]['Type'] == PD_LONG) or (positions[i]['Type'] == PD_LONG_YD):

        position_long = 1 # position_long 標記為 1

 

    elif (positions[i]['Type'] == PD_SHORT) or (positions[i]['Type'] == PD_SHORT_YD):

        position_short = -1 # position_short 標記為 -1

 

bar = bars[0]

# 根據價格落在 (-40,-3],(-3,-2],(-2,2],(2,3],(3,40] 的區間範圍來獲取最新收盤價所在的價格區間

grid = pd.cut([close_01], context.band, labels=[0, 1, 2, 3, 4])[0]

 

# 若無倉位且價格突破則按照設定好的區間開倉

if not position_long and not position_short and grid != 2:

    # 大於 3 為在中間網格的上方 , 做多

    if grid >= 3:

        obj.OpenLong("rb2005", 1) # 以市價單開多倉到倉位

    if grid <= 1:

        obj.OpenShort("rb2005", 1) # 以市價單開空倉到倉位

 

# 持有多倉的處理

elif position_long:

    if grid >= 3:

        obj.OpenLong("rb2005", 1) # 以市價單調多倉到倉位

    # 等於 2 為在中間網格 , 平倉

    elif grid == 2:

        obj.closebuy("rb2005", 1) # 以市價單全平多倉

 

    # 小於 1 為在中間網格的下方 , 做空

    elif grid <= 1:

        obj.closebuy("rb2005", 1) # 以市價單全平多倉

        obj.OpenShort("rb2005", 1) # 以市價單開空倉到倉位

 

# 持有空倉的處理

elif position_short:

    # 小於 1 為在中間網格的下方 , 做空

    if grid <= 1:

        obj.OpenShort("rb2005", 1) # 以市價單調空倉到倉位

    # 等於 2 為在中間網格 , 平倉

    elif grid == 2:

        obj.closesell("rb2005", 1) # 以市價單全平空倉

 

    # 大於 3 為在中間網格的上方 , 做多

    elif grid >= 3:

        obj.closesell("rb2005", 1) # 以市價單全平空倉

        obj.OpenLong("rb2005", 1) # 以市價單開多倉到倉位

 

 

 

 

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70028290/viewspace-2944936/,如需轉載,請註明出處,否則將追究法律責任。

相關文章