キャプチャ

【Trading View】投資戦略テスターをマスターする為の解説書①~Pineエディタに触れてみよう~

[本noteは最後まで無料で読めます!]

「参考になった!」「ありがとう!」
と少しでも思って頂ければ私への応援をお願いします!


-------------------------
こんにちは!㋳と申します。
2017年12月から仮想通貨トレードに手を出し、億り人を目指して日々チャートに向かい合っていましたが、自分には
・勝ち易い状況まで待つこと
・損切りの下手さ(願掛けトレード)
・利益を目標まで握る握力の無さ(コツコツドカン)
と言う初心者丸出しのまま中々成長ができず、損失がどんどん膨らんでしまいました。
しかし簡単に諦めない性格の私は少しでも利益が欲しいと探しまくり、
自動システムトレード(BOT)の存在を知り独学でpythonの勉強を始め、たくさんの優しい方々に支えられようやく自動システムトレード(BOT)が組めるようになってきました。

自動システムトレード(BOT)は、人の感情に左右されず"ある指標"や"今の状態"によって機械的に注文/利確/損切りを行ってくれる為、感情的になりやすい自分には相性がよく勉強にのめり込んでいます。
まだBOTで利益は生み出せていませんが、ここまで勉強してきたことをまとめ直す事で新たな発見もありましたのでせっかくなので初心者さん応援の意味も込めて公開しようと思いました。

本noteの最終目標はBOTを構成するために必要なバックテストを容易に行うためにTrading Viewに内蔵されている「投資戦略テスター」を使いこなせる解説書を作る事です。
「投資戦略テスター」は下記画像のように、指標に基づいてトレードした場合の利益/損失を可視化してくれる非常に有益なツールです。

しかし、投資戦略テスターを作るためにはPineスクリプトをある程度触れるようにならなければなりません。
まずは第一章としてインジケータの作成を通じPineスクリプトの理解が少しでも進み、すごいインジケータが出来ればいいかなと思っています。
周り回って自分のもとにくればありがたく利用させてもらいます☆ω☆


…前置きはこの辺でさっそく解説に入っていきたいと思います。
(初めてPine エディタに触れる事を対象にしていますが、引数の解説などは中級者さんにも参考になるかもしれません。)


-------------------------
みなさんが普段みているチャート画面にローソク足以外に単純移動平均線(Simple_Moving_Average)等の「インジケータ」を表示させているのであればそれはPineスクリプトと言うプログラムで構成されて表現されています。
試しに、下記画面の通りにPineエディタを使ってPineスクリプトを体験してみましょう。

①Trading Viewのチャート画面の下部にある、「Pine エディタ」を押します。

②下記コードをコピーして、Pine エディタ内に貼り付けます。

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

// Inputs
priceData = input(title="Price data", type=source, defval=close)// 引用する価格情報
Length = input(title="SMA", type=integer, defval=5)// 期間の設定

// 指標計算
ma = sma(priceData, Length)

// Plot values
plot(series=ma, title="MA", color=blue, linewidth=2)

③チャートに追加をクリックします。

どうでしょう??
いつもみなさんが使っているであろう、単純移動平均線(期間:5)が表示されたのではないでしょうか。
プログラムに触れた事が無い人でもある程度の規則を理解して頂ければ、だれでも「オレオレインジケータ」を作成することが可能です。


それでは各行の意味を説明していきます。

①表題設定

//@version=3
必須入力項目
文字通りPineエディタで使用するプログラムのバージョンを指定します。
現在は2、もしくは3、のみが使用可能です。
基本的には新しいバージョンの3で問題ありません。

ちなみにちょこちょこ入っている

//○○~

// で始まる文章はプログラムコードには関係なく、いわゆるメモです。
始めのうちは自分や他の誰かが見ても内容が分かるようにいろいろな所にメモ書きを残しておく方が良いと思います。(体験談)
また、//は文中でなければコードの最後にも書き入れる事が出来ます。(サンプルプログラムの5/6行目の文末)こちらもうまく使ってください。


