どうも、しゅん@Trade Techです。
TradingViewのPineScript、Version5では名前空間「ta」の中に様々なテクニカル指標の計算などをしてくれる便利な関数がたくさん用意されています。その数60個以上。
各関数の概要や引数などは公式リファレンスから確認できますが、目的別にまとまっていた方が分かりやすいと思いますので、僕の独断と偏見でカテゴリーごとにまとめてみました。
テクニカル指標以外にも、指定期間の計算や条件判定などをしてくれる関数などあります!日頃からPineScript愛用されている方にも、何か新しい発見があるかも?
テクニカル指標系
移動平均線
移動平均線関連の関数はメジャーなものからマイナーなものまで多数用意されています。よく利用されるのは以下の移動平均線でしょうか。
ta.sma | 「SMA(単純移動平均線)」を計算 |
---|---|
ta.ema | 「EMA(指数平滑移動平均線)」を計算 |
ta.vwap | 「VWAP(出来高加重平均価格)」を計算 |
また、SMAとの移動平均線乖離率を計算してくれる「ta.dev」という関数もあったりします。
ta.dev | 「移動平均線乖離率(SMAからの乖離)」を計算 |
---|
その他、以下のような多彩な移動平均線が利用可能です。
ta.wma | 「WMA(加重移動平均線)」を計算 |
---|---|
ta.vwma | 「VWMA(出来高加重移動平均線)」を計算 |
ta.rma | 「RMA(修正移動平均線)」を計算 |
ta.hma | 「HMA(ハル移動平均線)」を計算 |
ta.swma | 直近4足の「SWMA(対称加重移動平均線)」を計算 |
ta.alma | 「ALMA(アルノー・ルグー移動平均線)」を計算 |
バンド系
移動平均線を中心に様々な手法で上下のバンドを描画するテクニカル指標も人気ですよね。
ボリンジャーバンドの計算用関数は、「ta.bb」と「ta.bbw」の2つ。「ta.bb」はミドルライン/上バンド/下バンドを1つの関数でまとめて返してくれるので便利。
ta.bb | 「ボリンジャーバンド」を計算 |
---|---|
ta.bbw | 「ボリンジャーバンド幅」を計算 |
ケルトナーチャンネルの計算用関数も、2つあります。
ta.kc | 「ケルトナーチャンネル」を計算 |
---|---|
ta.kcw | 「ケルトナーチャンネル幅」を計算 |
また、移動平均線からの乖離率バンドを表示したい場合は、自分で計算することもできますが「ta.dev」が便利。
ta.dev | 「移動平均線乖離率(SMAからの乖離)」を計算 |
---|
オシレーター系
ローソク足とは別に表示する「オシレーター」タイプのテクニカル指標も多数用意されています。
RSIは「ta.rsi」。ワイルダー版で、内部的には修正移動平均(RMA)で計算されているようです。
ta.rsi | 「RSI」を計算 |
---|
MACDは「ta.macd」。この関数1つで、MACD/シグナル/ヒストグラムの値3つをまとめて返してくれます。
ta.macd | 「MACD」を計算 |
---|
ストキャスティクスは「ta.stoch」。ちょっとわかり辛いんですが実はこの関数1つでファストストキャス/スローストキャスの両方に対応しています。引数の1つ目が「1」ならファスト、それ以外ならスローになります。
ta.stoch | 「ストキャスティクス」を計算 |
---|
DMI/ADXも人気ですね。関数は「ta.dmi」です。こちらの関数1つで、+DI/-DI/ADXをまとめて返してくれます。
ta.dmi | 「DMI(方向性指数)」を計算 |
---|
トゥルーレンジ(TR)やATRの計算用関数も用意されています。
ta.tr | 「TR(真の値幅)」を計算 |
---|---|
ta.atr | 「ATR(アベレージ・トゥルー・レンジ)」を計算 |
また、2銘柄の「相関」を計算してくれる「ta.correlation」という関数も。
ta.correlation | 2つの時系列値の「相関」を計算 |
---|
その他
最後に、その他様々なテクニカル指標を計算してくれる関数も紹介しておきます。マイナーなものも多いですが、人によっては愛用しているかもしれません。
ta.sar | 「パラボリックSAR (パラボリック・ストップ&リバース)」を計算 |
---|---|
ta.supertrend | 「スーパートレンドインジケーター」を計算 |
ta.tsi | 「トゥルー・ストレングス・インデックス」を計算 |
ta.iii | 「イントラデイ・インテンシティ・インデックス」を計算 |
ta.accdist | 「アキュムレーション/ディストリビューションインデックス」を計算 |
ta.wpr | 「ウィリアムズ%R」を計算 |
ta.cmo | 「シャンデ・モメンタム・オシレーター」を計算 |
ta.cog | 「重心オシレーター」を計算 |
ta.mfi | 「MFI(マネーフローインデックス)」を計算 |
ta.cci | 「CCI (商品チャネル指数) 」を計算します。 |
ta.obv | 「オン・バランス・ボリューム」を計算 |
ta.pvi | 「ポジティブ・ボリューム・インデックス」を計算 |
ta.nvi | 「ネガティブ・ボリューム・インデックス」を計算 |
ta.pvt | 「プライス・ボリューム・トレンド」を計算 |
ta.wad | 「ウィリアムズ・アキュムレーション/ディストリビューション」を計算 |
ta.wvad | 「ウィリアムズ・可変アキュムレーション/ディストリビューション」を計算 |
計算や条件判定に便利な関数
計算
ta系の関数にはテクニカル指標以外にも、過去足の比較や指定期間内の計算に便利な関数が多数用意されております。知っておくと計算ロジックをシンプルにすることもできます。
現在足とN本前の足の価格を比較したい場合は、「ta.change」「ta.mom」「ta.roc」などが便利。
ta.change | 現在足とn本前の足の価格差を計算 |
---|---|
ta.roc | 現在足とn足前の変化率を計算 |
ta.mom | 現在足とn本前の足のモメンタム(価格差)を取得 |
また、期間内の平均ではなく中央値(メジアン)を求めたいときの「ta.median」や、期間内に最も出現頻度が多かった値を取得できる「ta.mode」などもあります。
ta.median | 指定値の指定期間の中央値(メジアン)を計算 |
---|---|
ta.mode | 指定期間で最も出現頻度の多い値を取得 |
その他、値の累計を計算してくれる「ta.cum」もあります。var変数を使っても実装できますが、これ使ったほうが簡単。
ta.cum | 指定した値の累計を計算 |
---|
最大/最小
指定期間内の最大値/最小値を取得する関数も用意されています。「ta.highest」と「ta.lowest」です。こちらは最高/最安の値が取得できます。
ta.highest | 指定値の指定期間における最高値を取得 |
---|---|
ta.lowest | 指定値の指定期間における最安値を取得 |
また、最高値/最安値を付けた足の情報が欲しい場合は、「ta.highestbars」と「ta.lowestbars」が便利。こちらは値そのもではなく最高値/最安値を付けた足が現在足から何個前の足かを返してくれます。返された値でtime[n]などとすれば、該当足の情報が取得できて便利です。
ta.highestbars | 指定値の指定期間における最高値を付けた足のオフセット値を取得 |
---|---|
ta.lowestbars | 指定値の指定期間における最安値を付けた足のオフセット値を取得 |
また、全期間の最大値/最小値を計算してくれる「ta.max」「ta.min」という関数もあります・・がこれはあんまり使わないかも?数個の値の中から最大値/最小値を取得できる「math.max」「math.min」を使うことの方が多いかも。
ta.max | 指定値の全期間における最大値を取得 |
---|---|
ta.min | 指定値の全期間における最小値を取得 |
ピボット
最大/最小に似ていますが、価格が前後数足と比較して最大/最小になっている部分を「ピボットハイ/ピボットロー」と呼んだりします。「山」や「谷」になっているような部分ですね。
これを計算するのに便利な関数が「ta.pivothigh」「ta.pivotlow」です。支持線/抵抗線やトレンドラインを引いたりする時にも便利。
ta.pivothigh | 指定値の指定期間内でピボットハイ(山の部分)となった価格を取得 |
---|---|
ta.pivotlow | 指定値の指定期間内でピボットロー(谷の部分)となった価格を取得 |
ta.pivot_point_levels | ピボットポイントのレベルを計算 |
条件判定
足の条件判定は、インジケーターでのサイン発生やストラテジーのエントリー/決済条件に欠かせません。if構文などを駆使して実装することもできますが、以下の関数を知っておくとコーディングが楽になるかも?
まずはゴールデンクロスや価格ブレイクなど、最も多用するであろうクロス判定の関数。上抜け/ゴールデンクロスを計算する「ta.crossover」と、下抜け/デッドクロスを計算する「ta.crossunder」が一番使いますかね。
ta.cross | 値Aが値Bをクロス(上抜けまたは下抜け)したかどうか判定 |
---|---|
ta.crossover | 値Aが値Bを上抜けたかどうか判定 |
ta.crossunder | 値Aが値Bを下抜けたかどうか判定 |
そして結構便利なのが「ta.valuewhen」と「ta.barssince」。それぞれ現在足から遡って最後に条件を満たした足の情報などを取得できます。自分でコーディングしようとするとfor構文が必要になって若干面倒くさいので、なかなか使えます。
ta.valuewhen | 現在足から遡ってn番目に指定条件を満たした足から情報を取得 |
---|---|
ta.barssince | 指定条件が最後にtrueだった足からの経過足数を計算 |
あと、最大/最小にも似ていますが、現在足の価格が直近期間のどの足よりも高い/低いかどうかを判定してくれる「ta.rising」「ta.falling」という関数もあったりします。
ta.rising | 指定値が指定期間のどの値よりも大きいかどうか判定 |
---|---|
ta.falling | 指定値が指定期間のどの値よりも小さいかどうか判定 |
統計
ここからは、統計情報などに関する計算です。
標準偏差や分散は他の様々な関数でも内部的に使われていますが、自分で計算したいときは「ta.stdev」と「ta.variance」が使えます。
ta.stdev | 指定期間における値の「標準偏差」を計算 |
---|---|
ta.variance | 指定期間における値の「分散」を計算 |
また「線形回帰曲線」を計算してくれる「ta.linreg」も用意されています。平均回帰系のストラテジーを作りたい場合に使えるかも。
ta.linreg | 線形回帰曲線を計算 |
---|
パーセンタイル
パーセンタイルというのは、あるデータ群を小さい方から並べた時に対象データが下から何%の位置にあるか?を計算するものです。PineScriptでは以下の関数が用意されています。
ta.percentrank | 指定期間における指定値のパーセントランクを取得 |
---|---|
ta.percentile_nearest_rank | パーセンタイルを計算(ランク版) |
ta.percentile_linear_interpolation | パーセンタイルを計算(線形補間版) |
おわりに
以上、PineScriptのta.xxx系関数総まとめでした。
僕も調べてみて初めて知った関数もあったりして、色々と発見がありましたね。笑
使えそうな関数が見つかったら、ぜひドンドン使ってみてください!