import numpy as np
import pandas as pd
from pandas import Series,DataFrame
import random
import math
# 定义一个全局变量, 保存要操作的证券
security='600196.XSHG'
# 设置我们要操作的股票池, 这里我们只操作一支股票
set_universe([security])
set_benchmark('600196.XSHG')
#设置回测条件
set_commission(PerTrade(buy_cost=0.0008, sell_cost=0.0015, min_cost=5))
set_slippage(FixedSlippage(0))
#调整资金规模时的临界损失比例
loss=0.1
#调整资金规模时调整后的资金占当前资金的比例
adjust=0.8
#计算第一个N时取得股票数据的天数
days=20
#系统一入市时股票价格需要高于short_in天内的最高价
short_in=20
#系统二入市时股票价格需要高于long_in天内的最高价
long_in=55
#系统一离市时股票价格需要低于short_out天内的最低价
short_out=10
#系统二离市时股票价格需要低于long_out天内的最低价
long_out=20
#系统一和系统二的资金分配比例,系统一得到ratio*总资金,系统二得到(1-ratio)*总资金
ratio=0.7
#单一市场中的头寸规模限制
limit=4
#记录策略运行了多少天
pdn=0
#记录N值
N=[]
#记录系统一中股票的单位数
sys1=0
#记录系统二中股票的单位数
sys2=0
#判断操作是对系统一还是系统二,值为‘True’是对系统一,‘False’是对系统二
short='False'
#用unit来保存一单位表示多少股票,默认值为1000
unit=1000
#记录系统一形成突破时的股票价格
break_price1=0
#记录系统二形成突破时的股票价格
break_price2=0
#记录分钟
minutes=0
#计算股票的N值
def Calcu_N(context,paused):
#在策略运行了days-1天时,计算前days-1天的平均实际范围
if pdn==days-1:
#取出day-1天来得最高价,最低价,前一天的收盘价
price=attribute_history(security,days-1,'1d', ('high','low','pre_close'),skip_paused=True)
#如果不是所有的这day-1天都没有数据,算出这些天的实际范围的平均值
TR=[]
for i in range(0,days-1):
h_l=price['high'][i]-price['low'][i]
h_pdc=price['high'][i]-price['pre_close'][i]
pdc_l=price['pre_close'][i]-price['low'][i]
temp=max(h_l,h_pdc,pdc_l)
TR.append(temp)
ATR=np.mean(np.array(TR))
N.append(ATR)
#如果策略运行天数已经达到了days天
else:
#如果股票停牌,则将运行天数减1
if paused==True:
global pdn
pdn=pdn-1
#如果未停牌,则利用迭代,计算N值,并保存在列表N中
else:
price=attribute_history(security,1,'1d', ('high','low','pre_close'),skip_paused=True)
h_l=price['high'][0]-price['low'][0]
h_pdc=price['high'][0]-price['pre_close'][0]
pdc_l=price['pre_close'][0]-price['low'][0]