本文采用了聚宽平台接口进行量化策略设置:
一、效果图
双均线策略:双均线策略,当五日均线位于十日均线上方则买入,反之卖出。
二、证券知识:
策略收益(Total Returns)
最容易理解的一个概念,策略收益也就是策略开始到结束,总资产的变化率。
----本文 选取的国电南自600268这只股票,通过双均线策略来计算策略收益。
基准收益(Benchmark Returns)
如果一个策略一年赚了50%,而这一年来上证指数上涨了100%,所以要评判一个策略的好坏,不过是要看它的收益率,还需要一个基准来衡量它的优劣性,这个准基就是准基收益率。
对于股票的策略如果高于上证指数,那么就跑赢了基准收益率,也就是跑赢了大盘;低于上证指数,那么就是跑输了基准收益率。所以说一个好的策略至少要高于基准收益。
----本文 选取的沪深三百指数,获取某段时间的基本收益。
贝塔(Beta)
代表了策略表现对大盘变化的敏感性,也即是策略与大盘的相关性。
例如一个策略的Beta为1.5,则大盘涨1%的时候,策略可能涨1.5%,反之亦然;如果一个策略的Beta为-1.5,说明大盘涨1%的时候,策略可能跌1.5%,反之亦然。
分别是策略的每日收益和基准的每日收益
阿尔法(Alpha)
alpha是超额收益,它与市场波动无关,也就是说不是靠系统性的上涨而获得收益。
分别是策略年化收益率、基准年化收益率和无风险利率(默认0.04)。
通过预测方向或者其他可解释原因的策略也即是alpha策略;而通过波动率来带来利润的策略就是beta策略。
夏普比率(Sharpe)
描述的是策略在单位总风险下所能获得的超额收益。
是策略收益波动率,也即是策略收益率的年化标准差。
所提诺比率(Sortino)
描述的是策略在单位下行风险下所能获得的超额收益。
是策略下行波动率。
信息比率(Information Ratio)
描述的是策略在单位超额风险下的超额收益。
是策略与基准每日收益差值的年化标准差。
最大回撤(Max Drawdown)
描述的策略最大的亏损情况。最大回撤通常越小越好。
是策略两日的累计收益。
三、python代码
## 初始化函数,设定要操作的股票、基准等等
def initialize(context):
# 定义一个全局变量, 保存要操作的股票
# 000002(股票:万科A)
g.security = '600268.XSHG'
# 设定沪深300作为基准
set_benchmark('600268.XSHG')
# True为开启动态复权模式,使用真实价格交易
set_option('use_real_price', True)
# 设定成交量比例
set_option('order_volume_ratio', 1)
# 股票类交易手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱
set_order_cost(OrderCost(open_tax=0, close_tax=0.001, \
open_commission=0.0003, close_commission=0.0003,\
close_today_commission=0, min_commission=5), type='stock')
# 运行函数
run_daily(trade, 'every_bar')
## 交易程序
def trade(context):
security = g.security
# 设定均线窗口长度
n1 = 5
n2 = 10
# 获取股票的收盘价
close_data = attribute_history(security, n2+2, '1d', ['close'],df=False)
# 取得过去 ma_n1 天的平均价格
ma_n1 = close_data['close'][-n1:].mean()
# 取得过去 ma_n2 天的平均价格
ma_n2 = close_data['close'][-n2:].mean()
# 取得当前的现金
cash = context.portfolio.cash
# 如果当前有余额,并且n1日均线大于n2日均线
if ma_n1 > ma_n2:
# 用所有 cash 买入股票
order_value(security, cash)
# 记录这次买入
log.info("Buying %s" % (security))
# 如果n1日均线小于n2日均线,并且目前有头寸
elif ma_n1 < ma_n2 and context.portfolio.positions[security].closeable_amount > 0:
# 全部卖出
order_target(security, 0)
# 记录这次卖出
log.info("Selling %s" % (security))
# 绘制n1日均线价格
record(ma_n1=ma_n1)
# 绘制n2日均线价格
record(ma_n2=ma_n2)
四、最大回撤详细图