Pythonのpytiを徹底解明!pytiを使ってチャート分析のインジケーターを作成

スポンサーリンク

Pythonのライブラリpytiはチャート分析に必要なインジケーターを作成することができます。
そのpytiに用意されているインジゲーターはメジャーなものからマイナーなものまで数多くありますが徹底解明します。

  1. はじめに
    1. 公式サイト
  2. pytiのインジケーターの一覧
  3. 各種インジケータ(モジュール)の使い方
    1. A/D(蓄積/配信)Accumulation/Distribution
    2. アルーン(Aroon)
    3. ATR(Average True Range
    4. ATRP(Average True Range Percent
    5. ボリンジャーバンド(Bollinger Bands)
    6. CMF(チャイキン・マネーフロー)Chaikin Money Flow
    7. CMO(シャンデ・モメンタム・オシレーター)Chande Momentum Oscillator
    8. CCI(商品チャンネル指数)Commodity Channel Index
    9. DPO(トレンド除去プライスオシレーター)Detrended Price Oscillator
    10. DMI(Directional Movement Index
    11. DEMA(2重指数移動平均)Double Exponential Moving Average
    12. DSS(2重平滑化確率)Double Smoothed Stochastic
    13. EMA(指数平滑移動平均線)Exponential Moving Average
    14. HMA(ハル移動平均線)Hull Moving Average
    15. 一目均衡表(Ichimoku Cloud)
    16. ケルトナーバンド(Keltner Bands)
    17. LWMA(線形加重移動平均)Linear Weighted Moving Average
    18. Momentum(モメンタム)
    19. MF(マネー・フロー)Money Flow
    20. MFI(マネー・フロー・インデックス)Money Flow Index
    21. MACD(マックディー)Moving Average Convergence Divergence
    22. MAE(エンベロープ)Moving Average Envelope
    23. OBV(オン・バランス・ボリューム)On Balance Volume
    24. プライスチャネル(Price Channels)
    25. PPO(プライスオシレーター)Price Oscillator
    26. ROC(変化率)Rate of Change
    27. RSI(相対力指数)Relative Strength Index
    28. SMA(単純移動平均)Simple Moving Average
    29. SMMA(平滑移動平均)Smoothed Moving Average
    30. SD(標準偏差)Standard Deviation
    31. SV(分散)Standard Variance
    32. ストキャスティクス(Stochastic)
    33. ストキャスティクス RSI(StochRSI)
    34. TMA(三角移動平均)Triangular Moving Average
    35. TEMA(3重指数移動平均)Triple Exponential Moving Average
    36. TR(トゥルー レンジ)True Range
    37. TP(Typical Price)
    38. UO(アルティメット・オシレーター)Ultimate Oscillator
    39. VHF(Vertical Horizontal Filter)
    40. ボラティリティー(Volatility)
    41. VAMA(出来高調整済み移動平均線)Volume Adjusted Moving Average
    42. VI(ボリューム・インデックス)Volume Index
    43. ボリューム・オシレーター(Volume Oscillator)
    44. WMA(加重移動平均線)Weighted Moving Average
    45. ウィリアムズ%R(Williams %R)
スポンサーリンク

はじめに

pytiは標準ライブラリではありませんので、インストールが必要です。

pip install pyti

公式サイト

GitHub - kylejusticemagnuson/pyti: Python library of various financial technical indicators
Python library of various financial technical indicators - GitHub - kylejusticemagnuson/pyti: Python library of various financial technical indicators

pytiのインジケーターの一覧

バージョン:pyti 0.2.2

以下は、モジュールのアルファベット順になっています。

インジケーターの種類日本語名値の種類タイプ
Accumulation/DistributionA/DウィリアムズA/D(蓄積/配信)オシレーター系
AroonアルーンAroon Upオシレーター系
Aroon Down
Average True RangeATRATRオシレーター系
Average True Range PercentATRPATRPオシレーター系
Bollinger BandsボリンジャーバンドUpper Bollinger Bandオシレーター系
Middle Bollinger Band
Lower Bollinger Band
Bandwidth
Percent Bandwidth
Range
%B
Chaikin Money FlowCMFチャイキン・マネーフローオシレーター系
Chande Momentum OscillatorCMOシャンデ・モメンタム・オシレーターオシレーター系
Commodity Channel IndexCCI商品チャンネル指数オシレーター系
Detrended Price OscillatorDPOトレンド除去プライスオシレーターオシレーター系
Directional IndexDMIDMINegative Directional Index (-DI)トレンド系
Positive Directional Index (+DI)
Negative Directional Movement (-DM)
Positive Directional Movement (+DM)
Average Directional Index(ADX)
Double Exponential Moving AverageDEMA2重指数移動平均トレンド系
Double Smoothed StochasticDSS2重平滑化確率オシレーター系
Exponential Moving AverageEMA指数平滑移動平均線トレンド系
Hull Moving AverageHMAハル移動平均線トレンド系
Ichimoku Cloud一目均衡表TenkanSenトレンド系
KijunSen
Chiku Span
Senkou A
Senkou B
Keltner BandsケルトナーバンドBandwidthオシレーター系
Center Band
Upper Band
Lower Band
Linear Weighted Moving AverageLWMA線形加重移動平均トレンド系
Momentumモメンタムオシレーター系
Money FlowMFマネー・フロー
Money Flow IndexMFIマネー・フロー・インデックスオシレーター系
Moving Average Convergence DivergenceMACDMACD(マックディー)オシレーター系
Moving Average EnvelopeMAEエンベロープUpper Bandトレンド系
Center Band
Lower Band
On Balance VolumeOBVオン・バランス・ボリュームトレンド系
Price ChannelsプライスチャネルUpper Price Channelトレンド系?
Lower Price Channel
Price OscillatorPPOプライスオシレーターオシレーター系
Rate of ChangeROC変化率オシレーター系
Relative Strength IndexRSIRSI(相対力指数)オシレーター系
Simple Moving AverageSMA単純移動平均トレンド系
Smoothed Moving AverageSMMA平滑移動平均トレンド系
Standard DeviationSD標準偏差その他
Standard VarianceSV分散その他
Stochasticストキャスティクス%Kオシレーター系
%D
StochRSIストキャスティクス RSIオシレーター系
Triangular Moving AverageTMA三角移動平均トレンド系
Triple Exponential Moving AverageTEMA3重指数移動平均トレンド系
True RangeTRトゥルー レンジその他
Typical PriceTPその他
Ultimate OscillatorUOSアルティメット・オシレーターオシレーター系
Vertical Horizontal FilterVHFVHFオシレーター系
Volatilityボラティリティーその他
Volume Adjusted Moving AverageVAMA出来高調整済み移動平均線トレンド系
Volume IndexPVIポジティブ・ボリューム・インデックスPositive Volume Indexオシレーター系
NVIネガティブ・ボリューム・インデックスNegative Volume Index
Volume Oscillatorボリューム・オシレーターオシレーター系
Weighted Moving AverageWMA加重移動平均線トレンド系
Williams %Rウィリアムズ%Rオシレーター系

各種インジケータ(モジュール)の使い方

A/D(蓄積/配信)Accumulation/Distribution

タイプ:オシレーター系

パラメーターの設定

ad(終値, 高値, 安値, 出来高, 期間)

  • 終値, 高値, 安値, 出来高:リスト形式の値。期間以上のデータ数量がないとエラーにはなりませんが、ある程度のデータ数量がないとNanになります。
  • 期間:期間を設定する。(通常に20日または21日)

以下のような「ゼロで割るエラー」が発生することがある。

ZeroDivisionError: float division by zero

計算式は以下のようになっており、(Ht – Lt) * Vtの箇所で高値と安値が一致するとこのようなエラーになる。

A/D = (Ct – Lt) – (Ht – Ct) / (Ht – Lt) * Vt + A/Dt-1

from pyti.accumulation_distribution import accumulation_distribution as ad

df['ad']   = ad(df['Close'].values.tolist(), df['High'].values.tolist(), df['Low'].values.tolist(), df['Volume'].values.tolist())

アルーン(Aroon)

タイプ:オシレーター系

Aroon UpとAroon Downの差分のHistogramを合わせて表示することもある。

パラメーターの設定

aroon_up(データ, 期間) aroon_down(データ, 期間)

  • データ:リスト形式の終値、期間以上のデータ数量がないとエラーになる。
  • 期間:期間を設定する。(通常14日)
from pyti.aroon import aroon_up as aroon_up
from pyti.aroon import aroon_down as aroon_down

period = 14

df['aroon_up']   = aroon_up(df['Close'].values.tolist(), period)
df['aroon_down'] = aroon_down(df['Close'].values.tolist(), period)

ATR(Average True Range

タイプ:オシレーター系

パラメーターの設定

atr(データ, 期間)

  • データ:リスト形式の終値、期間以上のデータ数量がないとエラーになる。
  • 期間:期間を設定する。
from pyti.average_true_range import average_true_range as atr

period = 14

df['atr']   = atr(df['Close'].values.tolist(), period)

補足

計算式:TRのN日の移動平均

しかしモジュールのソースを見るとTRの計算はTRモジュールから取得していますが、移動平均が複雑な計算をしています。

このATRはDMIなどの計算式にも利用されています。

ATRP(Average True Range Percent

タイプ:オシレーター系

パラメーターの設定

atrp(データ, 期間)

  • データ:リスト形式の終値、期間以上のデータ数量がないとエラーになる。
  • 期間:期間を設定する。
from pyti.average_true_range_percent import average_true_range_percent as atrp

period = 14

df['atrp']   = atrp(df['Close'].values.tolist(), period)

ボリンジャーバンド(Bollinger Bands)

タイプ:オシレーター系

本モジュールでは以下の7つの値を取得することができます。
σ(シグマ)の値の初期値は全て2.0です。-σの値は負数ではなく正数で指定します。

  • Upper Bollinger Band:+σの値
    bb_up(データ, 期間, σの値)
  • Middle Bollinger Band:中心線の単純移動平均(SMA)
    bb_mid(データ, 期間)
  • Lower Bollinger Band:-σの値
    bb_low(データ, 期間, σの値)
  • Range:+σの値 – -σの値
    bb_range(データ, 期間, σの値)
  • Bandwidth:Range / 単純移動平均(SMA)
    bandwidth(データ, 期間, σの値)
  • Percent Bandwidth:データ – -σの値  / Range
    percent_bandwidth(データ, 期間, σの値)
  • %B:(データ – -σの値) / Range * 100
    percent_b(データ, 期間, +σの値, -σの値)

パラメーターの設定

ここでは一般的に使われる3つのモジュールを解説します。

bb_up(データ, 期間, σの値):+σの値

bb_mid(データ, 期間):単純移動平均(SMA)

bb_low(データ, 期間, σの値):-σの値

  • データ:リスト形式の値、期間以上のデータ数量がないとエラーになる。
  • 期間:期間を設定する。
  • σの値:通常1〜3の値を設定します。-σの値は負数ではなく正数で指定します。初期値は2.0です。
from pyti.bollinger_bands import upper_bollinger_band as bb_up
from pyti.bollinger_bands import middle_bollinger_band as bb_mid
from pyti.bollinger_bands import lower_bollinger_band as bb_low

bb_period = 21

df['bb_up3']   = bb_up(df['Close'].values.tolist(),bb_period,3)
df['bb_up2']   = bb_up(df['Close'].values.tolist(),bb_period,2)
df['bb_up1']   = bb_up(df['Close'].values.tolist(),bb_period,1)
df['bb_mid']   = bb_mid(df['Close'].values.tolist(),bb_period)
df['bb_low1']  = bb_low(df['Close'].values.tolist(),bb_period,1)
df['bb_low2']  = bb_low(df['Close'].values.tolist(),bb_period,2)
df['bb_low3']  = bb_low(df['Close'].values.tolist(),bb_period,3)

CMF(チャイキン・マネーフロー)Chaikin Money Flow

タイプ:オシレーター系

パラメーターの設定

mf(終値, 高値, 安値, 出来高, 期間)

  • 終値, 高値, 安値, 出来高:リスト形式の値。期間以上のデータ数量がないとエラーにはなりませんが、ある程度のデータ数量がないとNanになります。
  • 期間:期間を設定する。(通常に20日または21日)
from pyti.chaikin_money_flow import chaikin_money_flow as cmf

period = 20

df['cmf']   = cmf(df['Close'].values.tolist(), df['High'].values.tolist(), df['Low'].values.tolist(), df['Volume'].values.tolist(), period)

CMO(シャンデ・モメンタム・オシレーター)Chande Momentum Oscillator

タイプ:オシレーター系

パラメーターの設定

cmo(データ, 期間)

  • データ:リスト形式の終値、期間以上のデータ数量がないとエラーになる。
  • 期間:期間を設定する。(9、14、20日など)
from pyti.chande_momentum_oscillator import chande_momentum_oscillator as cmo

period = 20

df['cmo']   = cmo(df['Close'].values.tolist(), period)

CCI(商品チャンネル指数)Commodity Channel Index

タイプ:オシレーター系

パラメーターの設定

cci(終値, 高値, 安値, 期間)

  • 終値, 高値, 安値:リスト形式の値。期間以上のデータ数量がないとエラーにはなりませんが、ある程度のデータ数量がないとNanになります。
  • 期間:期間を設定する。(通常に14日)
from pyti.commodity_channel_index import commodity_channel_index as cci

period = 14

df['cci']   = cci(df['Close'].values.tolist(), df['High'].values.tolist(), df['Low'].values.tolist(), period)

DPO(トレンド除去プライスオシレーター)Detrended Price Oscillator

タイプ:オシレーター系

パラメーターの設定

dpo(データ, 期間)

  • データ:リスト形式の終値、期間以上のデータ数量がないとエラーになる。
  • 期間:期間を設定する。(20日)
from pyti.detrended_price_oscillator import detrended_price_oscillator as dpo

period = 20

df['dpo']   = dpo(df['Close'].values.tolist(), period)

DMI(Directional Movement Index

タイプ:トレンド系

本モジュールでは以下の5つの値を取得することができます。

  • Negative Directional Index (-DI):pdm(高値, 安値)
  • Positive Directional Index (+DI):ndm(高値, 安値)
  • Negative Directional Movement (-DM):pdi(終値, 高値, 安値, 期間)
  • Positive Directional Movement (+DM):ndi(終値, 高値, 安値, 期間)
  • Average Directional Index(ADX):adx(終値, 高値, 安値, 期間)

パラメーターの設定

  • 終値、高値、安値:リスト形式の値、長期以上のデータ数量がないとエラーになる。
  • 期間:期間を設定する。(一般的に14日)
from pyti.directional_indicators import positive_directional_movement as pdm
from pyti.directional_indicators import negative_directional_movement as ndm
from pyti.directional_indicators import positive_directional_index as pdi
from pyti.directional_indicators import negative_directional_index as ndi
from pyti.directional_indicators import average_directional_index as adx

period = 14

df['pdm']   = pdm(df['High'].values.tolist(), df['Low'].values.tolist())
df['ndm']   = ndm(df['High'].values.tolist(), df['Low'].values.tolist())
df['pdi']   = pdi(df['Close'].values.tolist(), df['High'].values.tolist(), df['Low'].values.tolist(), period)
df['ndi']   = ndi(df['Close'].values.tolist(), df['High'].values.tolist(), df['Low'].values.tolist(), period)
df['adx']   = adx(df['Close'].values.tolist(), df['High'].values.tolist(), df['Low'].values.tolist(), period)

補足

average_directional_indexをadxと略していますが、ソースを見ると、adxと記載があったのであっていると思います。

DEMA(2重指数移動平均)Double Exponential Moving Average

タイプ:トレンド系

パラメーターの設定

dss(データ, 期間)

  • データ:リスト形式の終値、期間以上のデータ数量がないとエラーになる。
  • 期間:期間を設定する。
from pyti.double_exponential_moving_average import double_exponential_moving_average as dema

period = 5

df['dema'] = dema(df['Close'].values.tolist(), period)

DSS(2重平滑化確率)Double Smoothed Stochastic

タイプ:オシレーター系

パラメーターの設定

dss(データ, 期間)

  • データ:リスト形式の終値、期間以上のデータ数量がないとエラーになる。
  • 期間:期間を設定する。
from pyti.double_smoothed_stochastic import double_smoothed_stochastic as dss

period = 14

df['dss']   = dss(df['Close'].values.tolist(), period)

EMA(指数平滑移動平均線)Exponential Moving Average

タイプ:トレンド系

ema(データ, 期間)

  • データ:リスト形式の終値、期間以上のデータ数量がないとエラーになる。
  • 期間:期間を設定する。
from pyti.exponential_moving_average import exponential_moving_average as ema

period = 5

df['ema'] = ema(df['Close'].values.tolist(), period)

HMA(ハル移動平均線)Hull Moving Average

タイプ:トレンド系

hma(データ, 期間)

  • データ:リスト形式の終値、期間以上のデータ数量がないとエラーになる。
  • 期間:期間を設定する。
from pyti.hull_moving_average import hull_moving_average as hma

period = 5

df['hma'] = hma(df['Close'].values.tolist(), period)

一目均衡表(Ichimoku Cloud)

タイプ:トレンド系

本モジュールでは以下の5つの値を取得することができます。

  • TenkanSen
  • KijunSen
  • Chiku Span
  • Senkou A
  • Senkou B

パラメーターの設定

tenkansen(終値, 期間=9):
kijunsen(終値, 期間=26):
chiku_span(終値):
senkou_a(終値):
senkou_b(終値, 期間=52):

  • 終値:リスト形式の値。最長であるsenkou_bの期間以上にデータがないとエラーになる。
  • 期間:期間を設定する。上記にそれぞれのデフォルト値を記載しました。

chiku_spanとsenkou_a、senkou_bは、返り値のリストの個数が変わってしまうため、データフレームではエラーになります。
そこで以下のように少し手を加えました。

  • chiku_span:shiftに置き換えました。
  • senkou_a、senkou_b:[:len(df)]を追加して行数を揃えました。
from pyti.ichimoku_cloud import tenkansen
from pyti.ichimoku_cloud import kijunsen
from pyti.ichimoku_cloud import chiku_span
from pyti.ichimoku_cloud import senkou_a
from pyti.ichimoku_cloud import senkou_b

df['tenkansen']  = tenkansen(df['Close'].values.tolist())
df['kijunsen']   = kijunsen(df['Close'].values.tolist())
# df['chiku_span'] = chiku_span(df['Close'].values.tolist())
# data[25::] *ソースがこのようになっていました。
df["chiku_span"] = df.Close.shift(-25)

df['senkou_a']   = senkou_a(df['Close'].values.tolist())[:len(df)]
df['senkou_b']   = senkou_b(df['Close'].values.tolist())[:len(df)]

ケルトナーバンド(Keltner Bands)

タイプ:オシレーター系

本モジュールでは以下の4つの値を取得することができます。
σ(シグマ)の値の初期値は全て2.0です。-σの値は負数ではなく正数で指定します。

  • Bandwidth
  • Center Band(SMAと同じです)
  • Upper Band
  • Lower Band

パラメーターの設定

b_width(高値, 安値, 期間)

center_b(終値, 高値, 安値, 期間)

upper_b(終値, 高値, 安値, 期間)

lower_b(終値, 高値, 安値, 期間)

  • 終値, 高値, 安値:リスト形式の値。
  • 期間:期間を設定する。
from pyti.keltner_bands import band_width as b_width
from pyti.keltner_bands import center_band as center_b
from pyti.keltner_bands import upper_band as upper_b
from pyti.keltner_bands import lower_band as lower_b

period = 20

df['b_width']   = b_width(df['High'].values.tolist(), df['Low'].values.tolist(), period)
df['center_b']  = center_b(df['Close'].values.tolist(), df['High'].values.tolist(), df['Low'].values.tolist(), period)
df['upper_b']   = upper_b(df['Close'].values.tolist(), df['High'].values.tolist(), df['Low'].values.tolist(), period)
df['lower_b']   = lower_b(df['Close'].values.tolist(), df['High'].values.tolist(), df['Low'].values.tolist(), period)

LWMA(線形加重移動平均)Linear Weighted Moving Average

タイプ:トレンド系

パラメーターの設定

lwma(データ, 期間)

  • データ:リスト形式の終値、期間以上のデータ数量がないとエラーになる。
  • 期間:期間を設定する。

理由はわかりませんが、正しいと思われる値を取得できませんでした。

from pyti.linear_weighted_moving_average import linear_weighted_moving_average as lwma

period = 5

df['lwma'] = lwma(df['Close'].values.tolist(), period)

Momentum(モメンタム)

タイプ:オシレーター系

パラメーターの設定

momentum(データ, 期間)

  • データ:リスト形式の終値、期間以上のデータ数量がないとエラーになる。
  • 期間:期間を設定する。
from pyti.momentum import momentum

period = 14

df['momentum']   = momentum(df['Close'].values.tolist(), period)

MF(マネー・フロー)Money Flow

タイプ:その他

通常はMF単体では利用せず、他の指標の元の値となる。

パラメーターの設定

mf(終値, 高値, 安値, 出来高)

  • 終値, 高値, 安値, 出来高:リスト形式の値。
from pyti.money_flow import money_flow as mf

df['mf']   = mf(df['Close'].values.tolist(), df['High'].values.tolist(), df['Low'].values.tolist(), df['Volume'].values.tolist())

MFI(マネー・フロー・インデックス)Money Flow Index

タイプ:オシレーター系

パラメーターの設定

mf(終値, 高値, 安値, 出来高, 期間)

  • 終値, 高値, 安値, 出来高:リスト形式の値。期間以上のデータ数量がないとエラーになる。
  • 期間:期間を設定する。(通常に14日)
from pyti.money_flow_index import money_flow_index as mfi

period = 14

df['mfi']   = mfi(df['Close'].values.tolist(), df['High'].values.tolist(), df['Low'].values.tolist(), df['Volume'].values.tolist(), period)

MACD(マックディー)Moving Average Convergence Divergence

タイプ:オシレーター系

MACDは通常単独では利用せず、シグナルと言われるMACDの単純移動平均を合わせて利用する。

パラメーターの設定

macd(データ, 短期, 長期)

  • データ:リスト形式の値、長期以上のデータ数量がないとエラーになる。
  • 短期:短期の期間を設定する。(一般的に12日)
  • 長期:長期の期間を設定する。(一般的に26日)

sma(データ, 期間)

  • データ:MACDの値をリスト形式にする
  • 期間:期間を設定する。(一般的に9日)
from pyti.moving_average_convergence_divergence import moving_average_convergence_divergence as macd
from pyti.simple_moving_average import simple_moving_average as sma

macd_period = {'long' : 26, 'short' : 12}
sma_period  = 9

df['macd']   = macd(df['Close'].values.tolist(), macd_period['short'], macd_period['long'])
df['signal'] = sma(df['macd'].values.tolist(), sma_period)

補足

計算式:MACD = 短期EMA – 長期EMA

MAE(エンベロープ)Moving Average Envelope

タイプ:トレンド系

本モジュールでは以下の値を取得できます。

  • Upper Band
  • Center Band(SMAと同じです)
  • Lower Band

パラメーターの設定

center_band(終値, 期間) upper_band(終値, 期間, %) lower_band(終値, 期間, %)

  • 終値:リスト形式の値。
  • 期間:期間を設定する。
  • %:パーセントを小数点で指定する。(通常0.01〜0.1)
from pyti.moving_average_envelope import center_band as center_band
from pyti.moving_average_envelope import upper_band as upper_band
from pyti.moving_average_envelope import lower_band as lower_band

period = 14
env_percentage = 0.01

df['center_band']  = center_band(df['close'].values.tolist(), period)
df['upper_band']   = upper_band(df['close'].values.tolist(), period, env_percentage)
df['lower_band']   = lower_band(df['close'].values.tolist(), period, env_percentage)

OBV(オン・バランス・ボリューム)On Balance Volume

タイプ:トレンド系

パラメーターの設定

obv(終値, 出来高)

  • 終値、出来高:リスト形式の値。
from pyti.on_balance_volume import on_balance_volume as obv

df['obv']  = obv(df['Close'].values.tolist(), df['Volume'].values.tolist())

プライスチャネル(Price Channels)

タイプ:トレンド系

本モジュールでは以下の値を取得できます。

  • Upper Price Channel
  • Lower Price Channel

パラメーターの設定

upc(終値, 期間, パーセント) lpc(終値, 期間, パーセント)

  • 終値:リスト形式の値。
  • 期間:期間を設定する。(20日)
  • パーセント:1くらい
from pyti.price_channels import upper_price_channel as upc
from pyti.price_channels import lower_price_channel as lpc

period = 20
upper_percent = 1
lower_percent = 1

df['upc']   = upc(df['close'].values.tolist(), period, upper_percent)
df['lpc']   = lpc(df['close'].values.tolist(), period, lower_percent)

PPO(プライスオシレーター)Price Oscillator

タイプ:オシレーター系

PROは通常単独では利用せず、シグナル(SIGNAL)と言われるPROの単純移動平均を合わせて利用する。
PROとSIGNALの差分のHistogramも合わせて表示することもある。

パラメーターの設定

pro(データ, 短期, 長期)

  • データ:リスト形式の値、長期以上のデータ数量がないとエラーになる。
  • 短期:短期の期間を設定する。(一般的に12日)
  • 長期:長期の期間を設定する。(一般的に26日)

sma(データ, 期間)

  • データ:MACDの値をリスト形式にする。
  • 期間:期間を設定する。(一般的に9日)
from pyti.price_oscillator import price_oscillator as pro
from pyti.simple_moving_average import simple_moving_average as sma

short_period = 12
long_period = 26
signal_period = 9

df['pro']   = pro(df['close'].values.tolist(), short_period, long_period)
df['signal'] = sma(df['pro'].values.tolist(), signal_period)
df['histogram'] = df['pro'] - df['signal']

ROC(変化率)Rate of Change

タイプ:オシレーター系

パラメーターの設定

roc(データ, 期間)

  • データ:リスト形式の終値、期間以上のデータ数量がないとエラーになる。
  • 期間:期間を設定する。
from pyti.rate_of_change import rate_of_change as roc

period = 14

df['roc']   = roc(df['Close'].values.tolist(), period)

RSI(相対力指数)Relative Strength Index

タイプ:オシレーター系

パラメーターの設定

rsi(データ, 期間)

  • データ:リスト形式の値、期間以上のデータ数量がないとエラーになる。
  • 期間:期間を設定する。
from pyti.relative_strength_index import relative_strength_index as rsi

period = 14

df['rsi']   = rsi(df['Close'].values.tolist(), period)

SMA(単純移動平均)Simple Moving Average

タイプ:トレンド系

パラメーターの設定

sma(データ, 期間)

  • データ:リスト形式の値、期間以上のデータ数量がないとエラーになる。
  • 期間:期間を設定する。
from pyti.simple_moving_average import simple_moving_average as sma

sma_period  = 9

df['signal'] = sma(df['Close'].values.tolist(), sma_period)

SMMA(平滑移動平均)Smoothed Moving Average

タイプ:トレンド系

パラメーターの設定

smma(データ, 期間)

  • データ:リスト形式の値、期間以上のデータ数量がないとエラーになる。
  • 期間:期間を設定する。
from pyti.smoothed_moving_average import smoothed_moving_average as smma

period = 5

df['smma'] = smma(df['Close'].values.tolist(), period)

SD(標準偏差)Standard Deviation

タイプ:その他

通常、単独では使わず、他の指標の元データとなっているようです。

パラメーターの設定

sd(データ, 期間)

  • データ:リスト形式の値、期間以上のデータ数量がないとエラーになる。
  • 期間:期間を設定する。
from pyti.standard_deviation import standard_deviation as sd

period = 20

df['sd']   = sd(df['Close'].values.tolist(), period)

SV(分散)Standard Variance

タイプ:その他

通常、単独では使わず、他の指標の元データとなっているようです。

パラメーターの設定

sv(データ, 期間)

  • データ:リスト形式の値、期間以上のデータ数量がないとエラーになる。
  • 期間:期間を設定する。
from pyti.standard_variance import standard_variance as sv

period = 20

df['sv']   = sv(df['Close'].values.tolist(), period)

ストキャスティクス(Stochastic)

タイプ:オシレーター系

本モジュールでは以下の2つの値を取得することができます。

  • %K
  • %D

パラメーターの設定

srv_k(データ, 期間) srv_d(データ, 期間)

  • データ:リスト形式の値、期間以上のデータ数量がないとエラーになる。ある程度の期間がないと値がnanになる。
  • 期間:期間を設定する。
from pyti.stochastic import percent_k as srv_k
from pyti.stochastic import percent_d as srv_d

period = 14

df['srv_k']   = srv_k(df['Close'].values.tolist(), period)
df['srv_d']   = srv_d(df['Close'].values.tolist(), period)

ストキャスティクス RSI(StochRSI)

タイプ:オシレーター系

パラメーターの設定

srsi(データ, 期間)

  • データ:リスト形式の値、期間以上のデータ数量がないとエラーになる。
  • 期間:期間を設定する。
from pyti.stochrsi import stochrsi as srsi

period = 14

df['srsi']   = srsi(df['Close'].values.tolist(), period)

TMA(三角移動平均)Triangular Moving Average

タイプ:トレンド系

tma(データ, 期間)

  • データ:リスト形式の終値、期間以上のデータ数量がないとエラーになる。
  • 期間:期間を設定する。
from pyti.triangular_moving_average import triangular_moving_average as tma

period = 5

df['tma'] = tma(df['Close'].values.tolist(), period)

TEMA(3重指数移動平均)Triple Exponential Moving Average

タイプ:トレンド系

tema(データ, 期間)

  • データ:リスト形式の終値、期間以上のデータ数量がないとエラーになる。
  • 期間:期間を設定する。
from pyti.triple_exponential_moving_average import triple_exponential_moving_average as tema

period = 5

df['tema'] = tema(df['Close'].values.tolist(), period)

TR(トゥルー レンジ)True Range

タイプ:その他

TRの計算式が色々あるのか、私が調べた式とソースの式が異なっています。
またモジュール内の説明の式とソースも一致していないですが、論理的には問題ないです。

TRの計算式の色々

  • TR = 高値 – 安値
  • TR = max(高値 – 安値, 高値 – 前日終値, 前日終値 – 安値)
  • TR = max(期間の終値の高値 – 期間の終値の安値, 期間の終値の高値 – 前日終値, 期間の終値の安値 – 前日終値)

どれが正しいかわかりませんが、最後の式がこのモジュールの計算式です。
もしかすると、TRはATRの計算式に利用され、ATRはDMIに利用されるため、このモジュールではこのような計算式になっているのかも知れません。

パラメーターの設定

tr(データ, 期間)

  • データ:リスト形式の終値、期間以上のデータ数量がないとエラーになる。
  • 期間:期間を設定する。
from pyti.true_range import true_range as tr

period = 14

df['tr']   = tr(df['Close'].values.tolist(), period)

TP(Typical Price)

タイプ:その他

通常、単独では使わず、他の指標の元データとなっているようです。

パラメーターの設定

tp(終値, 高値, 安値, 出来高)

  • 終値, 高値, 安値:リスト形式の値。
from pyti.typical_price import typical_price as tp

df['tp']   = tp(df['Close'].values.tolist(), df['High'].values.tolist(), df['Low'].values.tolist())

UO(アルティメット・オシレーター)Ultimate Oscillator

タイプ:オシレーター系

パラメーターの設定

uo(終値, 安値)

  • 終値、安値:リスト形式の値。28期間以上のデータ数量がないとエラーになる。
from pyti.ultimate_oscillator import ultimate_oscillator as uo

df['uo']   = uo(df['Close'].values.tolist(), df['Low'].values.tolist())

補足

本モジュールは考案者のラリー・ウィリアムズの提案とおりに7日間、14 日間、28日間の3期間から指標を作成します。

もし、別の期間に設定する場合は、UOでは期間指定ができないため、個別に生成して算出するしかないです。

  • 個別に算出
    • avg_7 = average_7(close_data, low_data, period=7):
    • avg_14 = average_14(close_data, low_data, period=14):
    • avg_28 = average_28(close_data, low_data, period=28):
  • UOを算出
    • a7= 4 × avg_7
    • a14= 2 × avg_14
    • a28= avg_28
    • uo= 100 × ((a7+ a14+ a28) ÷ 7)

VHF(Vertical Horizontal Filter)

タイプ:オシレーター系

パラメーターの設定

vhf(データ, 期間)

  • データ:リスト形式の値。期間以上のデータ数量がないとエラーになる。
  • 期間:期間を設定する。(12日、または28日)
from pyti.vertical_horizontal_filter import vertical_horizontal_filter as vhf

period  = 28

df['vhf']   = vhf(df['Volume'].values.tolist(), period)

ボラティリティー(Volatility)

タイプ:その他

このモジュールは、ヒストリカル・ボラティリティです。

パラメーターの設定

volatility(データ, 期間)

  • データ:リスト形式の値。期間以上のデータ数量がないとエラーになる。
  • 期間:期間を設定する。
from pyti.volatility import volatility as volatility

period = 10

df['volatility']   = volatility(df['Close'].values.tolist(), period)

補足

計算式

Volatility = SD / SV

VAMA(出来高調整済み移動平均線)Volume Adjusted Moving Average

タイプ:トレンド系

パラメーターの設定

vwma(データ, 期間)

  • データ:リスト形式の値。期間以上のデータ数量がないとエラーになる。
  • 期間:期間を設定する。
from pyti.volume_adjusted_moving_average import volume_adjusted_moving_average as vwma

period = 5

df['vwma'] = vwma(df['Close'].values.tolist(), df['Volume'].values.tolist(), period)

VI(ボリューム・インデックス)Volume Index

タイプ:オシレーター系

本モジュールは以下の2つの指標を作成することができます。

  • PVI(ポジティブ・ボリューム・インデックス)
  • NVI(ネガティブ・ボリューム・インデックス)

パラメーターの設定

pvi(終値, 出来高) nvi(終値, 出来高)

  • 終値, 出来高:リスト形式の値。
from pyti.volume_index import positive_volume_index as pvi
from pyti.volume_index import negative_volume_index as nvi

df['pvi']   = pvi(df['Close'].values.tolist(), df['Volume'].values.tolist())
df['nvi']   = nvi(df['Close'].values.tolist(), df['Volume'].values.tolist())

ボリューム・オシレーター(Volume Oscillator)

タイプ:オシレーター系

ボリューム・オシレーターには、以下の2つの指標がありますが、本モジュールはPVOとなります

  • AVO =(短期EMA – 長期EMA)
  • PVO =(短期EMA – 長期EMA)÷ 長期EMA × 100

パラメーターの設定

vc(出来高, 短期, 長期)

  • 出来高:リスト形式の終値。
  • 短期、長期:期間を設定します。
from pyti.volume_oscillator import volume_oscillator as vc

short_period = 20
long_period  = 25

df['vc']   = vc(df['Volume'].values.tolist(), short_period, long_period)

WMA(加重移動平均線)Weighted Moving Average

タイプ:トレンド系

パラメーターの設定

wma(データ, 期間)

  • データ:リスト形式の終値。
  • 期間:期間を指定します。
from pyti.weighted_moving_average import weighted_moving_average as wma

period = 5

df['wma'] = wma(df['Close'].values.tolist(), period)

ウィリアムズ%R(Williams %R)

タイプ:オシレーター系

パラメーターの設定

wpr(データ)

  • データ:リスト形式の終値。
from pyti.williams_percent_r import williams_percent_r as wpr

df['wpr']   = wpr(df['Close'].values.tolist())

補足

計算式

%R = (終値-過去n日間の最高値) ÷ (過去n日間の最高値-過去n日間の最安値) × 100

とするならば、本モジュールでは期間を指定できないため目的とは異なる値になる。

本モジュールの計算式(ソース)
highest_high = np.max(close_data)
lowest_low = np.min(close_data)
wr = [((highest_high - close) / (highest_high - lowest_low)) * -100 for close in close_data]

 

 

コメント

タイトルとURLをコピーしました