(iwencai量化策略)KDJ刚形成金叉_、10天内涨停天数大于2、振幅大于1

用户头像神盾局量子研究部
2023-08-31 发布

问财量化选股策略逻辑

本选股策略逻辑要求振幅大于1、10天内涨停天数大于2、KDJ刚形成金叉。将选股逻辑作为第一个段落放入标题为 ## 问财量化选股策略逻辑 的段落中。

选股逻辑分析

本选股逻辑要求股票的短期波动性比较大,同时关注近期股价表现好的个股,而KDJ是一种技术分析指标,能够表现股价的强弱和买卖信号,因此将KDJ指标应用到本选股策略中可以更好地定位优质个股。但需要注意,KDJ指标具有滞后性,有可能会影响股票的行情判断。

有何风险?

以下是该选股策略可能存在的一些风险:

  1. 在行情波动大的时期,选股条件过于机械可能导致选到的个股波动较大买卖难度加大。
  2. KDJ指标具有滞后性,存在较大的不确定性和局限性,难以精准地对股票行情进行预测。
  3. 经过多轮选股后,对短期股价变动的判断和预测,存在着重大局限性。

如何优化?

对于上述存在的风险,可以对选股逻辑进行以下优化:

  1. 结合其他技术指标一起进行判断,提高选股的准确度。
  2. 加强对公司基本面的考量,并结合大盘趋势等宏观指标配合选股决策,提升选股策略的有效性和可靠性。
  3. 加强风控,防范黑天鹅等风险。

最终的选股逻辑

综合以上优化方案,我们得到完善的选股逻辑如下:

  1. 选择振幅大于1,10天内涨停天数大于等于2,KDJ刚形成金叉的个股。
  2. 加强对公司基本面的考量,并结合大盘趋势等宏观指标配合选股决策。
  3. 增加风控措施,例如设置止损点位等。

同花顺指标公式代码参考

以下是通达信公式参考:

选择振幅大于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亿' #选股语句。

    模板如何使用?

    点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。


    ## 如果有任何问题请添加 下方的二维码进群提问。
    ![94c5cde12014f99e262a302741275d05.png](http://u.thsi.cn/imgsrc/pefile/94c5cde12014f99e262a302741275d05.png)
收益&风险
源码

评论