小市值叠加行业轮动 今年目前年化300+
可以直接复制到聚宽进行回测,效果不错
#导入函数库
from jqdata import *
import numpy as np
import pandas as pd
import statsmodels.api as sm
import datetime as dt
#初始化函数
def initialize(context):
# 设定基准
set_benchmark(‘000300.XSHG’)
# 用真实价格交易
set_option(‘use_real_price’, True)
# 打开防未来函数
set_option(“avoid_future_data”, True)
# 将滑点设置为0
set_slippage(FixedSlippage(0))
# 设置交易成本万分之三,不同滑点影响可在归因分析中查看
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=‘fund’)
# 过滤order中低于error级别的日志
log.set_level(‘order’, ‘error’)
#初始化全局变量
g.stock_num = 5
g.high_limit_list = [] #记录持仓中涨停的股票
g.hold_list = [] #当前持仓的全部股票
g.history_hold_list = [] #过去一段时间内持仓过的股票
g.not_buy_again_list = [] #最近买过且涨停过的股票一段时间内不再买入
g.limit_days = 20 #不再买入的时间段天数
g.cap_filter = -1 #-1:小市值/1:大市值
#g.industry = [] #行业代码
g.target_list = [] #开盘前预操作股票池
g.no_trading_today_signal = False #清仓区间
g.m_days = 25 #动量参数
# 设置交易运行时间
#run_monthly(get_industry_list, 1, ‘09:00’)
run_daily(prepare_stock_list, ‘9:05’)
run_monthly(weekly_adjustment, 1, ‘09:30’)
run_daily(check_limit_up, ‘14:00’) #检查持仓中的涨停股是否需要卖出
run_daily(close_account, ‘14:30’)
def get_industry_list(context):
industries_sw1 = get_industries(name = ‘sw_l1’)
indus_list = industries_sw1.index.tolist()
period = 10
start_date = context.previous_date
print(start_date)
df = finance.run_query(query(finance.SW1_DAILY_PRICE).filter(finance.SW1_DAILY_PRICE.code.in_(indus_list),finance.SW1_DAILY_PRICE.date >= start_date,
).order_by(finance.SW1_DAILY_PRICE.date.desc()))
df = df.set_index(‘code’)
df = df[[‘name’, ‘change_pct’]]
rt = df.groupby(by=‘code’).sum()
rt[‘rank’] = rt[‘change_pct’].rank(ascending=False)
rt[‘rs’] = round(100*(1 - rt[‘rank’]/le