需要帮助?

试试AI小助手吧

(supermind量化策略)task17/a/换手率3%-12%、饮料酒进出口、KDJ刚

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

问财量化选股策略逻辑

选股逻辑为:选择换手率在3%-12%、饮料酒进出口、KDJ指标形成金叉。

选股逻辑分析

该选股策略主要依据了股票的交易量、行业分类和技术分析指标,包括KDJ指标形成金叉。这些指标有助于找到具备强劲热度和良好技术面的股票。

有何风险?

该选股策略只考虑了KDJ指标形成金叉,没有考虑其他技术指标和基本面因素的影响。同时,KDJ指标易受市场干扰,对于短期交易来说,该指标的可信度较低。

如何优化?

应该结合其他技术指标,如MACD、RSI等指标,以及基本面因素,如PE、PB、ROE等指标,制定更为准确的选股策略,从而提高选股的准确性和投资收益率。

最终的选股逻辑

选择换手率在3%-12%、饮料酒进出口、KDJ指标形成金叉。

同花顺指标公式代码参考

换手率在3%-12%:SELECT(TURN<N>=AVG(TURN, N) AND TURN<N+1>AVG(TURN, N+1) AND TURN<N>3 AND TURN<N<12)
饮料酒进出口:SELECT(SECTOR('K40')=1)
KDJ指标形成金叉:SELECT(CROSS(KDJ(9, 3, 3).J, KDJ(9, 3, 3).K) AND CROSS(KDJ(9, 3, 3).K, KDJ(9, 3, 3).D))
选股:SELECT(CODE AND 换手率3%-12% AND 饮料酒进出口 AND KDJ指标形成金叉)

python代码参考

import pandas as pd
import tushare as ts
from pyecharts import options as opts
from pyecharts.charts import Kline

def select_stocks():
    pro = ts.pro_api()
    df1 = pro.stock_basic(exchange='SZSE', list_status='L', fields='ts_code,industry,name')
    df1 = df1[(df1['industry'].str.contains('饮料') & df1['industry'].str.contains('酒'))]
    df2 = pro.daily(trade_date='20220114', fields='ts_code,open,close,low,high')
    df2 = df2[df2['ts_code'].isin(df1['ts_code'].tolist())]
    for code in df2['ts_code']:
        df2.loc[df2['ts_code'] == code, 'kdj'] = kdj(df2[df2['ts_code'] == code])
    df2 = df2[df2['kdj'] == 'J金叉']
    df2 = df2[(df2['high'] != df2['low']) & (df2['open'] != df2['close'])]
    df3 = pro.trade_cal(exchange='', start_date='20220101', end_date='20221014', fields='cal_date,is_open')
    df3 = df3[df3['is_open'] == 1]
    cal_date = df3.iloc[-2]['cal_date']  # 获取昨日交易日
    df4 = pro.top_list(trade_date=cal_date, fields='ts_code,buy_amount,sell_amount,net_amount,turnover_rate,buy_reason,sell_reason')  # 获取昨日龙虎榜
    df4 = df4[(df4['buy_reason'] > 0) & (df4['turnover_rate'] > 3) & (df4['net_amount'] > 0)]
    df4['zdf'] = (df4['buy_amount'] - df4['sell_amount']) / df4['buy_amount'] * 100
    df5 = pro.daily(trade_date=cal_date, fields='ts_code,turnover_rate')
    df5 = df5[(df5['turnover_rate'] >= 3) & (df5['turnover_rate'] <= 12)]
    df = pd.merge(df2, df1, on='ts_code')
    df = pd.merge(df, df4, on='ts_code')
    df = pd.merge(df, df5, on='ts_code')
    df = df[df['name'].str.contains('ST') == False]
    return df['ts_code']

def kdj(df):
    a = df['low'].rolling(window=9).min()
    b = df['high'].rolling(window=9).max()
    rsv = (df['close'] - a) / (b - a) * 100
    df['k'] = rsv.ewm(com=2).mean()
    df['d'] = df['k'].ewm(com=2).mean()
    df['j'] = 3 * df['k'] - 2 * df['d']
    if df.iloc[-1]['j'] > df.iloc[-1]['k'] and df.iloc[-2]['j'] < df.iloc[-2]['k']:
        return 'J金叉'
    else:
        return ''

# 以K线图形式展示选股股票价格走势和KDJ指标变化
def plot_kdj(df, code):
    title = f'{code} K线图及KDJ指标变化'
    kline = Kline(title)
    kline.add_xaxis(df.index.format())
    kline.add_yaxis("", df[['open', 'close', 'low', 'high']].values.tolist(),
                    itemstyle_opts=opts.ItemStyleOpts(color="#ef232a",
                                                      color0="#14b143",
                                                      border_color="#ef232a",
                                                      border_color0="#14b143",
                                                      )),
    kline.set_global_opts(title_opts=opts.TitleOpts(title=title),
                          yaxis_opts=opts.AxisOpts(is_scale=True),
                          xaxis_opts=opts.AxisOpts(is_scale=True,
                                                  is_show=False,
                                                  is_clip=True,
                                                  ),
                          # 隐藏上方时间轴
                          brush_opts=opts.BrushOpts(x_axis_index=[0, 1],
                                                    brush_link="all",
                                                    out_of_brush={"colorAlpha": 0.1},
                                                    ),
                          legend_opts=opts.LegendOpts(is_show=False),
                          )
    # 绘制KDJ线
    line_k = [i for i in zip(df.index.format(), df['k'].tolist())]
    kline.add_yaxis('K', line_k,
                    markline_opts=opts.MarkLineOpts(
                        data=[opts.MarkLineItem(type_="average", name="MA_line")]
                    ))
    line_d = [i for i in zip(df.index.format(), df['d'].tolist())]
    kline.add_yaxis('D', line_d,
                    markline_opts=opts.MarkLineOpts(
                        data=[opts.MarkLineItem(type_="average", name="MA_line")]
                    ))
    line_j = [i for i in zip(df.index.format(), df['j'].tolist())]
    kline.add_yaxis('J', line_j,
                    markline_opts=opts.MarkLineOpts(
                        data=[opts.MarkLineItem(type_="average", name="MA_line")]
                    ))
    kline.render(f'{title}.html')
    ## 如何进行量化策略实盘?
    请把您优化好的选股语句放入文章最下面模板的选股语句中即可。

    select_sentence = '市值小于100亿' #选股语句。

    模板如何使用?

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


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

评论