2017年5月24日水曜日

[Trading View]Pineスクリプト 入門3 インジケータスクリプトの全体とパラメータ定義

Trading ViewでのPine Scriptです。

次のコードは練習がてらに公開しているGMMAのソースです。

PineスクリプトはMQLのように関数定義を必須としていません。
いきなり処理がスタートします。

//@version=3
study("GMMA", overlay=true)

//inputs
_Period1 = input(3, "EMA1 Period")
_Period2 = input(5, "EMA2 Period")
_Period3 = input(8, "EMA3 Period")
_Period4 = input(10, "EMA4 Period")
_Period5 = input(12, "EMA5 Period")
_Period6 = input(15, "EMA6 Period")
_Period7 = input(30, "EMA7 Period")
_Period8 = input(35, "EMA8 Period")
_Period9 = input(40, "EMA9 Period")
_Period10 = input(45, "EMA10 Period")
_Period11 = input(50, "EMA11 Period")
_Period12 = input(60, "EMA12 Period")


//calculate ema
ema1 = ema(close, _Period1)
ema2 = ema(close, _Period2)
ema3 = ema(close, _Period3)
ema4 = ema(close, _Period4)
ema5 = ema(close, _Period5)
ema6 = ema(close, _Period6)
ema7 = ema(close, _Period7)
ema8 = ema(close, _Period8)
ema9 = ema(close, _Period9)
ema10 = ema(close, _Period10)
ema11 = ema(close, _Period11)
ema12 = ema(close, _Period12)

plot(ema1, color=green, title="short1")
plot(ema2, color=green, title="short2")
plot(ema3, color=green, title="short3")
plot(ema4, color=green, title="short4")
plot(ema5, color=green, title="short5")
plot(ema6, color=green, title="short6")

plot(ema7, color=red, title="long1")
plot(ema8, color=red, title="long2")
plot(ema9, color=red, title="long3")
plot(ema10, color=red, title="long4")
plot(ema11, color=red, title="long5")
plot(ema12, color=red, title="long6")

MQLをやっている人は、あれ?、昔のバーの処理していない??と思われるかもしれません。
Trading Viewのインジケータは、処理としてBar毎に一回呼び出される(最新バーのみTick毎)となるようです。MQLのOnTickのように、すべてのバーに対して計算をするループ文は不要です。Trading Viewの特徴として、見えている範囲のインジケータ値しか生成しません。チャートの縮尺変更が入り新しいバーがチャート上に出現した場合、生成されたバー数分だけこのスクリプトが呼び出される形です。MQLになれた人はOnTick内のforループの中身だけ書くというとわかりやすいでしょうか?

さて、もう少し細かく見ていきたいと思います。まずインジケータパラメータです。
//inputs
_Period1 = input(3, "EMA1 Period")

インジケータパラメータはinput関数で指定します。

上記の例は、
「EMA1 Periodという名前のパラメータの設定結果を_Period1という変数を「宣言」して中身に入れなさい。」
という構文です。(=は変数宣言構文なので注意)

input関数で定義すると、インジケータをチャートにセットした後、設定ボタンを押したときの画面に出てくるようになります。

■GMMAのパラメータ

このinput関数は入力に関する様々な制御が可能です。
型の指定、入力制限などを行えます。あと、インジケータの入力配列などを切り替えも可能です。ちょっとGMMAを修正してみましょう。

//@version=3
study("GMMA", overlay=true)

//inputs
_Source = input(close, "Target Source")
_Period1 = input(3, "EMA1 Period")
_Period2 = input(5, "EMA2 Period")
_Period3 = input(8, "EMA3 Period")
_Period4 = input(10, "EMA4 Period")
_Period5 = input(12, "EMA5 Period")
_Period6 = input(15, "EMA6 Period")
_Period7 = input(30, "EMA7 Period")
_Period8 = input(35, "EMA8 Period")
_Period9 = input(40, "EMA9 Period")
_Period10 = input(45, "EMA10 Period")
_Period11 = input(50, "EMA11 Period")
_Period12 = input(60, "EMA12 Period")


//calculate ema
ema1 = ema(_Source, _Period1)
ema2 = ema(_Source, _Period2)
ema3 = ema(_Source, _Period3)
ema4 = ema(_Source, _Period4)
ema5 = ema(_Source, _Period5)
ema6 = ema(_Source, _Period6)
ema7 = ema(_Source, _Period7)
ema8 = ema(_Source, _Period8)
ema9 = ema(_Source, _Period9)
ema10 = ema(_Source, _Period10)
ema11 = ema(_Source, _Period11)
ema12 = ema(_Source, _Period12)

plot(ema1, color=green, title="short1")
plot(ema2, color=green, title="short2")
plot(ema3, color=green, title="short3")
plot(ema4, color=green, title="short4")
plot(ema5, color=green, title="short5")
plot(ema6, color=green, title="short6")

plot(ema7, color=red, title="long1")
plot(ema8, color=red, title="long2")
plot(ema9, color=red, title="long3")
plot(ema10, color=red, title="long4")
plot(ema11, color=red, title="long5")
plot(ema12, color=red, title="long6")

■計算配列を指定できるようにしたGMMAのパラメータ


input関数の使用例をコメント付きでまとめておきます。

//整数型の入力
_inputInt = input(0, "int type", integer)

//整数値入力の最大最小値指定
_inputIntMinMax = input(0, "int type minmax", type=integer, minval=0, maxval=10)

//整数値入力のステップ指定
_inputIntStep = input(0, "int type step", type=integer, minval=0, maxval=10, step=2)

//整数値入力の入力限定
_inputIntOpt = input(0, "int type opt", type=integer, options=[0, 4, 8])


//浮動小数点型の入力
_inputFloat = input(0, "float type", float)

//浮動小数点入力の最大最小値指定
_inputFloatMinMax = input(0, "float type minmax", type=float, minval=0.0, maxval=2.5)

//浮動小数点入力のステップ指定
_inputFloatStep = input(0, "float type step", type=float, minval=0.0, maxval=2.5, step=0.1)

//浮動小数点入力の入力限定
_inputFloatOpt = input(0, "float type opt", type=float, options=[0.0, 1.5, 3.0])

//論理値
_boolInput = input(true, "bool type", type=bool)

//文字列
_stringInput = input("abc", "string type", type=string)

//文字列の入力制限
_stringInputOpt = input("abc", "string type opt", type=string, options=["abc", "def", "ghi"])

//通貨ペア/株価コード
_symbol = input("EURUSD", "symbol type", type=symbol)

//足の解像度(1時間足とか1日足など) 入力は分単位
_resolutionInput = input(60, "resolution type", type=resolution)

//入力配列(チャートに存在する配列を指定可能)
_sourceInput = input(close, "source type", type=source)

//セッション(時間範囲) hhmm-hhmmで指定する。・・が指定するとインジケータが異常終了する・・・。
//_sessionInput = input("0900-1500", "session type", type=session)

//チャート挿入時、入力必須のパラメータの場合confirm=trueを指定する。
//Pineエディタからチャートの追加ボタンを押した場合は動かない
//チャートコンテキストメニュー→インジケーターの挿入からは有効
_confirm = input(0, "confirm", type=integer, confirm=true)


「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program
Trading View プロフィール

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ FX テクニカルトレード派へ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。