尽管今年小市值策略收益不行,人人嫌弃,但不会长期这样的,牛市要出现,不可能只有大市值在起舞,小市值一定会有舞台的。今天跟大家分享一个非常简单的小市值策略。
主要逻辑如下:
1、每22个交易日换仓一次。
2、每次选择市值最低的10支股票作为目标持仓。但排除北交所和科创板等一般股民不能交易的市场。股票市值用了现成的tushare数据。
3、将原持仓中、不在第2条的10支股票中的股票清仓。
4、将不在原持仓中、在第2条的10支股票中的股票买入。
生成代码如下:
# coding:gbk
import datetime
#导入tushare库
import ****_tushare as ts
#输入tushare库的token
ts.set_token('*****')
#初始化pro_api
pro = ts.pro_api()
pro = ts.pro_api(env='qa')
pro = ts.pro_api(server='*****')
def init(C):
#初始化持仓日期
C.days = 0
#随便命名一个回测账号
C.accountID = '666'
#账号类型为股票型
C.strAccountType = 'STOCK'
#每日运行一次的函数
def handlebar(C):
#当前K线的日期
date = timetag_to_datetime(C.get_bar_timetag(C.barpos),'%Y%m%d')
#每22个交易日发生的事件
if C.days%22 == 0:
#获取市值信息
df = pro.daily_basic_ts(trade_date=date, fields="ts_code,total_mv")
#去除8开头的北交所
df = df[~df['ts_code'].str.startswith('8')]
#去除8开头的北交所
df = df[~df['ts_code'].str.startswith('4')]
#去除科创版
df = df[~df['ts_code'].str.startswith('68')]
#按市值从小到大排列并选前10支
df = df.sort_values(by='total_mv', ascending=True).head(10)
#转换成列表
high_dv_list = df['ts_code'].tolist()
#获取持仓信息
pos = get_trade_detail_data(C.accountID, C.strAccountType, 'POSITION', '小市值')
#初始化持仓股票、数量字典
hold = {}
#填入持仓股票、数量
for p in pos:
hold[p.m_strInstrumentID+'.'+p.m_strExchangeID]=p.m_nVolume
#卖出市值不在前10名的持仓股
for j,k in hold.items():
if j not in high_dv_list:
passorder(24, 1101, C.accountID, j, 5, 0,k, 2, C)
print(f'已清仓{j}!-{date}')
#买入市值在前10的持仓股(已经持仓的不买入)
for i in high_dv_list:
if i not in hold.keys():
passorder(23, 1102, C.accountID, i, 5, 0,100000, 2, C)
print(f'已买入{i},金额10万元!-{date}')
#每运行1天,将天数记数器+1
C.days += 1
收益情况:


代码中的需要说明的地方我已经在代码区注释了,此策略是简化版,不建议用来模拟或实盘。
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/129439
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!