本策略每隔1个月定时触发,根据基本面(归属母公司净利润增长率)。
策略思路:
每个月选择归属母公司净利润增长率前五的股票,平掉掉出前五的,买入新增的
结论:策略累计收益率19%,平均年化2%
沪深300累计收益率-14%,
2010-01-01至2020-01-01,沪深300累计收益率15%,
5只创业板,也是策略累计收益率654%,平均年化65%
2018-01-01至2019-01-01,沪深300累计收益率-26%,
20只创业板,策略累计收益率-26%,沪深300累计收益率-26%,
5只创业板,也是策略累计收益率-26%,
2020-01-01至2020-06-19,沪深300累计收益率-1.2%,每月调仓
20只创业板,策略累计收益率42%,年化90%
10只创业板,策略累计收益率46%,年化98%
5只创业板,策略累计收益率61%,年化131%
每周调仓,5只创业板,策略累计收益率55%,年化111%
# coding=utf-8
from __future__ import print_function, absolute_import, unicode_literals
import numpy as np
import pandas as pd
from gm.api import *
def init(context):
# 每月第一个交易日的09:40 定时执行algo任务
schedule(schedule_func=algo, date_rule='1m', time_rule='09:40:00')
# 数据滑窗
# context.date = 5
# 设置开仓的最大资金量
context.ratio = 0.8
# 沪深300 SHSE.000300,创业板指 SZSE.399006
context.index = "SHSE.000300"
context.num = 5
context.list =[]
subscribe(symbols= context.index, frequency='1d', count=2)
context.symbol="SHSE.000300"
# 默认回撤超过10%即止损
context.stop_loss = 0.1
context.high = 0
def algo(context):
now = context.now
order_close_all()
symbol_list = get_history_constituents(index=context.index, start_date=now)[0].get("constituents").keys()
# NPGRT 归属母公司净利润增长率 (本期归属母公司净利润 - 上年同期归属母公司净利润)/上年同期归属母公司净利润*100%
df = get_fundamentals_n(table="deriv_finance_indicator",symbols=symbol_list,end_date=now, fields="NPGRT", count=1, df=True)
df['sum'] = df['NPGRT_sort']+df['ROE_sort']
df = df.sort_values(["sum"], ascending=False)
target_list = df["symbol"].values
target_list = target_list[:context.num]
# 计算要卖出的差集
have_list = context.list
sell_list = list(set(have_list).difference(set(target_list)))
print(str(now) + '卖出:\n' + str(sell_list))
buy_list = list(set(target_list).difference(set(have_list)))
print(str(now) + '买入:\n' + str(buy_list))
context.list=target_list
for symbol in target_list:
order_target_percent(symbol=symbol, percent=1./context.num, order_type=OrderType_Market, position_side=PositionSide_Long)
print(str(now) + '持仓:\n' + str(target_list))
# 查看最终的回测结果
def on_backtest_finished(context, indicator):
print(indicator)
if __name__ == '__main__':
'''
strategy_id策略ID,由系统生成
filename文件名,请与本文件名保持一致
mode实时模式:MODE_LIVE回测模式:MODE_BACKTEST
token绑定计算机的ID,可在系统设置-密钥管理中生成
backtest_start_time回测开始时间
backtest_end_time回测结束时间
backtest_adjust股票复权方式不复权:ADJUST_NONE前复权:ADJUST_PREV后复权:ADJUST_POST
backtest_initial_cash回测初始资金
backtest_commission_ratio回测佣金比例
backtest_slippage_ratio回测滑点比例
'''
run(strategy_id='7092c40b-8829-11ea-b2b5-0a0027000006',
filename='multiple_factor_base.py',
mode=MODE_BACKTEST,
token='9b06ce1b5a39ac39d71e58836549a95259fdcb60',
backtest_start_time='2010-01-01 08:00:00',
backtest_end_time='2012-01-01 16:00:00',
backtest_adjust=ADJUST_PREV,
backtest_initial_cash=1000000,
backtest_commission_ratio=0.0003,
backtest_slippage_ratio=0.0001)