②インジケータの宣言

study(title, shorttitle, overlay, precision, scale, max_bars_back) 

study()はインジケータを宣言しています。
プログラミングの基本は、型式を事前に宣言して始まるのが基本です。
study()以外にはstrategy()を宣言できます。
こちらは「投資戦略テスター」を使用するための型式宣言です。
投資戦略テスターは今後別のnoteで説明する予定ですのでここでは触れないでおきます。
study()では以下の内容を入力します。

title
説明:このインジケータの名称
省略:不可
使用方法:
title = "名前"
注意:
・文字は" "(ダブルクォーテーション)で囲みます。
shorttitle
説明:チャート画面に表示するこのインジケータの名称
省略:可
使用方法:
shorttitle = "名前"
注意:
・省略した場合、titleで入力した名称がそのまま表示します。
あまりにも長いタイトルになってしまった場合にはこちらで簡易な名前を入力してあげましょう。
・文字は" "(ダブルクォーテーション)で囲みます。
overlay
説明:このインジケータをメインチャート(ローソク足を表現している画面)かサブチャート(MACDやRSI等)に表示させるか
省略:可
使用方法:
overlay = true
overlay = false
注意:
・trueでメインチャートに、falseでサブチャートに表示します。
・省略した場合、falseと認識します。
precision
説明:計算結果を画面に表示させる際の小数点以下の桁数
省略:可
使用方法:
precision = 10
注意:
・負(マイナス)でない整数しか入力できません。
・省略した場合、4と認識します。
・サンプル画像(上:10/下:4)

scale
説明:計算結果を画面に表示させる際の目盛りをどこに合わせるか
省略:可
使用方法:
scale = scale.right
scale = scale.right
scale = scale.none
注意:
・scale.noneは、overlay = trueでないと入力できません。
・省略した場合、メインチャートの目盛りとなります。
・設定すると目盛りを動かしてもインジケータの目盛りが固定されてしまいますので、設定をしない方が使いやすいと思います。
(サンプルコードに追加して試してみてください。)
max_bars_back
説明:過去値を使用できるバーの最大数
省略:可
使用方法:
max_bars_back = 200
注意:
・省略した場合、必要なバーの数は自動で計算されます。
・サンプルコードでは設定しても変化がありませんでした。
おそらく複雑になれば必要になることもあるのでしょうが、特に設定する必要性を感じませんでした。


③任意変数の準備

定義 = input(defval, title, type, minval, maxval, confirm, step, options) 

input()は、使用者側で任意で変更することが出来る「変数」項目の作成です。
今回の場合であれば、
 1)どの価格情報を引用するか
 2)SMAの期間
の2種類を可変設定にしています。
Trading Viewの画面では以下の項目を作り出しています。


通常、移動平均線の期間を5本分でずっと使い続ける事は無いでしょう。
その時の相場やシンボルに応じて最適値を探すために、あらかじめ可変にしておくことをおすすめします。

また、入力の仕方は
定義 = input()
となるように書きます。
この定義は日本語以外のローマ字、ローマ字+数字で構成します。
この定義を計算に使用したり、実際の表示に使用します。
input()では以下の内容を入力します。

defval
説明:デフォルト値
省略:不
使用方法:
defval = 5
注意:
・入力しないと始められない。
title
説明:入力の名称
省略:不
使用方法:
title = "SMA"
注意:
・文字は" "(ダブルクォーテーション)で囲みます。
type
説明:入力する変数の種類
省略:可
使用方法:
type = integer
type = source
…その他に、bool、float、string、symbol、resolution、session
注意:
・省略した場合、内容からPineスクリプトが自動で判断してくれます。
ただ誤訳にもつながりますので、可能な限り設定した方がよいでしょう。
・一般的によく使うもののみ解説します。
integer
 整数型
float
 浮動小数点型
