チャートに表示する情報を追加する

Published: August 10, 2019

引き続き、MA Ribbon に機能を追加して、より使いやすいインジケータを作成してみたいと思います。

色を追加する

色を変更するためにはplotcolorを使います。

//@version=4
study("MA Ribbon", overlay=true)

plot(sma(close, 5), color=#ff0000)
plot(sma(close, 10), color=#ff0033)
plot(sma(close, 15), color=#ff0066)
plot(sma(close, 20), color=#ff0099)
plot(sma(close, 25), color=#ff00cc)
plot(sma(close, 30), color=#ff00ff)
plot(sma(close, 35), color=#cc00ff)
plot(sma(close, 40), color=#9900ff)
plot(sma(close, 45), color=#6600ff)
plot(sma(close, 50), color=#3300ff)

sma color

きれいなグラフになってきました。

平均の計算方法を変更する

この記事によると、

The responsiveness of the indicator can be adjusted by changing the number of time periods used in the moving averages, or by changing the type of moving average from a simple moving average (SMA) to an exponential moving average (EMA).
移動平均を求める期間を変更する、もしくは平滑化関数を SMA から EMA に変更することでインジケータの応答性を調整できます。

ということなので、早速EMAと SMA とで切り替えられる仕組みを作りたいと思います。

使う関数はinput関数です。

//@version=4
study("MA Ribbon", overlay=true)

ma_type = input(title="ma", defval="SMA", options=["SMA","EMA"]) // 1

ma_fn(src, period) =>
  ma_type == "SMA" ? sma(src, period) : ema(src, period) // 2

plot(ma_fn(close, 5), color=#ff0000)
plot(ma_fn(close, 10), color=#ff0033)
plot(ma_fn(close, 15), color=#ff0066)
plot(ma_fn(close, 20), color=#ff0099)
plot(ma_fn(close, 25), color=#ff00cc)
plot(ma_fn(close, 30), color=#ff00ff)
plot(ma_fn(close, 35), color=#cc00ff)
plot(ma_fn(close, 40), color=#9900ff)
plot(ma_fn(close, 45), color=#6600ff)
plot(ma_fn(close, 50), color=#3300ff)

ポイントは次のとおりです。

  1. 利用する平滑化関数を入力ダイアログから変更できるようにする。

    次のように input 関数を利用することにより、ダイアログを利用して EMA か SMA かを選択できるようにします。

    ma_type = input(title="ma", defval="SMA", options=["SMA","EMA"])

    input 関数を利用して定義した変数は、次のように設定画面から簡単に切り替えが行うことができるようになります。

    setting

  2. 選択した値を利用して平滑化関数を切替可能にする。

    ma_fn(src, period) =>
      ma_type == "SMA" ? sma(src, period) : ema(src, period) // 2

    1.で選択した値が"SMA"であればsma関数を利用し、そうでない場合はema関数を利用するように利用する関数を切り替えます。

以上の定義で、切り替える仕組みができました。

sma ema

pine スクリプトでは関数は第 1 級オブジェクトではないので、関数を定義する使い方はできません。
例:
ma_fn := ma_type == "SMA" ? sma : ema

まとめ

  1. inputの中身はわかりやすく

  2. 平滑化関数を定義してそれを利用する

Tags

TradingViewindicatorチュートリアル:初級

share

Others