移動平均エンベロープを最大3本表示!%値や色も変更可能なTradingView用インジケーター【EMA対応/PineScriptサンプルコード付き(v5対応済)】

「移動平均エンベロープ」とは、移動平均の上下数%に平行したラインを引くインジケーターで、移動平均からの乖離率が視覚化しやすくなります。

TradingViewにも「Envelope」という名前の内蔵インジケーターがありますが、もう少し色々設定できるものが欲しかったので自作してみました。

・最大3本までのエンベロープを同時に引けます
・不要なエンベロープは設定で非表示にできます
・エンベロープの%値や色も自由に変更できます
・SMAとEMAの両方に対応しています(切り替え可能)

Pine言語のサンプルコード付きで公開しますので、ぜひご利用ください。

【2022年3月12日 追記】
Pineスクリプトのバージョン5(v5)に対応したサンプルコードも追加しました。
目次

本インジケーターの概要

1つのインジケーターで最大3本のエンベロープを表示できます。不要なエンベロープは非表示にできるので、1本や2本だけ使いたいという方でもOKです。

各エンベロープは%値や色を設定できますし、SMAだけでなくEMAでの計算にも対応しています。

初期設定

MA終値の25日単純移動平均線(SMA)白色(透過率50%)
エンベロープ1MA ± 1%表示する / ライム色(不透明度30%)
エンベロープ2MA ± 2%表示する / ライム色(不透明度50%)
エンベロープ3MA ± 3%表示する / ライム色(不透明度80%)

設定変更可能なパラメータ

インジケーターの設定画面は、以下のような構成となっております。

(1) 移動平均線の計算対象価格を変更したい時
「計算価格」を変更すると、高値や出来高などでも計算可能です。

(2) 移動平均線を計算する長さ(足数)を変更したい
たとえば日足で75日MAに変更したければ、「MA長さ」を「75」に変更してください。

(3) SMA/EMA切り替え
「EMAとして計算する」にチェックを入れると、単純移動平均線(SMA)ではなく指数平滑移動平均線(EMA)で計算します。

(4) エンベロープの%値とライン色
下の方にある「Env1 %」~「Env3 %」が各エンベロープの設定です。移動平均からの乖離率を%値で指定できます。

また一番右の色をクリックするとカラーパレットから色を選択できます。不透明度も変更可能。

(5) エンベロープの表示/非表示切り替え
各エンベロープ設定の左端にあるチェックを外すと、そのエンベロープは表示されなくなります。

サンプルコード

以下のコードをコピペしてお使いください。

サンプルコードを元にTradingViewインジケーターを作成する手順が分からない方は、以下の記事を参考にしてください。(記事内の手順3を今回のサンプルコードに置き換えて進めてみてください)

Pine(v5)バージョン

//@version=5
indicator(title="$TTOSample_MAEnv", shorttitle="MAEnv", overlay=true)

//-------------------------
// input設定
//-------------------------

src = input.source(close, title="計算価格", group="移動平均線の設定")
ma_length = input.int(25, title="MA 長さ", minval=1, inline="MA Settings", group="移動平均線の設定")
is_ema = input.bool(false, title="EMAとして計算する", inline="MA Settings", group="移動平均線の設定")

env1_enable = input.bool(true, "", inline="Env Pct 1", group="エンベロープ設定")
env1_pct    = input.float(1, "Env1 %", inline="Env Pct 1", group="エンベロープ設定")
env1_color  = input.color(color.new(color.lime, 70), "", inline="Env Pct 1", group="エンベロープ設定")

env2_enable = input.bool(true, "", inline="Env Pct 2", group="エンベロープ設定")
env2_pct    = input.float(2, "Env2 %", inline="Env Pct 2", group="エンベロープ設定")
env2_color  = input.color(color.new(color.lime, 50), "", inline="Env Pct 2", group="エンベロープ設定")

env3_enable = input.bool(true, "", inline="Env Pct 3", group="エンベロープ設定")
env3_pct    = input.float(3, "Env3 %", inline="Env Pct 3", group="エンベロープ設定")
env3_color  = input.color(color.new(color.lime, 20), "", inline="Env Pct 3", group="エンベロープ設定")

//-------------------------
// メイン処理
//-------------------------

