TradningViewのPineスクリプトにはあらかじめインジケーターの関数が設定されています。
このインジケーター関数を使うことで、本来は計算しなければならない工程を省略でき、とても簡単にインジケーターのコードを書くことができます。
今回はインジケーターといえば真っ先に思いつくであろう「移動平均線」「MACD」などのトレンド系インジケーター関数をご紹介します。
インジケーター関数は一度では紹介できないほど用意されているので、「トレンド系」「オシレーター系」「出来高参照系」の3つの記事に分けてご紹介します。この3つの記事で内蔵されているインジケーター関数はほとんど網羅しているので本記事以外も良ければ見てみてください。
単純移動平均線「sma()」
単純移動平均線は直近「n個(期間)」のデータを単純に平均化した値を示します。
Pineスクリプトでは以下のように記述します。
sma (source, length)
- source:始値(open)、終値(close)、高値(high)、安値(low)などから使用する値を選択
- length:SMA計算に使用する期間(ロウソク足の数)を入力
sourceには始値(open)、終値(close)、高値(high)、安値(low)の他に、(高値+安値)/2を出力する「h2」、(高値+安値+終値)/3を出力する「h3」、(始値+高値+安値+終値)/4を出力する「ohlc4」が使用できます。
例えば、終値を使用して、期間20の単純移動平均を作りたい場合は以下のコードのように記述します。
sma(close, 20)
指数移動平均線「ema()」
使用する価格が過去に遡るにつれ、重みを指数関数的に減少させて算出する移動平均。つまり、単純移動平均線よりも直近の値が重視されるため、値動きに対して反応が早い。
ema (source, length)
- source:始値(open)、終値(close)、高値(high)、安値(low)などから使用する値を選択
- length:EMA計算に使用する期間(ロウソク足の数)を入力
加重移動平均線「wma()」
各々の価格に異なる重みを付けて平均化した値。使用する価格が過去に遡るにつれ、重みを一定量ずつ減らす点がemaと異なります。
wma(source, length)
- source:始値(open)、終値(close)、高値(high)、安値(low)などから使用する値を選択
- length:WMA計算に使用する期間(ロウソク足の数)を入力
ハル移動平均線「hma()」
ハル移動平均線は、加重移動平均線をもとに算出します。
期間nのHMAは「WMA(n/2)-WMA(n)」
hma(source, length)
- source:始値(open)、終値(close)、高値(high)、安値(low)などから使用する値を選択
- length:HMA計算に使用する期間(ロウソク足の数)を入力
Arnaud Legoux 移動平均「alma()」
ガウシアンフィルタを用いる加重平均。
alma(series, length, offset, sigma)
- series:始値(open)、終値(close)、高値(high)、安値(low)などから使用する値を選択
- length:ALMA計算に使用する期間(ロウソク足の数)を入力
- offset:応答性を制御。1に近いほど応答が遅い。
- sigma:ALMAの滑らかさを制御。値が大きいほど滑らか。
修正移動平均線「rma()」
RMAは前日の修正移動平均値と当日終値から当日の修正移動平均値を算出します。
前日の修正移動平均値を繰り返し計算に使用するため、SMAより滑らかな曲線となることが特徴です。
rma(source, length)
- source:始値(open)、終値(close)、高値(high)、安値(low)などから使用する値を選択
- length:RMA計算に使用する期間(ロウソク足の数)を入力
正弦加重移動平均「swma()」
EMA,WMAは直近の値を重視するのに対して、SWMAは期間nにおける中央値を重視することが特徴です。
//series:始値(open)、終値(close)、高値(high)、安値(low)などから使用する値を選択
swma(series)
- series:始値(open)、終値(close)、高値(high)、安値(low)などから使用する値を選択
出来高加重移動平均線「vwma()」
その名の通り、当日の出来高と終値の積を平均化して算出する平均線です。
つまり、出来高が多いローソク足の終値ほど平均線に対する影響が大きく、出来高が少ないローソク足の終値ほど平均線に対する影響が小さくなります。
//source:始値(open)、終値(close)、高値(high)、安値(low)などから使用する値を選択
//length:計算に使用する期間(ロウソク足の数)を入力
vwma(source, length)
- source:始値(open)、終値(close)、高値(high)、安値(low)などから使用する値を選択
- length:VWMA計算に使用する期間(ロウソク足の数)を入力
MACD(マックディー)「macd()」
MACDは異なる期間の2つの指数移動平均線の差(MACD線)とMACD線を単純平均化した(シグナル)からなるインジケーターです。
一般的にはMACD線の傾きから方向性を確認したり、MACD線とシグナルのクロスを売買サインとして使用します。Pineスクリプトではコードを以下のように書きます。
macd(source, fastlen, slowlen, siglen)
- source:始値(open)、終値(close)、高値(high)、安値(low)などから使用する値を選択
- fastlen:短期のEMA計算に使用する期間(ロウソク足の数)を入力
- slowlen:長期のEMA計算に使用する期間(ロウソク足の数)を入力
- siglen:計算に使用する期間(ロウソク足の数)を入力
MACDのデフォルトで設定されている値でコードを作成してみましょう。終値を使用して、短期EMA12、長期EMA26、シグナル期間9の場合は以下のコードになります。
macd(close, 12, 26, 9)
MACD関数を使わないコードの書き方
MACDの計算方法を見てわかる通り、ema関数を使ってMACDを作成することも可能です。例えば、MACD線とシグナル線のクロスを売買指標としてバックテストする際は、macd関数を使わずにema関数で作成した方がコードが書きやすくなります。
macd関数を使わずにコードを作成してみましょう。
//MACD関数を使わずにコードを作成する
MACD = ema(close, 12) - ema(close, 26)
signal = ema(MACD, 9)
このコードはmacd関数を使った先ほどコードと全く同じ意味を持ちます。このように目的によってコードの書き方を工夫すれば、より効率的にストラテジーやインジケーターを作成することができます。
ボリンジャーバンド「bb()」
ボリンジャーバンドは単純移動平均線から正と負の方向に標準偏差をとったラインを示します。つまり、値動きの収まりやすいレンジ幅を可視化したラインです。
このレンジ幅をシグマ(σ)と呼び、正規分布では1σに収まる確率が68.2%、2σに収まる確率が95.4%です。値動きが正規分布をとるならば、この確率の範囲内で推移するということですね!
Pineスクリプトではボリンジャーバンドのコードを以下のように記述します。
bb(series, length, mult)
- series:始値(open)、終値(close)、高値(high)、安値(low)などから使用する値を選択
- length:SMA計算に使用する期間(ロウソク足の数)を入力
- mult:標準偏差のファクター
例えば、価格の終値を使用して、SMAの期間20、標準偏差2のボリンジャーバンドを表示したい場合は、コードを以下のように書きます。
bb(close, 20, 2)
bb関数を使わないコードの書き方
bb関数を使わずにボリンジャーバンドを作成するには、標準偏差の組み込み関数stdev()を使うと簡単に書くことができます。
//bb関数を使わずにボリンジャーバンドを作成する
dev = stdev(close,20)
base_line = sma(close,20)
sigma_p1 = base_line + dev
sigma_p2 = base_line + dev * 2
sigma_m1 = base_line - dev
sigma_m2 = base_line - dev * 2
ケルトナーチャネル「kc()」
ケルトナーチャネルは移動平均の上下に一定の距離でチャネルを表示させるインジケーターです。チャネルの幅には高値と安値の差やトゥルーレンジを用います。
Pineスクリプトではケルトナーチャネルのコードを以下のように書きます。
kc(series, length, mult, useTrueRange)
- series:始値(open)、終値(close)、高値(high)、安値(low)などから使用する値を選択
- length:SMA計算に使用する期間(ロウソク足の数)を入力
- mult:標準偏差のファクター
- useTrueRange:トゥルーレンジを使用するかどうか。デフォルトはTrue。
今回はPineスクリプトのトレンド系インジケーター関数をご紹介しました。
Pineスクリプトはチャート分析に特化したプログラミング言語なので、他にも様々なインジケーター関数があります。オリジナルのインジケーターを作るときも非常に便利ですね!
他にもRSIやストキャスティクスなどのインジケーター関数やOBV、MFIなどの出来高を使ったインジケーター関数も紹介しています。
トレーディングビューのアカウントを作成する
Trading View
本記事で使用しているトレーディングビューはPineスクリプトでバックテストを行う以外にも、自分のオリジナルインジケーターを作成したり、世界中のトレーダーが作成したオリジナルのインジケーターを使うことも可能です。
FX、株、ETF、コモディティなど国内外問わず様々な銘柄に対応しています。アカウントをお持ちでない方は以下リンクから作成できます。
コメント