原創(chuàng)內(nèi)容第892篇,專注智能量化投資、個人成長與財富自由。復(fù)現(xiàn)一個聚寬策略,年化25.69%,最大回撤28.49%。 import numpy as np import pandas as pd
#初始化函數(shù) def initialize(context): # 設(shè)定基準(zhǔn) set_benchmark('000300.XSHG') # 用真實(shí)價格交易 set_option('use_real_price', True) # 打開防未來函數(shù) set_option("avoid_future_data", True) set_slippage(FixedSlippage(0.000)) # 設(shè)置交易成本 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') # 參數(shù) g.etf_pool = [ '518880.XSHG', #黃金ETF(大宗商品) '513100.XSHG', #納指100(海外資產(chǎn)) '159915.XSHE', #創(chuàng)業(yè)板100(成長股,科技股,中小盤) '510180.XSHG', #上證180(價值股,藍(lán)籌股,中大盤) ] g.m_days = 25 #動量參考天數(shù) run_daily(trade, '9:30') #每天運(yùn)行確保即時捕捉動量變化
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('繼續(xù)持有' + 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))
今天咱們開始獲取股票數(shù)據(jù):一共5000多支。相比etf和可轉(zhuǎn)債,股票數(shù)據(jù)是最多的。etf大約1000多支,而且很多是2019年之后成立的。而且如果按指數(shù)排重,比如像滬深300指數(shù)相關(guān)的ETF有幾十支,近指數(shù)合并的話,也就是幾百個指數(shù)。我們越來越愛回憶了 是不是因?yàn)椴桓移诖磥砟?/span> 你說世界好像天天在傾塌著 只能彎腰低頭把夢越做越小了。 不確定的世界,不確定的未來。 人生就是這樣,你永遠(yuǎn)不知道,下一秒會發(fā)生什么? 也許曲終人散,都是塵歸塵,土歸土。 但至少我們努力過,折騰過不是嗎? 但是,不要怕,總有辦法不是嗎? 回看五年,不確定的時期,不確定的職業(yè)危機(jī)。 ABCZ計劃沒有一個成型。孩子還小。 五年過去了,相比之。 ABZ基本成型,C計劃在徐徐展開。 往前再看五年,到2030年。 ABZ更加成熟,C計劃成型,孩子們長大了。 不管怎么樣,未來總會來。 如此而已。 但好的未來,需要你好好的布局,然后一點(diǎn)點(diǎn)地努力。 去積累,去積蓄力量。 AI量化實(shí)驗(yàn)室 星球,已經(jīng)運(yùn)行三年多,1700+會員。aitrader代碼,因子表達(dá)式引擎、遺傳算法(Deap)因子挖掘引擎等,支持vnpy,qlib,backtrader和bt引擎,內(nèi)置多個年化30%+的策略,每周五迭代一次,代碼和數(shù)據(jù)在星球全部開源。
|