import numpy as np
def initialize(context):
g.up_price = {} #向上碎形最高价
g.low_price = {} #向下碎形最低价
g.up_fractal_exists = {} #判断有效向上碎形
g.down_fractal_exists = {} #判断有效向下碎形
g.AO_index = {} #存放连续的AO指标数据
g.cal_AC_index = {} #计算AC指标中转存储
g.AC_index = {} #存放连续的AC指标数据
g.amount = {} #满仓仓位
g.stock = get_index_stocks('000300.XSHG')
g.buy_stock = []
set_benchmark('000300.XSHG')
g.month = context.current_dt.month
run_monthly(select_universe,1,'open')
#重置全局变量
def reset_global():
g.up_price = {} #向上碎形最高价
g.low_price = {} #向下碎形最低价
g.up_fractal_exists = {} #判断有效向上碎形
g.down_fractal_exists = {} #判断有效向下碎形
g.AO_index = {} #存放连续的AO指标数据
g.cal_AC_index = {} #计算AC指标中转存储
g.AC_index = {} #存放连续的AC指标数据
g.amount = {} #满仓仓位
g.buy_stock = []
def initial_stock_global(stock):
g.up_price[stock] = 0
g.low_price[stock] = 0
g.up_fractal_exists[stock] = False
g.down_fractal_exists[stock] = False #判断有效向下碎形
g.AO_index[stock] = [0] #存放连续的AO指标数据
g.cal_AC_index[stock] = [0] #计算AC指标中转存储
g.AC_index[stock] = [0] #存放连续的AC指标数据
g.amount[stock] = 0 #满仓仓位
#轮换选股后清空持仓
def reset_position(context):
for stock in g.buy_stock:
order_target(stock,0)
log.info("sell %s for reset position"%stock)
#选股
def select_universe(context):
#每三个月操作一次
month = context.current_dt.month
if month%6 != g.month%6:
return
#清空全局变量
reset_position(context)
reset_global()
hist = history(30,'1d','close',g.stock,df = False)
for stock in g.stock:
if is_sleeping_alligator(stock,hist,20):
g.buy_stock.append(stock)
#初始化该股票全局变量
initial_stock_global(stock)
print g.buy_stock
return None
#睡着的鳄鱼
def is_sleeping_alligator(stock,hist,nday):
for i in range(nday):
if is_struggle(stock,hist,i) == Fa