原创内容第786篇,专注量化投资、个人成长与财富自由。
上周的代码下载:aitrader_v4.1系统更新|含年化39.1%的组合策略代码|backtrader+openctp实盘(代码+数据)
本周整合qmt实盘框架,上周的ctp框架:年化18%-39.3%的策略集 | backtrader通过xtquant连接qmt实战
更新数据集后重新跑组合策略:

akshare不需要账号就可以访问数据,还可以指定复权方式(回测一般使用后复权数据)。
不过需要特别注意一点:akshare走的是网络采集,在盘中的时候,比如交易日未收盘时,如果你去取数据,当天的数据也能取到。——这时候会出现一个问题,如果你是保存在mongo里,那么后续数据不会更新,那最后一天的数据是错的。
所以,我这个接口,加了一个判断,下午6:00之后当读当天的数据。
但这里又有一个问题,就是与服务器的时区有关系,docker里时区默认比咱们早8个小时。
def get_fund_quotes(symbol: str, start_date: str):
code = symbol[:6]
if not start_date:
start_date = '20050101'
delta = 1
if datetime.now().hour > 18:
delta = 0
# end_date = datetime.now().strftime('%Y%m%d')
end_date = (datetime.now() - timedelta(days=delta)).strftime('%Y%m%d')
if '16' != code[:2]:
df = ak.fund_etf_hist_em(symbol=code, period="daily", start_date=start_date,
end_date=end_date, adjust="hfq")
else:
df = ak.fund_lof_hist_em(symbol=code, period="daily", start_date=start_date,
end_date=end_date, adjust="hfq")
cols = {'日期': 'date', '开盘': 'open', '收盘': 'close', '最高': 'high', '最低': 'low', '成交量': 'volume',
'换手率': 'turn_over', '成交额': 'amount'}
df.rename(columns=cols, inplace=True)
df['date'] = df['date'].apply(lambda x: x.replace('-', ''))
df = df[list(cols.values())]
df['symbol'] = symbol
return df
大家本地可以使用akshare,我在服务器上帮大家切换成了tushare(需要账号和积分可以下载数据)。
tushare需要自己加载复权因子,然后自行复权,详见下面的代码:
all = pd.merge(df, df_factor, on='trade_date', how='inner')
OHLC*复权因子,我已经帮大家做了。
def get_etf_quotes(symbol: str, start_date: str):
# 拉取数据
df = pro.fund_daily(**{
"trade_date": "",
"start_date": start_date,
"end_date": "",
"ts_code": symbol,
"limit": "",
"offset": ""
}, fields=[
"ts_code",
"trade_date",
"open",
"high",
"low",
"close",
"vol",
"amount"
])
# 拉取数据
df_factor = pro.fund_adj(**{
"ts_code": symbol,
"trade_date": "",
"start_date": start_date,
"end_date": "",
"offset": "",
"limit": ""
}, fields=[
# "ts_code",
"trade_date",
"adj_factor"
])
# all = pd.concat([df, df_factor], axis=1)
all = pd.merge(df, df_factor, on='trade_date', how='inner')
all.rename(columns={'ts_code': 'symbol', 'trade_date': 'date', 'vol': 'volume'}, inplace=True)
all = all[['symbol', 'date', 'open', 'high', 'close', 'low', 'volume', 'adj_factor']]
#print(all)
for col in ['open', 'high', 'close', 'low']:
all[col] *= all['adj_factor']
#all.sort_values(by=['date'],ascending=True,inplace=True)
return all
ETF日线数据不大,一共1499支,一共约150万条数据:


从服务器dump到本地csv:

吾日三省吾身
人生的松弛感非常重要,如此你才能感受得到幸福,快乐,最重要的是内心的平静。
不以物喜,不以己悲。
允许一切发生。
不强求,不抗拒,顺其自然,为所当为。
之前想过分享阅读,写作,个人成长,其实道理就那么一点道理,来来回回,很多人都讲过,很多人也都知道。
只不过知易而行难,知行合一更难。
另一部分是技能,技能需要通过刻意练习才能内化。
还是神秘的潜意识,情绪,意识与内耗,并不容易。
今天突然看到某女星去世的消息,第一反应是假消息。
后来再看到权威媒体确认,发现是真的。
世事无常。
之前一个好兄弟也是如此突然就离开,已经四年多了。
那些计划,那些故事,那些梦想,没有人再提起。
其实人生就是一场体验而已,生命是终将走向荒芜的渡口,你我都只是匆匆的过客,不必纠结,不必紧张,充分体验。
代码和数据下载:AI量化实验室——2025量化投资的星辰大海
AI量化实验室 星球,已经运行三年多,1300+会员。
aitrader代码,含几十个策略源代码,因子表达式引擎、遗传算法(Deap)因子挖掘引擎等,支持vnpy,qlib,backtrader和bt引擎,内置多个年化30%+的策略,每周五迭代一次,代码和数据在星球全部开源。

AGI通用智能实验室
紧跟前沿AGI研究进展,论文复现,可运行的代码,落地应用等。
既做科研,也做科普;研究基础大模型,也关心应用场景。
通往前沿通用人工智能(AGI)的路径已经展开。
这是一场史诗级的工业革命级别的技术变革,奇点临近,未来已来!
