策略思想`
2月持有中证1000ETF 其他月份持有招商双债
# 股票策略模板
# 初始化函数,全局只运行一次
def init(context):
# 设置基准收益:中证1000指数
set_benchmark('512100.SH') # 中证1000指数代码
# 打印日志
log.info('策略开始运行,初始化函数全局只运行一次')
# 设置股票每笔交易的手续费为万分之二(手续费在买卖成交后扣除,不包括税费,税费在卖出成交后扣除)
set_commission(PerShare(type='stock', cost=0.0002))
# 设置股票交易滑点0.5%,表示买入价为实际价格乘1.005,卖出价为实际价格乘0.995
set_slippage(PriceSlippage(0.000))
# 设置日级最大成交比例25%,分钟级最大成交比例50%
# 日频运行时,下单数量超过当天真实成交量25%,则全部不成交
# 分钟频运行时,下单数量超过当前分钟真实成交量50%,则全部不成交
set_volume_limit(0.25, 0.5)
# 设置要操作的股票:中证1000ETF和招商双债LOF
context.security_1 = '512100.SH' # 中证1000ETF代码
context.security_2 = '161716.SZ' # 假设招商双债LOF代码为161716.SZ
# 回测区间、初始资金、运行频率请在右上方设置
# 每日开盘前9:00被调用一次,用于储存自定义参数、全局变量,执行盘前选股等
def before_trading(context):
# 获取日期
date = get_datetime().strftime('%Y-%m-%d %H:%M:%S')
# 打印日期
log.info('{} 盘前运行'.format(date))
# 开盘时运行函数
def handle_bar(context, bar_dict):
# 获取时间
time = get_datetime().strftime('%Y-%m-%d %H:%M:%S')
# 打印时间
log.info('{} 盘中运行'.format(time))
# 获取当前日期的月份
current_month = get_datetime().month
# 获取当前账户持仓股票列表
stocklist = list(context.portfolio.stock_account.positions)
# 如果当前月份是2月
if current_month == 2:
log.info("当前月份是2月,检查是否满仓中证1000ETF")
# 如果未满仓中证1000ETF,则清仓并买入中证1000ETF
if context.security_1 not in stocklist or len(stocklist) > 1:
log.info("未满仓中证1000ETF,清仓并买入中证1000ETF")
# 先清仓所有持仓
for stock in stocklist:
order_target(stock, 0)
# 然后全仓买入中证1000ETF
order_target_percent(context.security_1, 1)
else:
log.info("已满仓中证1000ETF,保持不动")
# 如果当前月份不是2月
else:
log.info("当前月份不是2月,检查是否满仓招商双债LOF")
# 如果未满仓招商双债LOF,则清仓并买入招商双债LOF
if context.security_2 not in stocklist or len(stocklist) > 1:
log.info("未满仓招商双债LOF,清仓并买入招商双债LOF")
# 先清仓所有持仓
for stock in stocklist:
order_target(stock, 0)
# 然后全仓买入招商双债LOF
order_target_percent(context.security_2, 1)
else:
log.info("已满仓招商双债LOF,保持不动")
# 收盘后运行函数,用于储存自定义参数、全局变量,执行盘后选股等
def after_trading(context):
# 获取时间
time = get_datetime().strftime('%Y-%m-%d %H:%M:%S')
# 打印时间
log.info('{} 盘后运行'.format(time))
log.info('一天结束')
结果年化9% (17年-25年) 还是可以的
综合分析
策略优势:
策略的总收益和年化收益率都非常高,表明策略在市场整体表现不佳的情况下,仍然能够实现显著的超额收益。
策略的波动率较低,最大回撤可控,表明策略在风险控制方面表现较好。
策略的Sharpe比率较高,说明在承担单位风险时,能够获得较高的回报。
潜在问题:
Alpha值较低,表明策略的超额收益并不显著,可能需要进一步优化。
Sortino比率较低,表明策略在控制下行风险方面表现一般。
胜率较低(35%),表明策略的盈利交易比例较低,可能需要优化交易信号的准确性。
改进建议:
优化交易信号:提高胜率,减少亏损交易的比例。
增强风险控制:进一步降低下行风险,提高Sortino比率。
调整策略逻辑:如果策略与基准相关性较低(低Beta),可以考虑增加对市场趋势的敏感性,以提高Alpha值。