【问题标题】:Slow Stochastic Implementation in Python PandasPython Pandas 中的慢速随机实现
【发布时间】:2015-07-27 11:57:47
【问题描述】:

我是 pandas 的新手,我需要一个计算慢速随机变量的函数。我认为应该可以轻松实现,但我对 pandas 中的高级 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 

【问题讨论】:

    标签: numpy pandas matplotlib


    【解决方案1】:

    您可以使用rolling_* 系列函数来做到这一点。

    例如,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)
    

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

    【讨论】:

    • 这些是 pandas 函数而不是 numpy(例如使用 pd)
    • 谢谢阿米,我会尝试上述建议的方式。
    • 为什么是pd.rolling_min(c, 4)pd.rolling_max(c, 4) 而不是pd.rolling_min(c, 14)pd.rolling_max(c, 14)?这只是一个错字还是我遗漏了什么?
    • 顺便说一句,滚动平均值与慢速随机计算无关吗?它只是作为额外的权利添加的吗?
    • @dabadaba 提供滚动平均值用于计算 %D,即 %K 的 3 周期移动平均线
    【解决方案2】:

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

    def simple_moving_average(价格,周期=26): """ :param df: 熊猫数据框对象 :param period: 计算 SMA 的周期 :return: 熊猫系列 """ 权重 = np.repeat(1.0, period)/period sma = np.convolve(价格,权重,“有效”) 返回 sma def fast_stochastic(lowp, highp, closep, period=14, smoothing=3): """ 计算慢速随机 快速随机计算 %K = (当前收盘价 - 最低价)/(最高价 - 最低价) * 100 %D = %K 的 3 天 SMA """ 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, 平滑) 返回 k_fast, d_fast def slow_stochastic(lowp, highp, closep, period=14, smoothing=3): """ 计算慢速随机 慢速随机计算 %K = %D 快速随机 %D = %K 的 3 天 SMA """ k_fast, d_fast = fast_stochastic(lowp, highp, closep, period=period, smoothing=smoothing) # 快速随机中的 D 是慢速随机中的 K k_slow = d_fast d_slow = simple_moving_average(k_slow, 平滑) 返回 k_slow, d_slow

    【讨论】:

      【解决方案3】:

      您可以使用以下简单函数来处理慢速和快速随机指标。

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-26
        • 1970-01-01
        • 2014-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-12
        • 2017-12-11
        相关资源
        最近更新 更多