魔改版小市值策略

策略思路

最近几年,小市值策略一直都收益不错(当然,不包含17年和18年)。小市值因子对收益的影响是很大的。特别是行情不好的时候,大家都忙着炒作热点,那么这时候符合题材的小市值更加符合炒作标准了。

为什么说是魔改版的小市值策略呢,因为最终选取小市值的方法真的很玄学。

上收益效果图:
在这里插入图片描述
三年多,有7.45倍的收益,实属夸张了哈。有这个收益,还要什么自行车啊。

那么,这个策略玄学在哪里呢。

核心想法:

1、选取100个市值最小的股票,剔除ST股、次新股、科创板、北交所股票等等。

2、从剩下的股票中对证券代码进行排序,这就是最玄学的地方。然后选取排序靠前的5只股票。

3、每周第一个交易日早上进行轮换。

核心代码

def monthly_filter(context):today = context.current_dtyesterday = today -  datetime.timedelta(days=1)start_day = today -  datetime.timedelta(days=375)yesterday = yesterday.strftime('%Y-%m-%d')# 选出小市值的股票q = query(valuation.code,valuation.circulating_market_cap).filter(valuation.circulating_market_cap.between(0,1000)).order_by(valuation.circulating_market_cap.asc()).limit(100)codes = get_fundamentals(q).code.tolist()# 筛选出主板、创业板股票codes = [code for code in codes if code[:2] in ('60','00','30')]# log.info("Top 10 小市值:" + str(codes[:10]))# 过滤ST股票df = get_extras('is_st', codes, end_date=yesterday,count=1)df = df.Tdf.columns = ['is_st']df=df[df['is_st']==0]codes = df.index.tolist()# 过滤次新股q = query(finance.STK_LIST.code).filter(finance.STK_LIST.start_date <=start_day,finance.STK_LIST.code.in_(codes))codes = list(finance.run_query(q).code)g.pools = set(codes)def weekly_filter(context):today = context.current_dtyesterday = today -  datetime.timedelta(days=1)start_day = today -  datetime.timedelta(days=375)yesterday = yesterday.strftime('%Y-%m-%d')codes = list(g.pools)if codes != []:# 过滤ST股票df = get_extras('is_st', codes, end_date=yesterday,count=1)df = df.Tdf.columns = ['is_st']df=df[df['is_st']==0]codes = df.index.tolist()# codes = filter_st_stock(codes)g.pools = set(codes)else:# 选出小市值的股票q = query(valuation.code,valuation.circulating_market_cap).filter(valuation.circulating_market_cap.between(0,1000)).order_by(valuation.circulating_market_cap.asc()).limit(100)codes = get_fundamentals(q).code.tolist()# 筛选出主板、创业板股票codes = [code for code in codes if code[:2] in ('60','00','30')]# 过滤ST股票df = get_extras('is_st', codes, end_date=yesterday,count=1)df = df.Tdf.columns = ['is_st']df=df[df['is_st']==0]codes = df.index.tolist()# 过滤次新股q = query(finance.STK_LIST.code).filter(finance.STK_LIST.start_date <= start_day,finance.STK_LIST.code.in_(codes))codes = list(finance.run_query(q).code)g.pools = set(codes)# log.info('每周五选定的股票:', g.pools)#1-1 准备股票池
def prepare_stock_list(context):#获取已持有列表g.hold_list= list(context.portfolio.positions.keys())#获取昨日涨停列表if g.hold_list != []:df = get_price(g.hold_list, end_date=context.previous_date, frequency='daily', fields=['close','high_limit'], count=1, panel=False, fill_paused=False)df = df[df['close'] == df['high_limit']]g.yesterday_HL_list = list(df.code)else:g.yesterday_HL_list = []# 获取今天的日期today = context.current_dttoday_Year = today.strftime('%Y')NewYears = {'2010': '02-14', '2011': '02-03', '2012': '01-23', '2013': '02-10', '2014': '01-31', '2015': '02-19', '2016': '02-08', '2017': '01-28', '2018': '02-16', '2019': '02-05', '2020': '01-25', '2021': '02-12', '2022': '02-01', '2023': '01-22', '2024': '02-10', '2025': '01-29', '2026': '02-17', '2027': '02-06', '2028': '01-26', '2029': '02-13', '2030': '02-03'}spring_festival_date = NewYears[today_Year]#判断今天是否为账户资金再平衡的日期 或者 元旦到春节之间的日期g.no_trading_today_signal = today_is_between(context, '04-05', '04-30') or today_is_between(context, '01-01', spring_festival_date)def get_stock_list(context):final_list = set()initial_list = list(g.pools)if len(initial_list) == 0:return []initial_list = filter_paused_stock(initial_list)initial_list = filter_st_stock(initial_list)today = context.current_dt# 通过timedelta算出前一天的日期delta = datetime.timedelta(days=1)yesterday = today - deltayesterday = yesterday.strftime('%Y-%m-%d')q = query(valuation.code, valuation.circulating_market_cap).filter(valuation.code.in_(initial_list)).limit(g.stock_num)codes = get_fundamentals(q).code.tolist()circulating_market_cap_list = get_fundamentals(q).circulating_market_cap.tolist()log.info('数据库拉取的股票数量:{}'.format(len(codes)))log.info('最小市值:{}, 最大市值:{}'.format(min(circulating_market_cap_list), max(circulating_market_cap_list)))final_list = codes.copy()print('final_list数量:{}'.format(len(final_list)))final_list = filter_paused_stock(final_list)print('过滤停牌后的股票数量:{}'.format(len(final_list)))final_list = filter_st_stock(final_list)log.info('每周一买入的股票数量:'.format(len(final_list)))return final_list#1-3 整体调整持仓
def weekly_adjustment(context):if g.no_trading_today_signal:return#获取应买入列表 target_list = get_stock_list(context)#调仓卖出for stock in g.hold_list:if (stock not in target_list) and (stock not in g.yesterday_HL_list):log.info("卖出[%s]" % (stock))order_target(stock, 0)else:log.info("已持有[%s]" % (stock))#调仓买入position_count = len(context.portfolio.positions)target_num = len(target_list)if target_num > position_count:value = context.portfolio.cash / (target_num - position_count)for stock in target_list:if context.portfolio.positions[stock].total_amount == 0:if open_position(stock, value):if len(context.portfolio.positions) == target_num:break

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/593920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装tensorrt环境在linux上

