问财量化选股策略逻辑
本选股策略选取振幅大于1、下午大单净流入和非ST及10点之前选股的股票,同时采用五部涨停战法作为选股指标,选取结果中的个股作为投资标的。
选股逻辑分析
本选股策略着重追踪股票的交易量,振幅和停牌等指标。选股时,振幅大于1的条件是挑选波动性较高的股票,下午大单净流入表明股票有资金流入的原因。同时,选取非ST或10点之前选股的股票,剔除风险较高的ST股票和可能已经有人抬头的股票,减小风险。五部涨停策略是指根据股票涨幅,每涨1%就加仓一次,最多五次,直到涨停。这个策略适用于较高的偏向大涨的市场。
有何风险?
本策略忽略了公司的基本面,未考虑股票的内在价值等方面,风险偏高。同时,五部涨停战法适用于剧烈的市场波动,不适用于稳健但变化较小的市场。
如何优化?
可以加入其他指标,例如市盈率或市净率等,以更全面的方式进行筛选。或者通过深入分析股票的基本面、行业背景和公司经营优劣来对选股策略进行更多改进。
最终的选股逻辑
本选股策略选取振幅大于1、下午大单净流入和非ST及10点之前选股的股票,同时采用五部涨停战法作为选股指标,选取结果中的个股作为投资标的。
同花顺指标公式代码参考
振幅大于1: ABS((HIGH-LOW)/PRE_CLOSE) > 0.01
下午大单净流入: C - O > (0.005 * V - MA(V, 3)) / 10000
非ST及10点之前选股: SELECTEDDAY(NDAY)>0 AND NOT ISST()
五部涨停战法: REF(BARS_HL, 1) < ATTR(BARS_HL, 1).LIMITDOWN AND CROSS(BARS_CLOSE, MA(21*(1+0.01^{0.5}), 1)) = 1
python代码参考
# 引入Tushare库、Numpy库、Pandas库
import tushare as ts
import numpy as np
import pandas as pd
# 连接Tushare库
pro = ts.pro_api()
def select_stocks(n):
selected_stocks = []
selected_scores = []
# 全部股票
all_stocks = pro.stock_basic(exchange='', list_status='L', fields='ts_code')
for ts_code in all_stocks["ts_code"]:
# 获取股票数据
k_data = pro.klines(ts_code=ts_code, start_date='1 year ago', end_date='today', freq='D')
quote_data = pro.query('daily', ts_code=ts_code, start_date='1 year ago', end_date='today')
pub_data = pro.query('top10_holders', ts_code=ts_code, start_date='', end_date='')
score = (ABS((k_data["high"] - k_data["low"]) / k_data["pre_close"]) > 0.01).all() and (quote_data["close"] - quote_data["open"] > (0.005 * quote_data["vol"] - MA(quote_data["vol"],3))/10000).all() and SELECTEDDAY(NDAY)>0 AND NOT ISST()
if score:
bars = HLCVBars(k_data)
five_bar_score = FiveBarsRiseAndLimitDown(bars)
if five_bar_score >= 5:
selected_stocks.append(ts_code)
selected_scores.append(five_bar_score)
if len(selected_stocks) == n:
break
# 返回涨幅最高的n只股票
sorted_stocks = [x for _, x in sorted(zip(selected_scores,selected_stocks),reverse=True)]
return sorted_stocks
# 帮助函数: 把日K数据转为HLCV格式
def HLCVBars(k_data):
return pd.DataFrame(data={
"high": k_data["high"].values,
"low": k_data["low"].values,
"close": k_data["close"].values,
"volume": k_data["amount"].values / 10000
}, index=k_data["trade_date"].apply(pd.to_datetime))
# 帮助函数: 判断是否五部涨停
def FiveBarsRiseAndLimitDown(bars):
try:
raise_amounts = []
for i in range(5):
raise_amounts.append((bars["close"][i + 1] - bars["open"][i]) / bars["open"][i])
if all(np.array(raise_amounts) > 0):
if (HIGHEST(bars["high"], 5) == bars["current_high"]).all():
return 5
elif (HIGHEST(bars["high"], 4) == bars["current_high"][1:]).all():
return 4
elif (HIGHEST(bars["high"], 3) == bars["current_high"][2:]).all():
return 3
elif (HIGHEST(bars["high"], 2) == bars["current_high"][3:]).all():
return 2
elif (HIGHEST(bars["high"], 1) == bars["current_high"][4:]).all():
return 1
except:
pass
return 0
## 如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。
