Numpy Python中缓慢的随机实现

Numpy Python中缓慢的随机实现,numpy,pandas,matplotlib,Numpy,Pandas,Matplotlib,我是新来的熊猫,我需要一个函数来计算慢随机。我认为这应该是可能的,没有太多困难,但我不熟悉熊猫的高级API 我的数据框包含‘开盘’、‘高’、‘低’和‘收盘’价格,并按日期编制索引。这么多的信息应该足以计算慢随机性 Following is the formula for calculating Slow Stochastic: %K = 100[(C - L14)/(H14 - L14)] C = the most recent closing price L14 = the low of

我是新来的熊猫,我需要一个函数来计算慢随机。我认为这应该是可能的,没有太多困难,但我不熟悉熊猫的高级API

我的数据框包含‘开盘’、‘高’、‘低’和‘收盘’价格,并按日期编制索引。这么多的信息应该足以计算慢随机性

Following is the formula for calculating Slow Stochastic:
%K = 100[(C - L14)/(H14 - L14)] 

C = the most recent closing price 
L14 = the low of the 14 previous trading sessions 
H14 = the highest price traded during the same 14-day period.

%D = 3-period moving average of %K 
您可以使用函数族来实现这一点

例如,
100[(C-L14)/(H14-L14)]
可通过以下方式找到:

import pandas as pd

l, h = pd.rolling_min(c, 4), pd.rolling_max(c, 4)
k = 100 * (c - l) / (h - l) 
pd.rolling_mean(k, 3)
滚动平均值可通过以下方式找到:

import pandas as pd

l, h = pd.rolling_min(c, 4), pd.rolling_max(c, 4)
k = 100 * (c - l) / (h - l) 
pd.rolling_mean(k, 3)


此外,如果您对这些东西感兴趣,您可以查看。

我认为我所做的是正确的,请有人验证一下:

def simple_moving_average(prices, period=26): """ :param df: pandas dataframe object :param period: periods for calculating SMA :return: a pandas series """ weights = np.repeat(1.0, period)/period sma = np.convolve(prices, weights, 'valid') return sma def fast_stochastic(lowp, highp, closep, period=14, smoothing=3): """ calculate slow stochastic Fast stochastic calculation %K = (Current Close - Lowest Low)/(Highest High - Lowest Low) * 100 %D = 3-day SMA of %K """ low_min = pd.rolling_min(lowp, period) high_max = pd.rolling_max(highp, period) k_fast = 100 * (closep - low_min)/(high_max - low_min) k_fast = k_fast.dropna() d_fast = simple_moving_average(k_fast, smoothing) return k_fast, d_fast def slow_stochastic(lowp, highp, closep, period=14, smoothing=3): """ calculate slow stochastic Slow stochastic calculation %K = %D of fast stochastic %D = 3-day SMA of %K """ k_fast, d_fast = fast_stochastic(lowp, highp, closep, period=period, smoothing=smoothing) # D in fast stochastic is K in slow stochastic k_slow = d_fast d_slow = simple_moving_average(k_slow, smoothing) return k_slow, d_slow def简单移动平均值(价格,周期=26): """ :param df:dataframe对象 :param period:计算SMA的周期 :return:熊猫系列 """ 权重=np。重复(1.0,周期)/周期 sma=np.卷积(价格、权重、“有效”) 返回sma def fast_随机(低、高、闭、周期=14、平滑=3): “计算慢随机 快速随机计算 %K=(当前收盘-最低低点)/(最高高点-最低低点)*100 %D=3天的%K SMA """ 最低限度=局部放电滚动最低限度(最低限度,周期) 高最大值=局部放电滚动最大值(高最大值,周期) k_fast=100*(闭合-低最小值)/(高最大值-低最小值) k_fast=k_fast.dropna() d_fast=简单移动平均(k_fast,平滑) 快回k_,快回d_ def slow_随机(低、高、闭、周期=14、平滑=3): “计算慢随机 慢随机计算 %快速随机序列的K=%D %D=3天的%K SMA """ k_fast,d_fast=快速随机(低、高、闭、周期=周期、平滑=平滑) #快随机中的D是慢随机中的K k_慢=d_快 d_slow=简单移动平均(k_slow,平滑) 返回k_慢,d_慢
您可以使用下面的简单函数来处理慢随机和快随机

def stochastics( dataframe, low, high, close, k, d ):
    """
    Fast stochastic calculation
    %K = (Current Close - Lowest Low)/
    (Highest High - Lowest Low) * 100
    %D = 3-day SMA of %K

    Slow stochastic calculation
    %K = %D of fast stochastic
    %D = 3-day SMA of %K

    When %K crosses above %D, buy signal 
    When the %K crosses below %D, sell signal
    """

    df = dataframe.copy()

    # Set minimum low and maximum high of the k stoch
    low_min  = df[low].rolling( window = k ).min()
    high_max = df[high].rolling( window = k ).max()

    # Fast Stochastic
    df['k_fast'] = 100 * (df[close] - low_min)/(high_max - low_min)
    df['d_fast'] = df['k_fast'].rolling(window = d).mean()

    # Slow Stochastic
    df['k_slow'] = df["d_fast"]
    df['d_slow'] = df['k_slow'].rolling(window = d).mean()

    return df


stochs = stochastics( df, 'Low', 'High', 'Close', 14, 3 )
slow_k = stochs['k_slow'].values
fast_k = stochs['k_fats'].values

这些函数不是numpy(例如使用pd)谢谢Ami,我将尝试上面建议的方法。为什么
pd.rolling\u min(c,4)
pd.rolling\u max(c,4)
而不是
pd.rolling\u min(c,14)
pd.rolling\u max(c,14)
?这只是一个输入错误还是我遗漏了什么?顺便说一句,滚动平均值与缓慢的随机计算无关,是吗?它只是作为额外的权利添加?@dabadaba滚动平均值用于计算%D,即%K的三期移动平均值