社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

更新数据,年化18.8%,回撤8%的组合策略 | akshare与tushare历史日线数据下载与更新(python代码)

七年实现财富自由 • 1 周前 • 34 次点击  

原创内容第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%+的策略,每周五迭代一次,代码和数据在星球全部开源。

扩展  •  历史文章   

EarnMore(赚得更多)基于RL的投资组合管理框架:一致的股票表示,可定制股票池管理。(附论文+代码)
deap系统重构,再新增一个新的因子,年化39.1%,卡玛提升至2.76(附python代码)

deap时间序列函数补充,挖掘出年化39.12%的轮动因子,卡玛比率2.52

年化19.3%,回撤仅8%的实盘策略,以及backtrader整合CTPBee做实盘(附python代码和数据)

近四年年化收益19.3%,而最大回撤仅8%,卡玛比率2.34,投资应该是一件简单的事情。(附python代码+数据)

aitraderv4.2开发计划,整合QMT。年化39.9%的因子与年化19.3%的策略哪个优?

年化18%-39.3%的策略集 | backtrader通过xtquant连接qmt实战

AGI通用智能实验室

紧跟前沿AGI研究进展,论文复现,可运行的代码,落地应用等。

既做科研,也做科普;研究基础大模型,也关心应用场景。

通往前沿通用人工智能(AGI)的路径已经展开。

这是一场史诗级的工业革命级别的技术变革,奇点临近,未来已来!

▼点击阅读原文,访问“AI量化实验室”策略集合
(http://www.ailabx.com)。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/178658
 
34 次点击