在linux上输入命令 bash cat /etc/os-release 命令查看系统版本 nvidia-smi命令后有内容弹出而没有报错,表明系统中安装了NVIDIA显卡驱动&#xff0c;并且该命令成功地显示了有关NVIDIA GPU的信息。 输入nvcc -V并且看到输出时,这表明您的系统中已经安装了NVIDIA的CUDA工具…

MySQL第三战:CRUD,函数1以及unionunion all

前言 在当今的数字化时代&#xff0c;数据库已经成为信息管理的重要工具。其中&#xff0c;MySQL作为一种流行的关系型数据库管理系统&#xff0c;已经广泛应用于各种业务场景。在本文中&#xff0c;我们将深入探讨MySQL中的核心概念&#xff0c;包括创建&#xff08;Create&a…

[每周一更]-(第51期):Go的调度器GMP

参考文献 https://learnku.com/articles/41728http://go.cyub.vip/gmp/gmp-model.html#g-m-phttps://blog.csdn.net/ByteDanceTech/article/details/129292683https://www.ququ123.top/2022/04/golang_gmp_principle/ 什么是GMP? GMP模型是Go语言并发模型的核心概念&#x…

ASP.NET Core基础之图片文件(一)-WebApi访问静态图片

阅读本文你的收获&#xff1a; 学会在WebApi项目中访问静态图片了解静态文件中间件UseStaticFiles的用法 系统中免不了要去处理图片文件&#xff0c;比如上传商品的图片、显示商品的图片&#xff0c;访问系统中的图片等等&#xff0c;根据微软官网描述&#xff1a; 静态文件&a…

自动化测试框架 —— pytest框架入门到入职篇

01、pytest框架介绍 pytest 是 python 的第三方单元测试框架&#xff0c;比自带 unittest 更简洁和高效&#xff0c;支持非常丰富的插件&#xff0c;同时兼容 unittest 框架。这就使得我们在 unittest 框架迁移到 pytest 框架的时候不需要重写代码。 pytest框架优点 1、简单…

Ubuntu Server 22.04 连接Wifi并配置静态IP

Ubuntu Server 22.04 连接Wifi并配置静态IP 前言&#xff1a;我家最近好几台电脑&#xff0c;我都想跑着Ubuntu Server做服务器&#xff0c;但是近几年的超级本已经不自带网口了&#xff0c;所以我就考虑用Wifi来联网&#xff0c;速度也还可以&#xff0c;但是既然是跑服务&…

Nginx 中的日志

目录 1.定制访问日志记录格式 1.1 全部日志记录 1.2 每个网站独属一份日志 2.日志路径 3.错误日志 1.定制访问日志记录格式 1.1 全部日志记录 该配置处于nginx.conf 文件中 log_format compression $remote_addr - $remote_user [$time_local] "$request" $sta…

技术扫盲:如何优雅的使用 java -jar

