原创内容第892篇,专注智能量化投资、个人成长与财富自由。复现一个聚宽策略,年化25.69%,最大回撤28.49%。 import numpy as np import pandas as pd
#初始化函数 def initialize(context): # 设定基准 set_benchmark('000300.XSHG') # 用真实价格交易 set_option('use_real_price', True) # 打开防未来函数 set_option("avoid_future_data", True) set_slippage(FixedSlippage(0.000)) # 设置交易成本 set_order_cost(OrderCost(open_tax=0, close_tax=0, open_commission=0.0002, close_commission=0.0002, close_today_commission=0, min_commission=5), type='fund') # 过滤一定级别的日志 log.set_level('system', 'error') # 参数 g.etf_pool = [ '518880.XSHG', #黄金ETF(大宗商品) '513100.XSHG', #纳指100(海外资产) '159915.XSHE', #创业板100(成长股,科技股,中小盘) '510180.XSHG', #上证180(价值股,蓝筹股,中大盘) ] g.m_days = 25 #动量参考天数 run_daily(trade, '9:30') #每天运行确保即时捕捉动量变化
def get_rank(etf_pool): score_list = [] for etf in etf_pool: df = attribute_history(etf, g.m_days, '1d', ['close']) y = df['log'] = np.log(df.close) x = df['num'] = np.arange(df.log.size) slope, intercept = np.polyfit(x, y, 1) annualized_returns = math.pow(math.exp(slope), 250) - 1 r_squared = 1 - (sum((y - (slope * x + intercept))**2) / ((len(y) - 1) * np.var(y, ddof=1))) score = annualized_returns * r_squared score_list.append(score) df = pd.DataFrame(index=etf_pool, data={'score':score_list}) df = df.sort_values(by='score', ascending=False) rank_list = list(df.index) print(df) record(黄金 = round(df.loc['518880.XSHG'], 2)) record(纳指 = round(df.loc['513100.XSHG'], 2)) record(成长 = round(df.loc['159915.XSHE'], 2)) record(价值 = round(df.loc['510180.XSHG'], 2)) return rank_list
# 交易 def trade(context): # 获取动量最高的一只ETF target_num = 1 target_list = get_rank(g.etf_pool)[:target_num] # 卖出 hold_list = list(context.portfolio.positions) for etf in hold_list: if etf not in target_list: order_target_value(etf, 0) print('卖出' + str(etf)) else: print('继续持有' + str(etf)) # 买入 hold_list = list(context.portfolio.positions) if len(hold_list) < target_num: value = context.portfolio.available_cash / (target_num - len(hold_list)) for etf in target_list: if context.portfolio.positions[etf].total_amount == 0: order_target_value(etf, value) print('买入' + str(etf))
相比etf和可转债,股票数据是最多的。etf大约1000多支,而且很多是2019年之后成立的。而且如果按指数排重,比如像沪深300指数相关的ETF有几十支,近指数合并的话,也就是几百个指数。我们越来越爱回忆了 是不是因为不敢期待未来呢 你说世界好像天天在倾塌着 只能弯腰低头把梦越做越小了。 不确定的世界,不确定的未来。 人生就是这样,你永远不知道,下一秒会发生什么? 也许曲终人散,都是尘归尘,土归土。 但至少我们努力过,折腾过不是吗? 但是,不要怕,总有办法不是吗? 回看五年,不确定的时期,不确定的职业危机。 ABCZ计划没有一个成型。孩子还小。 五年过去了,相比之。 ABZ基本成型,C计划在徐徐展开。 往前再看五年,到2030年。 ABZ更加成熟,C计划成型,孩子们长大了。 不管怎么样,未来总会来。 如此而已。 但好的未来,需要你好好的布局,然后一点点地努力。 去积累,去积蓄力量。 AI量化实验室 星球,已经运行三年多,1700+会员。aitrader代码,因子表达式引擎、遗传算法(Deap)因子挖掘引擎等,支持vnpy,qlib,backtrader和bt引擎,内置多个年化30%+的策略,每周五迭代一次,代码和数据在星球全部开源。
|