source
 価格情報等でどの価格(Open/High/Low/Close/平均…)を使用したいかを選択します。(下記画像参照)

minval
説明:入力できる変数の最小値の指定
省略:可
使用方法:
minval = 1
注意:
・省略した場合、最小値の制限を設けません。
・サンプルコードでは項目を作っていませんが、例えばSMAの期間を"0"とした場合、計算することが出来なくなりますので、最小値は1~とした方がユーザーのポカミスも防止できます。
maxval
説明:入力できる変数の最大値の指定
省略:可
使用方法:
maxval = 1
注意:
・省略した場合、最大値の制限を設けません。
・minvalと同じ。
confirm
説明:入力値の再確認ウィンドウの表示
省略:可
使用方法:
confirm = true
confirm = false
注意:
・省略した場合、再確認表示をしません。
・入力値が本当にいいの?って別画面を表示します。
・個人的には設定した→OK→再OK?ってなるので、メンドクサイので使いません
step
説明:上下ボタンの変動幅の指定
省略:可
使用方法:
step = 5
注意:
・省略した場合、ボタン1回につき、"1"となります。(下記画像参照)
・一度に5ずつ増減させたい等、自分で効率的に最適値を探す場合の設定値です。
・個人的にはキーボードで直接入力する派なので使わないです。

options
・私の勉強不足で使い方がよくわかりませんでした。
・使い方が分かったら追記します。

④計算

ここからは実際の計算になります。
ですが簡単な指標を計算するだけでもいっぱいありますので、マニュアルの使い方を説明してお茶を濁します。。

検索から計算したい指標を入力し、候補をクリックします。

説明通りに、
定義 = sma(source, length)
となるように入力します。

この時に、input()で作った定義を思い出してください。
input()では、
・priceData(価格情報)=source
・Length(期間の長さ)=length

と定義しましたので、
ma = sma(priceData, Length)
と作ることで、価格情報も期間の長さも可変にすることが出来るようになりました。
このLengthを
ma = sma(priceData, 10)
と作れば、期間:10で常に固定された移動平均線を書くことが出来るようになります。

以下はよく目にするコードを置いておきます。

☆メインチャート用
指数加重移動平均(EMA)
定義 = ema(source, length)
☆サブチャート用
相対的強度指数(RSI)
定義 = rsi(source, length)

期間の違うEMAを定義を変えて12本作ればGMMAも自作できます。
事項の⑤描画(plot)を確認し表示させてみてください。

