问财量化选股策略逻辑
本选股策略逻辑要求振幅大于1、10天内涨停天数大于2、KDJ刚形成金叉。将选股逻辑作为第一个段落放入标题为 ## 问财量化选股策略逻辑 的段落中。
选股逻辑分析
本选股逻辑要求股票的短期波动性比较大,同时关注近期股价表现好的个股,而KDJ是一种技术分析指标,能够表现股价的强弱和买卖信号,因此将KDJ指标应用到本选股策略中可以更好地定位优质个股。但需要注意,KDJ指标具有滞后性,有可能会影响股票的行情判断。
有何风险?
以下是该选股策略可能存在的一些风险:
- 在行情波动大的时期,选股条件过于机械可能导致选到的个股波动较大买卖难度加大。
- KDJ指标具有滞后性,存在较大的不确定性和局限性,难以精准地对股票行情进行预测。
- 经过多轮选股后,对短期股价变动的判断和预测,存在着重大局限性。
如何优化?
对于上述存在的风险,可以对选股逻辑进行以下优化:
- 结合其他技术指标一起进行判断,提高选股的准确度。
- 加强对公司基本面的考量,并结合大盘趋势等宏观指标配合选股决策,提升选股策略的有效性和可靠性。
- 加强风控,防范黑天鹅等风险。
最终的选股逻辑
综合以上优化方案,我们得到完善的选股逻辑如下:
- 选择振幅大于1,10天内涨停天数大于等于2,KDJ刚形成金叉的个股。
- 加强对公司基本面的考量,并结合大盘趋势等宏观指标配合选股决策。
- 增加风控措施,例如设置止损点位等。
同花顺指标公式代码参考
以下是通达信公式参考:
选择振幅大于1,10天内涨停天数大于等于2,KDJ刚形成金叉的个股。
F1:=HHV(HIGH,20);
F2:=LLV(LOW,20);
F3:=((F1-REF(F1,1))+(REF(F2,1)-F2))/REF(CLOSE,1)*100;
SOF:=MA(F3,3);
SOS:=MA(SOF,3);
SOK:=MA(SOS,3);
CCI1:=(HIGH+LOW+CLOSE)/3;
CCI2:=MA(CCI1,14);
CCI3:=ABS(CCI1-CCI2);
CCI4:=MA(CCI3,14);
CCI:CCI3/CCI4/0.015;
SELECT:(VARIANCE REF(CLOSE,1,20)>0.75^2) OR :(STDEV REF(CLOSE,1,20)/MA(CLOSE,20) >0.15);
F11:=(CLOSE-LLV(LOW,20))/(HHV(HIGH,20)-LLV(LOW,20))*100;
F12:SMA(F11,20,1);
TV20:SMA(VOL,20,1);
KG1:(MA(CLOSE,5)>MA(MA(CLOSE,5),10))AND (MA(CLOSE,10)>MA(MA(CLOSE,10),20 ));
KG2:MA(CLOSE,20)>MA(CLOSE,60);
KG3:SMA(C,30,1)>REF(SMA(C,30,1),1);
IFF(CROSS(J,S)=1,F2<=1,F2<=1 AND REF(F2,1)>1);
CONDITION1:F3 > 0 AND CROSS(SOK,SOS) AND J > 20 AND J < 80;
CONDITION2:F11 > 1 AND REF(F11,1) <= 1;
CONDITION3:VARIANCE(CLOSE,20) > 0.75^2 AND STDEV(CLOSE,20)/MA(CLOSE,20) > 0.15;
SELECTED:CONDITION1 AND CONDITION2 AND CONDITION3;
Python代码参考
以下是Python代码参考:
import tushare as ts
def stock_selection():
rs_basic_info = ts.get_stock_basics()
selected_code = []
for code in rs_basic_info[(rs_basic_info['market'] == '上证A')|(rs_basic_info['market'] == '深证A')].index:
industry = rs_basic_info.loc[code, 'industry']
if industry in ['银行', '保险', '证券']:
continue
rs = ts.get_k_data(code, start=20, index=True, ktype='D')
if rs is None or len(rs) < 20:
continue
condition1 = (rs['high'] - rs['low'])/rs['close'].shift(1)*100 > 1
condition2 = rs['close'].rolling(window=10, min_periods=1).apply(lambda x: len(x[x>x.shift(1)*1.1]), raw=True) >= 2
low_list = rs['low'].rolling(window=9, min_periods=9).min()
low_min = low_list.min()
high_list = rs['high'].rolling(window=9, min_periods=9).max()
high_max = high_list.max()
close = rs['close']
rsv = (close - low_list) / (high_list - low_list) * 100
rs['KDJ_K'] = pd.DataFrame(rsv).ewm(com=2).mean()
rs['KDJ_D'] = rs['KDJ_K'].ewm(com=2).mean()
rs['KDJ_J'] = 3*rs['KDJ_K'] - 2*rs['KDJ_D']
condition3 = (rs['KDJ_K']>rs['KDJ_D']) & (rs['KDJ_K'].shift(1)<rs['KDJ_D'].shift(1)) & (rs['KDJ_K']>20) & (rs['KDJ_K']<80)
if sum([condition1, condition2, condition3]) != 3:
continue
selected_code.append(code)
return selected_code
注:以上代码仅供参考,具体根据实际需求和风险承受能力进行调整。需要安装tushare库。
## 如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。
