# 初始化函数,设定基准等等
def initialize(context):
# 设定沪深300作为基准
set_benchmark("000300.XSHG")
# 开启动态复权模式(真实价格)
set_option("use_real_price", True)
# 股票类每笔交易时的手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱
set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type="stock")
g.security = "002389.XSHE" # 航天彩虹
g.M = 20 # 计算周期
g.k = 2 # 股票特性参数,即N的取值
# 初始化此策略
def handle_data(context, data):
# 获取该股票20日收盘价
sr = attribute_history(g.security, g.M)["close"]
# 取得过去20日的平均价格
ma = sr.mean()
# numpy和pandas的std()均可计算标准差
# up线(压力线):20日均线+N*SD(20日收盘价标准差)
up = ma + g.k * sr.std()
# down线(支撑线):20日均线-N*SD(20日收盘价标准差)
down = ma - g.k * sr.std()
# 股票开盘价格
p = get_current_data()[g.security].day_open
# 取得当前的现金
cash = context.portfolio.available_cash
# portfolio.positions持仓标的信息
if p < down and g.security not in context.portfolio.positions:
# 跌破下限买入信号且没有持仓
order_value(g.security, cash)
elif p > up and g.security in context.portfolio.positions:
# 涨破上限卖出信号且有持仓
order_target(g.security, 0) # 卖出所有股票,使这只股票的最终持有量为0