原本想在rqalpha中好好回测一个小市值策略,但发现个人版的rqalpha找不到市值等基本面的数据。于是利用了myquant的数据,然而又喜又忧,喜的是可以用,忧的是只能返回大约一个月左右的数据,所以想回测的日期超过2个月,基本不可能。然而,回测一个策略的日期至少几年起。
但回测工作不能停滞,后续将研究积累本地数据,那样便可以随心所欲的利用数据了。这次先将已完成的代码贡献出来(工程进行到每天选出10支最小市值股票):
from rqalpha.api import *
from rqalpha import run_func
from gm.api import *
#设置掘金的token
set_token('***')
# 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。
def init(context):
pass
# 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新
def handle_bar(context, bar_dict):
#获取所有股票代码
data=all_instruments(type='CS',date='20231207')
#过滤ST
data=data[~data['symbol'].str.contains('ST')]
#过滤退市
data=data[~data['symbol'].str.contains('退')]
#过滤科创板
data=data[data['order_book_id'].str[0:2]!='68']
#将股票代码一列转换成列表
datal=data['order_book_id'].tolist()
#将米筐的代码转换成掘金的,后续要在掘金中查询市值
datagm=[]
for i in datal:
a=code_rq_to_gm(i)
datagm.append(a)
#在掘金中查询市值
tmv=stk_get_daily_mktvalue_pt(symbols=datagm, fields='tot_mv',trade_date=context.now.strftime('%Y-%m-%d'), df=True)
#按市值由小到大升序排列
tmv=tmv.sort_values(by='tot_mv')
#取前10名的代码生成购买列表
buylist=tmv.iloc[0:10]['symbol'].tolist()
buylistmk=[]
for j in buylist:
b=code_gm_to_qr(j)
buylistmk.append(b)
print(buylistmk)
#自定义函数,将米筐的代码转换成掘金的。
def code_rq_to_gm(rqcode):
if rqcode[-1]=='E':#深市
gmcode='SZSE.'+rqcode[0:6]
else:
gmcode='SHSE.'+rqcode[0:6]
return(gmcode)
#自定义函数,将掘金的代码转换成米筐的,下单的。
def code_gm_to_qr(gmcode):
if gmcode[1]=='Z':#深市
rqcode=gmcode[-6:]+'.XSHE'
else:
rqcode=gmcode[-6:]+'.XSHG'
return(rqcode)
#回测的参数,为了演示,只回测了两个交易日
config = {
"base": {
"start_date": "2023-11-29",
"end_date": "2023-11-30",
"benchmark": "000300.XSHG",
"accounts": {
"stock": 100000
}
},
"extra": {
"log_level": "verbose",
},
"mod": {
"sys_analyser": {
"enabled": True,
"plot": False
}
}
}
# 您可以指定您要传递的参数
#run_func(init=init, before_trading=before_trading, handle_bar=handle_bar, config=config)
results=run_func(init=init, handle_bar=handle_bar, config=config)
2023-11-29选出的代码:[‘600768.XSHG’, ‘600455.XSHG’, ‘300478.XSHE’, ‘300929.XSHE’, ‘605081.XSHG’, ‘000691.XSHE’, ‘002633.XSHE’, ‘300321.XSHE’, ‘603389.XSHG’, ‘600539.XSHG’]
2023-11-30选出的代码:[‘600768.XSHG’, ‘600455.XSHG’, ‘300478.XSHE’, ‘300929.XSHE’, ‘000691.XSHE’, ‘605081.XSHG’, ‘002633.XSHE’, ‘300321.XSHE’, ‘300665.XSHE’, ‘603389.XSHG’]
两天的代码中,只有1支不一样,如果在实盘中,那11月30日就要卖出一只,买入一支了。
(以上仅为实验数据,不作为投资建议!)
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/75021
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!