pine スクリプトでは関数は第 1 級オブジェクトではないので、関数を定義する使い方はできません。
例:
例:
ma_fn := ma_type == "SMA" ? sma : ema
Published: August 10, 2019
引き続き、MA Ribbon に機能を追加して、より使いやすいインジケータを作成してみたいと思います。
色を変更するためにはplot
のcolor
を使います。
//@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)
きれいなグラフになってきました。
この記事によると、
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)
ポイントは次のとおりです。
利用する平滑化関数を入力ダイアログから変更できるようにする。
次のように input 関数を利用することにより、ダイアログを利用して EMA か SMA かを選択できるようにします。
ma_type = input(title="ma", defval="SMA", options=["SMA","EMA"])
input 関数を利用して定義した変数は、次のように設定画面から簡単に切り替えが行うことができるようになります。
選択した値を利用して平滑化関数を切替可能にする。
ma_fn(src, period) =>
ma_type == "SMA" ? sma(src, period) : ema(src, period) // 2
1.で選択した値が"SMA"であればsma
関数を利用し、そうでない場合はema
関数を利用するように利用する関数を切り替えます。
以上の定義で、切り替える仕組みができました。
input
の中身はわかりやすく
平滑化関数を定義してそれを利用する
Tags
share
Others