跨期套利模型 2017-2019年白银跨期实盘年化7%-15%策略 策略开发
生活随笔
收集整理的這篇文章主要介紹了
跨期套利模型 2017-2019年白银跨期实盘年化7%-15%策略 策略开发
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
分享本人2017-2019年白銀跨期實盤年化7%-15%策略.
比較基礎的跨期套利模型,需要注意的重點是:確保雙腿交易的速度以及瘸腿的追單處理。
本模型不涉及交易細節的處理,主要是核心邏輯模塊。
采用白銀品種做跨期主要是基差非常平穩,同時采用眾數對上下軌進行控制。
模型代碼如下
import time import numpy as np from collections import Counter#### class timer():def __init__(self):self._keep_time_list=[]def keep(self,sec):self._keep_time_list.append(time.time())if self._keep_time_list[-1]-self._keep_time_list[0]>=sec:self._keep_time_list = []self._keep_time_list.append(time.time())return 1else:return 0class arbitrage_model():def __init__(self):self._turn_smaller_spread_list=[]self._turn_smaller_spread_basket=[]self._turn_bigger_spread_list=[]self._turn_bigger_spread_basket=[]self._lastprice_list=[]self._mytimer=timer()self._UPdata_time_span=60*5self._turn_smaller_most_spread_list=[]self._turn_bigger_most_spread_list=[]self._min_tick=1#ma runself._ma_turn_bigger_data_dict={}self._ma_turn_smaller_data_dict={}self._min_turn_bigger_data_list=[]self._min_turn_smaller_data_list=[]def run(self,highdata_askprice,highdata_bidprice,data_lastprice,lowdata_askprice,lowdata_bidprice):# signal# turn to smallerself._turn_smaller_spread_list.append(highdata_bidprice - lowdata_askprice)self._turn_smaller_spread_basket.append(highdata_bidprice - lowdata_askprice)# turn to biggerself._turn_bigger_spread_list.append(highdata_askprice - lowdata_bidprice)self._turn_bigger_spread_basket.append(highdata_askprice - lowdata_bidprice)# get quote_stdself._lastprice_list.append(data_lastprice)if len(self._lastprice_list) > 200:quote_std = np.std(self._lastprice_list)del self._lastprice_list[0]else:quote_std = 10if self._mytimer.keep(self._UPdata_time_span):turn_smaller_most_spread = Counter(self._turn_smaller_spread_basket).most_common(1)[0][0]self._turn_smaller_most_spread_list.append(turn_smaller_most_spread)turn_bigger_most_spread = Counter(self._turn_bigger_spread_basket).most_common(1)[0][0]self._turn_bigger_most_spread_list.append(turn_bigger_most_spread)self._turn_smaller_spread_basket = []self._turn_bigger_spread_basket = []if len(self._turn_smaller_most_spread_list) > 12 * 2:del self._turn_smaller_most_spread_list[0]if len(self._turn_bigger_most_spread_list) > 12 * 2:del self._turn_bigger_most_spread_list[0]#signal to smallerif len(self._turn_smaller_most_spread_list)>0 and max(self._turn_smaller_most_spread_list) <= self._turn_smaller_spread_list[-1] and self._turn_smaller_most_spread_list[-1] + 3 * self._min_tick <= self._turn_smaller_spread_list[-1]:signal_smaller=1else:signal_smaller=0#signal to biggerif len(self._turn_bigger_most_spread_list)>0 and self._turn_bigger_spread_list[-1] <= min(self._turn_bigger_most_spread_list) and self._turn_bigger_spread_list[-1] <=self._turn_bigger_most_spread_list[-1] - 3 * self._min_tick:signal_bigger=1else:signal_bigger=0return quote_std,signal_bigger,signal_smallerdef ma_run(self, highdata_askprice, highdata_bidprice, data_lastprice, lowdata_askprice, lowdata_bidprice):#signal#dataself._ma_turn_bigger_data_dict[time.time()]=(highdata_askprice-lowdata_bidprice)self._ma_turn_smaller_data_dict[time.time()]=(highdata_bidprice-lowdata_askprice)# get quote_stdself._lastprice_list.append(data_lastprice)if len(self._lastprice_list) > 200:quote_std = np.std(self._lastprice_list)del self._lastprice_list[0]else:quote_std = 10bigger_keys_list=list(self._ma_turn_bigger_data_dict.keys())#smaller_keys_list=list(self._ma_turn_smaller_data_dict.keys())if bigger_keys_list[-1]-bigger_keys_list[0]>60*1:self._min_turn_bigger_data_list.append(sum(list(self._ma_turn_bigger_data_dict.values()))/len(list(self._ma_turn_bigger_data_dict.values())))self._min_turn_smaller_data_list.append(sum(list(self._ma_turn_smaller_data_dict.values()))/len(list(self._ma_turn_smaller_data_dict.values())))self._ma_turn_bigger_data_dict = {}self._ma_turn_smaller_data_dict = {}signal_bigger=0signal_smaller=0min_span=20if len(self._min_turn_bigger_data_list)>min_span and len(self._min_turn_smaller_data_list)>min_span:if self._min_turn_bigger_data_list[-1]-sum(self._min_turn_bigger_data_list[-(1+min_span):-1])/min_span<-1.5:signal_bigger=1if self._min_turn_smaller_data_list[-1]-sum(self._min_turn_smaller_data_list[-(1+min_span):-1])/min_span>1.5:signal_smaller=1return quote_std,signal_bigger,signal_smaller總結
以上是生活随笔為你收集整理的跨期套利模型 2017-2019年白银跨期实盘年化7%-15%策略 策略开发的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分享下被偷走的那些年,我在做外包的心得体
- 下一篇: 手机操作系统发展史