//input
_Period1 = input(defval = 3, title = "EMA1 Period")
_Period2 = input(defval = 5, title = "EMA2 Period")
_Period3 = input(defval = 8, title = "EMA3 Period")
_Period4 = input(defval = 10, title = "EMA4 Period")
_Period5 = input(defval = 12, title = "EMA5 Period")
_Period6 = input(defval = 15, title = "EMA6 Period")
_Period7 = input(defval = 30, title = "EMA7 Period")
_Period8 = input(defval = 35, title = "EMA8 Period")
_Period9 = input(defval = 40, title = "EMA9 Period")
_Period10 = input(defval = 45, title = "EMA10 Period")
_Period11 = input(defval = 50, title = "EMA11 Period")
_Period12 = input(defval = 60, title = "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(series, title, color, linewidth, style, trackprice, transp, histbase, offset, join, editable, show_last)

いよいよ最後に計算結果をチャート画面に出力させましょう。
出力にはplot()を使用します。
plot()は色や線のスタイル等細かく設定することができます。

series
説明:表示させるデータ
省略:不
使用方法:
series = ma
注意:
・入力しないと始められない。
・慣れてくればseries = sma(priceData,Length )等直接入力しても大丈夫です。
title
説明:表題
省略:不
使用方法:
title = "SMA"
注意:
・文字は" "(ダブルクォーテーション)で囲みます。
・省略した場合、plot1等になってしまい後々見にくくなるので名づけましょう。
color
説明:線の色
省略:可
使用方法:
color = red
color = #ff001A
注意:
・省略した場合、適当な色になります。(たぶん被らない色かなぁ、、)
・#ff001A は、パソコン上で表現できる色コードになります。
その他に使用してみたい色などは下記サイトさんから色を選んでコードを探してみてください。
linewidth
説明:線の太さ
省略:可
使用方法:
linewidth = 4
注意:
・省略した場合、1となり一番細い線になります。
・最大で4(一番太い)まで入力可能です。
style
説明:線の形
省略:可
使用方法:
style = line
style = cross
style = circles
…その他に、stepline、histogram、area、columns
注意:
・省略した場合、lineとなります。
・一般的によく使うもののみ解説します。
line
 値と値を直線でつなぐスタイルです。(画像の青色)
cross
 値を"+"で表現し、線ではつなぎません。(画像の赤色)
circles
 値を"●"で表現し、線ではつなぎません。(画像の紫色)

trackprice
説明:直近のインジケータの価格を水平線(ライン)として描写
省略:可
使用方法:
trackprice = true
trackprice = false
注意:
・省略した場合、価格ラインを表示しません。
・ご自身でチャートにトレンドライン等を引いて解析されるのであれば少々邪魔かもしれません。
transp
説明:線の透明度
省略:可
使用方法:
transp = 70
注意:
・省略した場合、30くらいで設定されるようです。
・(めっちゃ濃い)0-----50-----100(薄くて見えない)
histbase
説明:ヒストグラムを描写する際の開始地点の指定
省略:可
使用方法:
histbase = 100
注意:
・styleで、histogramまたはcolumnsを指定した際の追加のオプション。
・省略した場合、0.0から描写を始めます。
・メインチャートに描写させる際に、目盛りが合わず下にあり過ぎて見えない!って時に使用しましょう。(サブチャートに表示させる方がスマートです。)
offset
説明:線を意図的にバーの本数分ずらして表示させる機能
省略:可
使用方法:
offset = -5
注意:
・省略した場合、ずらさない(=0)から描写を始めます。
・負(-)は左に、正(+)は右にそれぞれずらします。

join
説明:点で描写するstyleに線を付与する
省略:可
使用方法:
join = true
注意:
・styleで、crossまたはcirclesを指定した際の追加のオプション。
・省略した場合、点のみで表現します。
editable
説明:描写のスタイルを固定したい際に使用
省略:可
使用方法:
editable = false
注意:
・style、color等表現方法のユーザー側で編集を認めない=ロックするオプションです。
・省略した場合、歯車マークで編集が可能な状態になります。
・汎用性を失わせる機能なので自分はお世話になることは無いかも。。
show_last
説明:指定のバー数分だけ表示させたい際に使用
省略:可
使用方法:
show_last = 10
注意:
・省略した場合、計算し表示できる分だけ表示させます。
・バー○本だけ表示させたい!って時に使用します。
・これも汎用性を失わせる機能なので自分は有効に使える気がしないオプションですね。


説明は以上です。
私もインジケータ作成はいろいろ挑戦してきましたが、あらためてマニュアルを読んでいると知らない事(知らなくても良い場合も多い)があって大変勉強になりました。

それでは第二弾(未定)でお会いしましょう。


ツイッターのフォローもよろしくお願いします!

たくさんの方の目に触れた方がいろいろ勉強できますので、ご参考になればこちらのツイをリツイートして頂ければサイコーです!


また、Pineスクリプトで使用する構文を出来るだけ簡単に作ることが出来るエクセルも合間見ながら作成中です!

こちらは第二弾完成した際の購入者特典での配布を考えています。
これもいつになるやら、、

続きをみるには

残り 88字

¥ 500

期間限定 PayPay支払いすると抽選でお得に!

お役立ていただけたら幸いです。もしもよろしければサポートをお願いします。 https://www.amazon.jp/hz/wishlist/ls/17TZXQ2T3YB7Z?ref_=wl_share