java -jar xxx.jar java -jar 是一个用于在命令行界面中执行 Java 可执行 JAR 文件的命令。它的语法如下&#xff1a; java -jar <JAR 文件路径> [参数]其中&#xff1a; java 是 Java 运行时环境的可执行文件。-jar 是一个选项&#xff0c;表示要执行的文件是一个 JA…

Postman版IDEA插件!免费!

Postman是大家最常用的API调试工具&#xff0c;那么有没有一种方法可以不用手动写入接口到Postman&#xff0c;即可进行接口调试操作&#xff1f;今天给大家推荐一款IDEA插件&#xff1a;Apipost Helper&#xff0c;写完代码就可以调试接口并一键生成接口文档&#xff01;而且还…

一文读懂Solana 上最正统的铭文通证$mash

早在 2023 年的 11 月&#xff0c;包括 Solana、Avalanche、Polygon、Arbitrum、zkSync 等生态正在承接比特币铭文生态外溢的价值。当然&#xff0c;因铭文赛道过于火爆&#xff0c;当 Avalanche、BNB Chain 以及 Polygon 等链上 Gas 飙升至极值&#xff0c;Arbitrum、zkSync 等…

C++学习(二)

我们是在学习过了C语言&#xff0c;基础上来看这篇文章的&#xff0c;如果你是直接学C&#xff0c;这篇文章不太适合你的&#xff0c;因为这里只讲C基础中与C语言不同之处。 一.main函数区别 在C语言中&#xff0c;我们写main函数是不是可以省略前面的int,但是在C中&#xff…

深度学习|5.2 偏差和方差

偏差和方差 Bias&#xff08;偏差&#xff09;&#xff1a;偏差是指对样本点的估计值和实际值的偏离程度。偏差越大&#xff0c;样本点越不符合实际值。偏差衡量单个数据点的偏离程度&#xff0c;如下图的第二行。 Variance&#xff08;方差&#xff09;&#xff1a;方差能代表…

希尔排序算法——交换法

希尔排序&#xff0c;又称缩小增量排序&#xff0c;是插入排序的改进版。它是因DL&#xff0e;Shell于1959年提出而得名。希尔排序的实质就是分组插入排序&#xff0c;该方法是非稳定的排序算法。 具体来说&#xff0c;希尔排序通过将待排序序列分成多个子序列&#xff0c;分别…

大数据Doris(四十九):Doris数据导出介绍

文章目录 Doris数据导出介绍 一、​​​​​​​使用示例

CMake入门教程【核心篇】引用子模块.cmake文件(include)

&#x1f608;「CSDN主页」&#xff1a;传送门 &#x1f608;「Bilibil首页」&#xff1a;传送门 &#x1f608;「本文的内容」&#xff1a;CMake入门教程 &#x1f608;「动动你的小手」&#xff1a;点赞&#x1f44d;收藏⭐️评论&#x1f4dd; 文章目录 include子模块举个例…

C#编程-使用构造函数和析构函数

使用构造函数和析构函数 如果想要在以创建对象时就初始化成员变量,可以创建名为构造函数的特殊函数。您可能还需要使用对象后从内存中删除这些对象。这可通过称为析构函数的函数实现。 实现构造函数 构造函数是在创建对象时自动调用的特殊方法。无须显式地调用构造函数。请…

使用MQTT.JS创建一个网页版的MQTT客户端

一、MQTT.JS介绍 MQTT.js 是一个开源的 MQTT 协议的客户端库&#xff0c;使用 JavaScript 编写&#xff0c;主要用于 Node.js 和 浏览器环境中。是JavaScript 环境下的 MQTT 客户端库。可以用于微信小程序、支付宝小程序等定制浏览器环境。 我们可以直接在HTML文件中进行调用…

CMake是什么?为什么学习CMake

&#x1f608;「CSDN主页」&#xff1a;传送门 &#x1f608;「Bilibil首页」&#xff1a;传送门 &#x1f608;「本文的内容」&#xff1a;CMake入门教程 &#x1f608;「动动你的小手」&#xff1a;点赞&#x1f44d;收藏⭐️评论&#x1f4dd; 文章目录 1.CMake简介2.为什么…

Redis(二)

1、redis的持久化 "Redis 如何将数据写入磁盘"&#xff0c;首先要明白的时候&#xff0c;我们使用的redis的数据保存在内存上的&#xff0c;也就是说&#xff0c;只要我们的电脑关机或者重启服务器&#xff0c;那么在内存中的数据就会消失&#xff0c;所以要想持久化…

06.02 customizing plots with style sheets

使用 style 来配置 pyplot 风格 import matplotlib.pyplot as plt import numpy as np%matplotlib inlinestyle 是 pyplot 的一个子模块&#xff0c;方便进行风格转换&#xff0c; pyplot 有很多的预设风格&#xff0c;可以使用 plt.style.available 来查看&#xff1a; plt.…