ma_value = is_ema ? ta.ema(src, ma_length) : ta.sma(src, ma_length)
plot(ma_value, title="MA", color=color.new(#ffffff, 50))

plot(env1_enable ? ma_value * (1 + env1_pct/100) : na, color=env1_color)
plot(env1_enable ? ma_value * (1 - env1_pct/100) : na, color=env1_color)

plot(env2_enable ? ma_value * (1 + env2_pct/100) : na, color=env2_color)
plot(env2_enable ? ma_value * (1 - env2_pct/100) : na, color=env2_color)

plot(env3_enable ? ma_value * (1 + env3_pct/100) : na, color=env3_color)
plot(env3_enable ? ma_value * (1 - env3_pct/100) : na, color=env3_color)

Pine(v4)バージョン

//@version=4
study(title="$TTOSample_MAEnv", shorttitle="MAEnv", overlay=true)

//-------------------------
// input設定
//-------------------------

src = input(close, type=input.source, title="計算価格", group="移動平均線の設定")
ma_length = input(25, title="MA 長さ", minval=1, inline="MA Settings", group="移動平均線の設定")
is_ema = input(false, title="EMAとして計算する", inline="MA Settings", group="移動平均線の設定")

env1_enable = input(true, "", inline="Env Pct 1", group="エンベロープ設定")
env1_pct    = input(1, "Env1 %", inline="Env Pct 1", group="エンベロープ設定")
env1_color  = input(color.new(color.lime, 70), "", type=input.color, inline="Env Pct 1", group="エンベロープ設定")

env2_enable = input(true, "", inline="Env Pct 2", group="エンベロープ設定")
env2_pct    = input(2, "Env2 %", inline="Env Pct 2", group="エンベロープ設定")
env2_color  = input(color.new(color.lime, 50), "", type=input.color, inline="Env Pct 2", group="エンベロープ設定")

env3_enable = input(true, "", inline="Env Pct 3", group="エンベロープ設定")
env3_pct    = input(3, "Env3 %", inline="Env Pct 3", group="エンベロープ設定")
env3_color  = input(color.new(color.lime, 20), "", type=input.color, inline="Env Pct 3", group="エンベロープ設定")

//-------------------------
// メイン処理
//-------------------------

ma_value = is_ema ? ema(src, ma_length) : sma(src, ma_length)
plot(ma_value, title="MA", color=color.new(#ffffff, 50))

plot(env1_enable ? ma_value * (1 + env1_pct/100) : na, color=env1_color)
plot(env1_enable ? ma_value * (1 - env1_pct/100) : na, color=env1_color)

plot(env2_enable ? ma_value * (1 + env2_pct/100) : na, color=env2_color)
plot(env2_enable ? ma_value * (1 - env2_pct/100) : na, color=env2_color)

plot(env3_enable ? ma_value * (1 + env3_pct/100) : na, color=env3_color)
plot(env3_enable ? ma_value * (1 - env3_pct/100) : na, color=env3_color)

おわりに

今後も「かゆいところに手が届く」「日本語表記で分かりやすい」インジケーターのサンプルコードを色々と作ってみようと思っています。

ブログの記事更新はTwitter(@eltraders)または本ページ右から登録できる「メルマガTTO通信」でお知らせしているので、ぜひフォローorご購読よろしくお願いします。

TradingViewの
基本操作を覚えたい方へ

約1時間でTradingViewの基本操作をマスターできるオンライン講座を用意しました。アカウント開設からチャートの使い方まで動画でサクッと学べます。

講座を受講する

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメント一覧 (2件)

    • ご要望ありがとうございます。
      例えばパラメータ「Env1 %」を小数にしたい場合は、以下のように修正してください。

      ———————
      【修正前】
      env1_pct = input(1, “Env1 %”, inline=”Env Pct 1″, group=”エンベロープ設定”)

      【修正後】
      env1_pct = input(1, “Env1 %”, inline=”Env Pct 1″, group=”エンベロープ設定”, type=input.float, step=0.1)
      ———————

      同様に「Env2 %」はenv2_pctで始まる行を、「Env3 %」はenv3_pctで始まる行を、同じように修正してみてください。

      よろしくお願い致します。

ぽぽ へ返信する コメントをキャンセル

目次