问财量化选股策略逻辑
选股逻辑为:振幅大于1、按个股热度从大到小排序、500日内至少2次涨停。将选股逻辑作为第一个标题放入段落中。
选股逻辑分析
该选股策略的逻辑如下:
- 振幅大于1: 表示该股票交易活跃度较高;
- 按照个股热度进行排序:表示在符合条件下按照市场的热度进行排序,选择市场认可度高的个股;
- 500日内至少2次涨停:表示需选择近期市场表现好、具有热度的股票。
基于以上条件选股,可以筛选出市场认可度高、股票交易活跃度高、市场表现好、近期具有热度的个股,辅助投资决策。
有何风险?
该选股策略可能存在以下风险:
- 个股热度指标可能会受到市场情绪和投资者心理因素的影响,可能存在人为炒作、市场异常波动等风险;
- 策略选取的涨停次数较多,可能会忽略其他市场表现好但涨停次数较少的个股;
- 盲目追求涨停股票,可能忽略了股票的基本面面和长期价值潜力。
如何优化?
为了提高选股的准确性和降低风险,可以从以下方面进行优化:
- 在考察近期市场表现的基础上,综合考虑公司财务数据、业绩情况等基本面数据,建立更符合实际的选股模型;
- 在考察个股热度时,除了考虑市场情绪因素,还应考虑公司的真实情况,通过资讯平台了解公司的业务、发展、产品等情况;
- 不必过分追求次数指标,可以结合其他指标如“涨幅”、“换手率”等,综合判断个股市场表现。
最终的选股逻辑
综合以上分析和优化,我们最终的选股逻辑为:
在符合振幅大于1、按个股热度从大到小排序、500日内至少2次涨停等综合条件下,同时考虑股票基本面数据、公司发展情况等因素,综合分析选出符合条件的个股,并进行相应的持有操作。在操作上,考虑到市场波动,进行定期的卖出操作,并及时调整策略,避免风险。
同花顺指标公式代码参考
该策略可引入以下指标进行辅助分析:
- 振幅指标:
振幅:
((HIGH-LOW)/REF(CLOSE,1))>0.01
- 个股热度指标:
个股热度指标:
SORT_BY_DESC(stock_heat/)
- 涨停指标:
涨停指标:
COUNT(CLOSE==REF(HIGH,1), 500)>=2
python代码参考
以下是使用Python进行选股的代码实现示例:
import pandas as pd
import tushare as ts
from pyecharts.charts import *
from pyecharts.options import *
import talib
# 获取符合条件的股票代码
def get_selected_codes():
codes = ts.get_today_all()["code"].tolist()
selected_codes = []
for code in codes:
df = ts.get_stock_basics()
name = df.loc[code]["name"]
if code.startswith("ST"):
continue
df_daily = ts.get_hist_data(code)
if df_daily.empty or (len(df_daily) < 252):
continue
if (df_daily.iloc[-1]["high"] - df_daily.iloc[-1]["low"]) / df_daily.iloc[-1]["open"] > 0.01:
df_gzxg = ts.get_today_all()
yesterday_close = df_gzxg[df_gzxg["code"] == code]["settlement"].values[0]
if ((df_daily.iloc[-2]["high"] > yesterday_close * 1.098) or (df_daily.iloc[-2]["low"] < yesterday_close)):
continue
df_daily["is_limit_up"] = df_daily["close"] == df_daily["high"].shift(1)
if df_daily["is_limit_up"].rolling(window=500, min_periods=2).sum().iloc[-1] < 2:
continue
df_tick = ts.get_today_ticks(code)
if df_tick.empty:
continue
sum_buy_large = df_tick.loc[(df_tick["type"] == "买盘") & (df_tick["amount"] > 100000)].sum()["amount"]
sum_sell_large = df_tick.loc[(df_tick["type"] == "卖盘") & (df_tick["amount"] > 100000)].sum()["amount"]
if (sum_buy_large - sum_sell_large) > (sum_buy_large + sum_sell_large) * 0.05:
selected_codes.append(code)
stock_heat_dict = {}
for code in selected_codes:
df = ts.get_realtime_quotes(code)
stock_heat = int(df["volume"]) * float(df["price"])
stock_heat_dict[code] = stock_heat
sorted_stock_heat = sorted(stock_heat_dict.items(), key=lambda x: x[1], reverse=True)
selected_codes = [x[0] for x in sorted_stock_heat[:100]]
return selected_codes
# 获取股票基本面数据
def get_stocks_info(codes):
info_dict = {}
for code in codes:
df = ts.get_stock_basics()
name = df.loc[code]["name"]
info_dict[name] = {
"industry": df.loc[code]["industry"],
"area": df.loc[code]["area"],
"pe": df.loc[code]["pe"],
"pb": df.loc[code]["pb"]
}
return info_dict
# 选股策略
def stock_selection():
selected_codes = get_selected_codes()
selected_info = get_stocks_info(selected_codes)
return selected_info
# 可视化展示
def show(selected_info):
data = []
for name, info in selected_info.items():
data.append((name, info["industry"], info["area"], info["pe"], info["pb"]))
# 绘制表格
chart = (
Table()
.add(headers=["股票名称", "行业", "地区", "市盈率", "市净率"], rows=data)
.set_global_opts(title_opts=opts.ComponentTitleOpts(title="股票挑选结果"))
)
return chart
# 选出符合条件的股票
selected_info = stock_selection()
print("符合条件的股票:", selected_info)
# 展示结果
chart = show(selected_info)
chart.render()
其中,在代码中需要根据实际需求进行相应的设置。
## 如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。
