2017-02-08 3 views
-1

私は以下のコードを小さな問題として扱っています。それは完璧に動作しますが、私によって書かれたものではなく、理解できない部分もあります。私の頭の中では、私は& rstdをget_rolling_mean()get_rolling_std()から返す必要がありますが、実際には起こっていません。だから私の質問は:私はそれが動作することを知っているが、どのように動作するのですか?Pythonのボリンジャーバンド。 rmとrstdは以下のコードでどのように定義されますか?

get_bollinger_bands(rm, rstd)変数のrmとrstdの値はどこから得られますか?

"""Bollinger Bands.""" 

import os 
import pandas as pd 
import matplotlib.pyplot as plt 


def symbol_to_path(symbol, base_dir="data"): 
    """Return CSV file path given ticker symbol.""" 
    return os.path.join(base_dir, "{}.csv".format(str(symbol))) 


def get_data(symbols, dates): 
    """Read stock data (adjusted close) for given symbols from CSV files.""" 
    df = pd.DataFrame(index=dates) 
    if 'SPY' not in symbols: # add SPY for reference, if absent 
     symbols.insert(0, 'SPY') 

    for symbol in symbols: 
     df_temp = pd.read_csv(symbol_to_path(symbol), index_col='Date', 
           parse_dates=True, usecols=['Date', 'Adj Close'], na_values=['nan']) 
     df_temp = df_temp.rename(columns={'Adj Close': symbol}) 
     df = df.join(df_temp) 
     if symbol == 'SPY': # drop dates SPY did not trade 
      df = df.dropna(subset=["SPY"]) 

    return df 


def plot_data(df, title="Stock prices"): 
    """Plot stock prices with a custom title and meaningful axis labels.""" 
    ax = df.plot(title=title, fontsize=12) 
    ax.set_xlabel("Date") 
    ax.set_ylabel("Price") 
    plt.show() 


def get_rolling_mean(values, window): 
    """Return rolling mean of given values, using specified window size.""" 
    return pd.rolling_mean(values, window=window) 


def get_rolling_std(values, window): 
    """Return rolling standard deviation of given values, using specified window size.""" 
    return pd.rolling_std(values, window=window) 


def get_bollinger_bands(rm, rstd): 
    """Return upper and lower Bollinger Bands.""" 
    upper_band = rm + (rstd * 2) 
    lower_band = rm - (rstd * 2) 
    return upper_band, lower_band 


def test_run(): 
    # Read data 
    dates = pd.date_range('2012-01-01', '2012-12-31') 
    symbols = ['SPY'] 
    df = get_data(symbols, dates) 

    # Compute Bollinger Bands 
    # 1. Compute rolling mean 
    rm_SPY = get_rolling_mean(df['SPY'], window=20) 

    # 2. Compute rolling standard deviation 
    rstd_SPY = get_rolling_std(df['SPY'], window=20) 

    # 3. Compute upper and lower bands 
    upper_band, lower_band = get_bollinger_bands(rm_SPY, rstd_SPY) 

    # Plot raw SPY values, rolling mean and Bollinger Bands 
    ax = df['SPY'].plot(title="Bollinger Bands", label='SPY') 
    rm_SPY.plot(label='Rolling mean', ax=ax) 
    upper_band.plot(label='upper band', ax=ax) 
    lower_band.plot(label='lower band', ax=ax) 

    # Add axis labels and legend 
    ax.set_xlabel("Date") 
    ax.set_ylabel("Price") 
    ax.legend(loc='upper left') 
    plt.show() 


if __name__ == "__main__": 
    test_run() 

答えて

2

取得rollingerバンド機能は、ユーザからその変数を取得します。使用

get_bollinger_bands(rm, rstd): 
     upper_band = rm + (rstd * 2) 
     lower_band = rm - (rstd * 2) 
     return upper_band, lower_band 

唯一の変数は、関数名の後の括弧の間のものです。これは、それらがユーザーによって帰属されることを意味します。

def get_rolling_mean(values, window): 
    return pd.rolling_mean(values, window=window) 
def get_rolling_std(values, window): 
    return pd.rolling_std(values, window=window) 

函数がローリング平均値を取得し、両方が2つのimputs使用はstd:値(別名X = 1,2,3及びy = 2,3,4)と窓(観察の量で含まれるのhttp://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.rolling_mean.html

とウィキペディア(同じことを意味し、圧延し、移動平均です):https://en.wikipedia.org/wiki/Moving_average

ローリング平均)追加情報については

私はドキュメントをお勧めします

関連する問題