參考海通證券的研究報告,其中指出股指期貨具有顯著的正向隔夜收益,且A股期現貨市場存在顯著的日内效應,在此基礎上通過買賣單不平衡度因子建構了收益增強政策。
本政策考慮一次性擷取全部連續合約的主力合約,通過減少調用接口擷取資料的次數以達到提高回測效率的目的。
股指期貨隔夜收益影響因子:買賣單不平衡度因子
1.價差
- 當月合約與下季合約的價差;
- 當價差小于80時做多,否則做空。
2.買賣單不平衡度
- 定義:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SZzcDM1QGMwYDNlJGNkFmZ3kzYmJWYhZWOxIWNjJDZ28CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
- 其中 B 和 S 分别表示收盤前 N 分鐘區間内買一和賣一委托量的平均值;
- 相比于價格漲跌,買賣單的不平衡度更能夠反映投資者的真實交易意願;
- 當委買量高于委賣量時,預期未來價格上漲,反之則預期未來價格下跌。
3.選取尾盤半小時買賣單不平衡度預測效果較好的因子建構隔夜收益政策。
- 當價差小于80,且收盤前半小時委買總量大于委賣總量時做多,持有至次日上午10點平倉;
- 當價差大于80,且收盤前半小時委買總量小于委賣總量時做空,持有至次日上午10點平倉。
- 在每天14:59:00時,擷取當月合約與下季合約的價格的差;
- 計算14:30:00 以來的買一委托總量和賣一委托總量;
- 以14:59:00 tick資料 的賣一價作為買入開倉價;
- 以次日上午10:00:00 tick資料的買一價作為賣出平倉價。
本政策運作所基于的環境:python3.8 掘金終端IDE
一、政策思路
1、每天10:00:00 定時擷取 tick 資料,根據買一價作為賣出平倉價下單平倉;
2、每天14:59:00 定時擷取 tick 資料,根據當月合約與下季合約的價格計算價差;
3、擷取前30分鐘的買一委托總量和賣一委托總量;
4、當價差小于80,且收盤前半小時委買總量大于委賣總量時,以14:59:00 tick資料的賣一價作為買入開倉價做多,否則則做空;持有至次日上午10點平倉。
二、政策邏輯
· 第一步:設定參數、設定兩個定時任務
· 第二步:每天定時執行兩個任務,按政策思路進行計算
· 第三步:對滿足政策思路的股指期貨做多或做空,持有至次日上午10點平倉
· 回測期:2021-07-22 08:00:00 到 2021-10-21 16:00:00
> 注意:tick資料僅支援回測最近的三個月,回測時需将時間改為最近三個月,否則會報錯。
· 回測初始資金:50萬
· 手續費:0.0001
· 滑點:0.0001
三、回測結果
回測期政策累計收益率為11.41%,年化收益率為45.26%,最大回撤為11.17%,夏普比率為1.20,勝率為50.00%。
四、政策代碼
# coding=utf-8
from __future__ import print_function, absolute_import
from gm.api import *
import pandas as pd
import datetime
'''
本政策采用定時任務結構(每天10:00:00、14:59:00定時執行政策algo_sell、algo_buy),建立隔夜收益增強模型
當價差小于80,且收盤前半小時委買總量大于委賣總量時做多,持有至次日上午10點平倉;
當價差大于80,且收盤前半小時委買總量小于委賣總量時做空,持有至次日上午10點平倉。
回測資料:滬深300股指期貨IF的 tick資料
回測時間:2019-01-01 08:00:00 到 2021-09-10 16:00:00
'''
# 政策中必須有init方法
def init(context):
# 每天10:00:00 定時執行algo_sell
schedule(schedule_func=algo_sell, date_rule='1d', time_rule='10:00:00')
# 每天14:59:00 定時執行algo_buy
schedule(schedule_func=algo_buy, date_rule='1d', time_rule='14:59:00')
# 設定當月交易标的
context.symbol_00 = None
# 在init中一次性拿到所有需要的當月合約資訊、下季合約資訊
contracts_00 = get_continuous_contracts(csymbol='CFFEX.IF00', start_date=context.backtest_start_time,
end_date=context.backtest_end_time)
contracts_02 = get_continuous_contracts(csymbol='CFFEX.IF02', start_date=context.backtest_start_time,
end_date=context.backtest_end_time)
# 将資訊按symbol,date作為key存入字典
context.cons00_dict = {i['trade_date'].date(): i['symbol'] for i in contracts_00}
context.cons02_dict = {i['trade_date'].date(): i['symbol'] for i in contracts_02}
擷取完整代碼,請前往:
股指期貨隔夜收益增強政策 - 掘金量化社群 - 量化交易者的交流社群掘金量化社群是量化投資者政策研讨、答疑解惑、資源共享的互動交流論壇。
https://bbs.myquant.cn/topic/2550
聲明:本内容由掘金量化團隊原創,僅供學習、交流、示範之用,不構成任何投資建議!如需轉載請聯系掘金小Q(VX:myquant2018)授權,否則作侵權處理!