小市值选股策略代码分享(附python源码)
小市值选股策略的核心在于通过综合分析公司的基本面、行业定位、财务健康状况以及市场趋势,
来寻找那些被市场低估但具备显著成长潜力的股票,同时也要重视风险管理和投资组合的多样化。

今天来给大家分享下小市值策略代码如下:
# 显式导入 BigQuant 相关 SDK 模块
from bigdatasource.api import DataSource
from bigdata.api.datareader import D
from biglearning.api import M
from biglearning.api import tools as T
from biglearning.module2.common.data import Outputs import pandas as pd
import numpy as np
import math
import warnings
import datetime from zipline.finance.commission import PerOrder
from zipline.api import get_open_orders
from zipline.api import symbol from bigtrader.sdk import *
from bigtrader.utils.my_collections import NumPyDeque
from bigtrader.constant import OrderType
from bigtrader.constant import Direction # <aistudiograph> # @param(id="m6", name="initialize")
# 交易引擎:初始化函数,只执行一次
def m6_initialize_bigquant_run(context):
#读取数据
context.ranker_prediction = context.options['data'].read_df()
context.ranker_prediction.set_index('date',inplace=True) #print(context.ranker_prediction)
# @param(id="m6", name="before_trading_start")
# 交易引擎:每个单位时间开盘前调用一次。
def m6_before_trading_start_bigquant_run(context, data):
# 盘前处理,订阅行情等
pass # @param(id="m6", name="handle_tick")
# 交易引擎:tick数据处理函数,每个tick执行一次
def m6_handle_tick_bigquant_run(context, tick):
pass # @param(id="m6", name="handle_data")
# 交易引擎:bar数据处理函数,每个时间单位执行一次
def m6_handle_data_bigquant_run(context, data): #context = 回测引擎
#context内部 会有一些功能~ 是通过 context.xxx 来使用的
#data #调仓期的控制
remainder = context.trading_day_index % 5
#如果没到调仓期直接结束运行
if remainder !=0:
return import datetime
#初始化
buy_list = [] #买入列表
sell_list = [] #卖出列表 #==================== 数据准备
today = data.current_dt.strftime('%Y-%m-%d') #读取当天日期
time = data.current_dt account_pos = context.get_account_positions()
holding_list = list({key: value for key, value in account_pos.items() if value.avail_qty > 0}.keys())
holding_num = len(holding_list) #读取当日数据
try:
today_data = context.ranker_prediction.loc[today,:]
today_data.reset_index(inplace=True)
except:
return #策略
today_data=today_data[today_data['上市时间'] >= 365] #上市时间的过滤
today_data=today_data[today_data['市盈率ttm'] >= 0] #财务数据过滤
today_data=today_data[today_data['换手排名'] <= 0.4]
today_data.sort_values(by='市值',ascending=True,inplace=True) #市值排序 #构建目标列表
target_list = today_data.instrument.to_list()[:10] #构建卖出列表
for ins in holding_list:
if ins not in target_list:
sell_list.append(ins) #构建买入列表
for ins in target_list:
if ins not in holding_list:
buy_list.append(ins) #先卖
for ins in sell_list:
context.order_target(ins,0) #等权买
for ins in buy_list:
context.order_target_percent(ins,0.025) # @param(id="m6", name="handle_trade")
# 交易引擎:成交回报处理函数,每个成交发生时执行一次
def m6_handle_trade_bigquant_run(context, trade):
pass # @param(id="m6", name="handle_order")
# 交易引擎:委托回报处理函数,每个委托变化时执行一次
def m6_handle_order_bigquant_run(context, order):
pass # @param(id="m6", name="after_trading")
# 交易引擎:盘后处理函数,每日盘后执行一次
def m6_after_trading_bigquant_run(context, data):
pass # @module(position="-85,-19", comment='', comment_collapsed=True)
m1 = M.instruments.v2(
start_date=T.live_run_param('trading_date', '2023-01-01'),
end_date=T.live_run_param('trading_date', '2023-11-20'),
market='CN_STOCK_A',
instrument_list='',
max_count=0
) # @module(position="450,-27", comment='', comment_collapsed=True)
m2 = M.input_features.v1(
features="""
#构建一个因子。 open-close的绝对值
市值=market_cap_0
市盈率ttm=pe_ttm_0
上市时间=list_days_0
换手排名=rank_turn_0
净利润=fs_net_income_0
每股收益=fs_eps_0
净利润=fs_net_income_0"""
) # @module(position="212,97", comment='', comment_collapsed=True)
m3 = M.general_feature_extractor.v7(
instruments=m1.data,
features=m2.data,
start_date='',
end_date='',
before_start_days=90
) # @module(position="228,205", comment='', comment_collapsed=True)
m4 = M.derived_feature_extractor.v3(
input_data=m3.data,
features=m2.data,
date_col='date',
instrument_col='instrument',
drop_na=True,
remove_extra_columns=True,
user_functions={}
) # @module(position="189,315", comment='', comment_collapsed=True)
m5 = M.chinaa_stock_filter.v1(
input_data=m4.data,
index_constituent_cond=['全部'],
board_cond=['上证主板', '深证主板', '创业板', '科创板'],
industry_cond=['全部'],
st_cond=['正常'],
delist_cond=['非退市'],
output_left_data=False
) # @module(position="82,446", comment='', comment_collapsed=True)
m6 = M.hftrade.v2(
instruments=m1.data,
options_data=m5.data,
start_date='',
end_date='',
initialize=m6_initialize_bigquant_run,
before_trading_start=m6_before_trading_start_bigquant_run,
handle_tick=m6_handle_tick_bigquant_run,
handle_data=m6_handle_data_bigquant_run,
handle_trade=m6_handle_trade_bigquant_run,
handle_order=m6_handle_order_bigquant_run,
after_trading=m6_after_trading_bigquant_run,
capital_base=1000000,
frequency='daily',
price_type='真实价格',
product_type='股票',
before_start_days='0',
volume_limit=1,
order_price_field_buy='close',
order_price_field_sell='open',
benchmark='000300.HIX',
plot_charts=True,
disable_cache=False,
replay_bdb=False,
show_debug_info=False,
backtest_only=False
)
# </aistudiograph>
小市值选股策略代码分享(附python源码)的更多相关文章
- 微信小程序自动化测试最佳实践(附 Python 源码)
本文为霍格沃兹测试学院测试大咖公开课<微信小程序自动化测试>图文整理精华版. 随着微信小程序的功能和生态日益完善,很多公司的产品业务形态逐渐从 App 延升到微信小程序.微信公众号等.小程 ...
- 新浪微博登陆以及发送微博(附python源码)
原文链接(本人):https://blog.csdn.net/A5878989/article/details/76275855 说明 本文主要记录分析新浪微博登陆以及发送文字和图片微博的详细过程 分 ...
- 最优路径算法合集(附python源码)(原创)
主要的最优(最短)路径算法: 一.深度优先算法:二.广度优先算法:三.Dijstra最短路径:四.floyd最短路径(待): 一.深度优先算法 图的深度优先搜索(Depth First Search) ...
- 转换器5:参考Python源码,实现Php代码转Ast并直接运行
前两个周末写了<手写PHP转Python编译器>的词法,语法分析部分,上个周末卡文了. 访问器部分写了两次都不满意,没办法,只好停下来,参考一下Python的实现.我实现的部分正好和Pyt ...
- [Python源码剖析]获取Python小整数集合范围
#!/usr/bin/env python #-*- coding=utf-8 -*- small_ints = dict() for i in range(-10000,10000): small_ ...
- 用Assert(断言)封装异常,让代码更优雅(附项目源码)
有关Assert断言大家并不陌生,我们在做单元测试的时候,看业务事务复合预期,我们可以通过断言来校验,断言常用的方法如下: public class Assert { /** * 结果 = 预期 则正 ...
- 分享linux系统more基本命令python源码
此python源码是linux系统more基本命令的实现. 实现linux中more的基本功能,当more后加一个文件名参数时候,分屏显示按空格换页,按回车换行',在左下角显示百分比; 以处理管道参数 ...
- Python 源码剖析(六)【内存管理机制】
六.内存管理机制 1.内存管理架构 2.小块空间的内存池 3.循环引用的垃圾收集 4.python中的垃圾收集 1.内存管理架构 Python内存管理机制有两套实现,由编译符号PYMALLOC_DEB ...
- python源码书籍
<Python源码剖析>一书现在很难买到,目前大部分都是电子书. 为了更好地利用Python语言,无论是使用Python语言本身,还是将Python与C/C++交互使用,深刻理解Pytho ...
- [python 源码]字符串对象的实现
还是带着问题上路吧,和整数对象的实现同样的问题: >>> a='abc' >>> b='abc' >>> a is b True >> ...
随机推荐
- CodeForces-1278B-A-and-B
题意 对于\(t(1\leq t\leq 100)\)个测试点,给两个数\(a\)和\(b\),作如下操作: 第一次挑一个数使其加\(1\),第二次挑一个数使其加\(2\),以此类推,最后两个数相等, ...
- 文心一言 VS 讯飞星火 VS chatgpt (95)-- 算法导论9.2 4题
四.用go语言,假设用RANDOMIZED-SELECT 去选择数组 A=(3,2,9,0,7,5,4,8,6,1)的最小元素,给出能够导致 RANDOMIZED-SELECT最坏情况发生的一个划分序 ...
- SpringCloud-ZipKin搭建保姆级教程
服务链路追踪 一.服务追踪说明 微服务架构是通过业务来划分服务的,使⽤REST调⽤.对外暴露的⼀个接⼝,可能需要 很多个服务协同才能完成这个接⼝功能,如果链路上任何⼀个服务出现问题或者⽹络超 时,都会 ...
- Mybatis-Plus 系列:简介和基本使用
目录 一.简介 二.特性 三.基本使用 1.初始化数据库 2.初始化工程 3.精简 SpringBoot 相关日志 一.简介 官网:https://www.baomidou.com MyBatis-P ...
- 如何快速找到win10系统中的开机启动文件所在路径
在网站系统开发过程中,我们会遇到一些服务器下线导致的网站无法打开的情况,就需要重启服务器,如果每次手动去操作,实在是很繁琐,所以咱们可以利用开机自启的方式.而要这样设置的话,就需要找到开机自启的目录, ...
- oj练习题 数字 eval 整数 int ???
s = input()if 'hello world!' == s.casefold(): print("Yes")else: print("No") A+B问 ...
- 嵌入式BI的精解与探索
摘要:本文由葡萄城技术团队原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言 1996年,商业智能(BI)的概念首次浮现,随后的20多年间,商 ...
- 若依(ruoyi)开源系统-多数据源问题踩坑实录
内容概要 上一节内容 介绍了用开源系统若依(ruoyi)搭建页面的过程.在实际项目中,经常遇到多数据源后者主从库的情况.本节记录若依多数据源配置过程中遇到的问题排查过程. 背景描述 1.上一节在r ...
- 使用go语言开发hive导出工具
前言 新版 hive 提供了 beeline 工具,可以执行SQL并导出数据,不过操作还是有点复杂的,团队里有些同学不会Linux的基本操作,所以我花了亿点点时间写了个交互式的命令行工具方便使用. 效 ...
- 它让你1小时精通RabbitMQ消息队列、且能扛高并发
支持.Net Core(2.0及以上)与.Net Framework(4.5及以上) 本文所述方案近期被江苏省某亿级数据量+高并发的政府"物联网"项目采用,获得圆满成功!! [目录 ...