Python股票量化,计算MACD、KDJ、RSI

在前面的文章中讲了量化环境和MACD计算,本文讲KDJ。对于股票技术指数,个人认为KDJ、MACD、RSI足够了,这些技术指标的核心是均线的变种计算。

直接上KDJ代码,Python版本:

#n:KDJ指标的周期,通常设置为9
#m1:D值的平滑周期,通常设置为3
#m2:J值的平滑周期
def st_kdj(code,n = 9 ,m1 = 3 ,m2 = 3):

    #将股票行情转换为DataFrame
    data = clh2df(code)

    # 计算 N 周期内的最低价 LLV 和最高价 HHV
    Low_n = data['Low'].rolling(n, min_periods=1).min()
    Hign_n = data['High'].rolling(n, min_periods=1).max()

    RSV = (data['Close'] - Low_n) / (Hign_n - Low_n) * 100

    #K值,使用指数加权移动平均 (EWMA)
    K = RSV.ewm(alpha=1/m1, adjust=False).mean()

    #D值,使用指数加权移动平均 (EWMA)
    D = K.ewm(alpha=1/m2, adjust=False).mean()

    J = 3 * K - 2 * D

    # 将计算出的 K, D, 和 J 值添加到 DataFrame
    data['K'] = K;data['D'] = D;data['J'] = J

    print(data[['Turn','Close', 'K', 'D', 'J']])

    return data[-100:]

量化计算的输入数据类型是DataFrame,在线接口的行情一般是DataFrame。因为我是调用本地行情,先将列表转换为DF。

#股票close,low,high转为DataFrame
#close_vol=3表示收盘价,6表示成交量
#体验链接:http://101.35.10.13/q
def clh2df(code,close_vol = 3):

    #日期,股票代码,名称,收盘价,涨跌幅,换手率,成交量,成交金额,最低价,最高价,开盘价,前收盘
    info = getOneStockInfo(code)
    info.reverse()

    high = [i[9] for i in info]
    low = [i[8] for i in info]
    close = [i[close_vol] for i in info]
    turn = [i[5] for i in info]

    dates = [i[0] for i in info]

    data_dict = {
        'High': high,
        'Low': low,
        'Close': close,
        'Turn':turn
    }

    df = pd.DataFrame(data_dict)

    df['Date'] = pd.to_datetime(dates)  # 将日期列表转换为datetime类型,并添加为新列
    df.set_index('Date', inplace=True)  # 将日期列设置为DataFrame的索引

    return df

结果,以下是中国联通的KDJ数据和股票软件上的对比:

每日KDJ数据跟股票软件上略有差异,但趋势一样,近期11月7日KDJ最大,11月12日最小。这是可接受的,不追求数值跟股票软件一样,最重要的是趋势。

下一篇讲RSI。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值