Pine講座⑪ 2行でATRを表示するPineスクリプトはオシレーター系の指標の描画も簡単です。
ほとんどの指標を2行で出力できると思います。
今日はATR。
=====
//@version=3
study( "2行でATRを表示する" )
plot( ema( tr ,20 ) )
=====
Pineスクリプトでは、「tr」という独自変数があります。
これは、close、openなどと同じようにtr(True Range)を取得することができる変数です。
atr( ) という関数も用意されていますが、
EMA(指数平滑移動平均)のATRが欲しいので ema( tr ,20 ) として算出しています。
Pinescript
Pine講座⑩ GMMA を表示するチャートに重ねるインジケーターは、今回で最後にしようと思います!
次回からはオシレーター系を連載していきます!!
最後のトレンド系インジケーターは
「GMMA」
TradingViewなら、
簡単にプログラムを組むことができます^^
==========
//@version=3
study( "GMMA を表示する" ,overlay=true )
// plot( ) と ema( ) の2つの関数を組み合わせる
plot( ema( close , 3 ) ,color=green ,title="short1" )
plot( ema( close , 5 ) ,color=green ,title="short2" )
plot( ema( close , 8 ) ,color=green ,title="short3" )
plot( ema( close ,10 ) ,color=green ,title="short4" )
plot( ema( close ,12 ) ,color=green ,title="short5" )
plot( ema( close ,15 ) ,color=green ,title="short6" )
plot( ema( close ,30 ) ,color=red ,title="long1" )
plot( ema( close ,35 ) ,color=red ,title="long2" )
plot( ema( close ,40 ) ,color=red ,title="long3" )
plot( ema( close ,45 ) ,color=red ,title="long4" )
plot( ema( close ,50 ) ,color=red ,title="long5" )
plot( ema( close ,60 ) ,color=red ,title="long6" )
==========
Pine講座⑨ ハイローバンドにブレイクも表示する昨日のプログラムに2行追加するだけで、
ブレイクを表示することができるようになります。
今日は追加部分だけ解説を入れますね。
==========
//@version=3
study( "ハイローバンドとプレイクを表示する" ,overlay=true )
length = input( 20 ,title="計算する期間" )
highest = highest( high ,length )
lowest = lowest( low ,length )
middle = ( highest + lowest ) / 2
plot( middle ,offset=1 ,color=red )
p1 = plot( highest ,offset=1 )
p2 = plot( lowest ,offset=1 )
fill( p1 ,p2 )
// チャートにshapeを描画する
// high > highest (最高値のブレイク)のときだけ描画
// highest は1本前のデータを取得している
plotshape( high > highest ,location=location.abovebar ,style=shape.triangleup ,color=gray )
// low < lowest (最安値のブレイク)のときだけ描画
plotshape( low < lowest ,location=location.belowbar ,style=shape.triangledown ,color=gray )
==========
Pine講座⑧ ハイローバンドを表示するPineスクリプトには、期間中の最高値や最安値を取得する関数も用意されています。
highest( high ,20 ) → 過去20本の最高値を取得
lowest( low ,20 ) → 過去20本の最安値を取得
この中間点を求めたのが、一目均衡表の均衡点ですね!
=====
//Pineのバージョンとインジケーターの宣言
//@version=3
study( "ハイローバンドを表示する" ,overlay=true )
//設定項目を指定し、その初期値を変数に格納
length = input( 20 ,title="計算する期間" )
//変数 length に格納されている期間中の最高値
highest = highest( high ,length )
//最安値と中間
lowest = lowest( low ,length )
middle = ( highest + lowest ) / 2
//最高値と最安値を変数に格納しつつチャートに描画
//offsetでplotの位置を左右にずらせる
//今回は1本前の計算値に対するブレイクアウトを見るために1本分ずらしている
p1 = plot( highest ,offset=1 )
p2 = plot( lowest ,offset=1 )
//中間をチャートに描画
plot( middle ,offset=1 ,color=red )
//最高値と最安値の間を塗りつぶす
fill( p1 ,p2 )
=====
Pine講座⑦ 出来高加重移動平均(VWMA)を表示するPineスクリプトでは、移動平均を求める関数がいくつか用意されています。
sma( )、ema( )、alma( )、wma( )、swma( )、vwma( )、rma( ) などです。
テクニカル指標は「複雑な計算をすれば良い」というものではありません。
むしろ、一目均衡表の均衡点(半値)、移動平均線の平均値など、シンプルな指標の方が良いと考えています。
それぞれの使い方は、公式のドキュメントにお願いするとして、ここでは、個人的に好きな vwma( ) の使い方を解説してみようと思います。
vwma( ) は出来高を考慮して価格を平均するものです。
なので、「期間の約定価格の平均値として最も正確である」と考えています。
(平均値として正確なのが指標として良いかどうかは別問題ですが・・)
出来高の数値がとれない銘柄では表示することができないので、使用するのにはちょっとした工夫が必要です。
=====
//@version=3
study( "出来高加重移動平均(VWMA)を表示する" ,overlay=true )
//設定項目の指定し、値を変数に格納する
price = input( close ,title="MAの対象" )
length1 = input( 20 ,title="MAの期間①" )
length2 = input( 40 ,title="MAの期間①" )
//変数をもとに移動平均を算出し、新たな変数に格納
//「A ? B : C」は三項演算子(Aが成り立つならB、そうでないならC)
//ここでは、volume の数値が確認できたら vwma( ) 、できないなら ema( ) としている
ma1 = sma( volume ,length1 ) > 0 ? vwma( price ,length1 ) : ema( price ,length1 )
ma2 = sma( volume ,length2 ) > 0 ? vwma( price ,length2 ) : ema( price ,length2 )
//算出した数値を描画する
plot( ma1 ,color=red )
plot( ma2 )
=====
今回から、コメントアウト(「//~~」のこと)で解説を書いていきたいと思います!
過去の投稿にも追記していますので、ご興味がある方は確認されてみてください^^!
Pine講座⑥ エンベロープを表示する今日はエンベロープを表示してみます。
数値は足種や銘柄に応じて調整をする必要があります。
=====
//@version=3
study( "エンベロープを表示する" ,overlay=true )
price = input( close ,title="EMAの対象" )
length = input( 20 ,title="EMAの期間" )
ema = ema( price ,length )
plot( ema + ema * 0.04 ,linewidth=2 )
plot( ema + ema * 0.03 )
plot( ema + ema * 0.025 ,transp=75 )
plot( ema + ema * 0.02 )
plot( ema + ema * 0.015 ,transp=75 )
plot( ema + ema * 0.01 ,color=red )
plot( ema ,color=red )
plot( ema - ema * 0.01 ,color=red )
plot( ema - ema * 0.015 ,transp=75 )
plot( ema - ema * 0.02 )
plot( ema - ema * 0.025 ,transp=75 )
plot( ema - ema * 0.03 )
plot( ema - ema * 0.04 ,linewidth=2 )
=====
このように、Pineスクリプトを使えば、
何本でも移動平均線を表示することができます。
今日、新しく出てきたのは「transp」。
これは plot( ) する線の透明度を調整することができる項目です。
100にすると透明度が100%で、何も表示されなくなります。
Pine講座④ EMAの間を塗りつぶすやることが増えるごとにコードの行数も増えます。
追加したのはEMAの間を塗りつぶす機能。
EMAのクロスで塗りつぶす色を切り替えます。
=====
//@version=3
study( "EMAの間を塗りつぶす" ,overlay=true )
price = input( close ,title="EMAの対象" )
length1 = input( 5 ,title="EMA1の期間" )
length2 = input( 20 ,title="EMA2の期間" )
length3 = input( 40 ,title="EMA3の期間" )
// 変更点①
ema1 = ema( price ,length1 )
ema2 = ema( price ,length2 )
ema3 = ema( price ,length3 )
// 変更点②
p1 = plot( ema1 ,color=red )
p2 = plot( ema2 ,color=blue )
p3 = plot( ema3 ,color=green )
// 変更点③
fill( p2 ,p3 ,color = ema2 > ema3 ? blue : green )
=====
< 変更点① >
今まで plot( ) の中で実行していた ema( ) を外に出しました。
ema1 = ema( ) という形にすることで、
・ema1 として何度も使える
・計算の実行が1回で済む
というメリットがあります。
上の例での「ema1」を変数と言います。
変数を使うことで読みやすくて動作の軽いコードにすることができます。
< 変更点② >
plot( ) も変数に格納しておきます。
< 変更点③ >
fill( ) という、線の間を塗りつぶす関数を使います。
p2 と p3 は plot( ) で出力したEMAの線ですね。この2本の間を塗りつぶします。
同時に以下の箇所で色の指定を行っています。クロスで色を変更する機能ですね。
color = ema2 > ema3 ? blue : green
2本の計算値を比較するので、使う変数は ema2 と ema3。
{条件} ? {条件を満たす場合} : {条件を満たさない場合}
という形で、場合分けを行っています。
ema2は20日のEMA、ema3は40日のEMAですから、
ema2 > ema3 は 20日のEMAが40日のそれよりも上にある状態を指しています。
Pine講座㉘ バックテスト|未決済を含めた残高を時系列で表示する前回、表示させた残高は「決済済みだけの残高」でした。
今回は「未決済(取引中)の損益も含めた残高」を表示させます。
(取引会社によって各社の表現が異なるので難しいのですが、、英語だと「account value」とされる項目です)
TradingViewでは、この資金量に応じて取引量を調整するようなロジックを組むこともできます。
=====
//@version=4
strategy( "MovingAvg2Line Cross" )
fastLength = input( 9 )
slowLength = input( 18 )
price = close
balance = strategy.initial_capital + strategy.netprofit
// ここで未決済を含む残高を算出
accountValue = balance + strategy.openprofit
mafast = sma( price ,fastLength )
maslow = sma( price ,slowLength )
if ( crossover( mafast ,maslow ) )
strategy.entry( "MA2CrossLE" ,strategy.long ,comment="MA2CrossLE" )
if ( crossunder( mafast, maslow ) )
strategy.entry( "MA2CrossSE" ,strategy.short ,comment="MA2CrossSE" )
plot( strategy.initial_capital )
plot( balance )
// 描画する
plot( accountValue ,color=color.red)
=====
Pine講座㉚ バックテスト|算出した取引量で売買する前回までに算出した取引量で売買していきます。
といっても、
予め用意された引数に「計算した取引量」
渡してあげるだけなので、何にも難しいことはありません。
更新した箇所のみ、解説を入れます。
=====
//@version=4
strategy( "MovingAvg2Line Cross" ,initial_capital=100000 )
fastLength = input( 9 )
slowLength = input( 18 )
price = close
balance = strategy.initial_capital + strategy.netprofit
accountValue = balance + strategy.openprofit
amount_rate = 0.005
atr = ema( tr ,20 )
//取引量を算出
//今回はここで1000通貨に丸める
amount = round( ( ( balance * 0.005 ) / atr ) / 1000 ) * 1000
mafast = sma( price ,fastLength )
maslow = sma( price ,slowLength )
if ( crossover( mafast ,maslow ) )
//取引量を追加
strategy.entry( "MA2CrossLE" ,strategy.long ,amount ,comment="MA2CrossLE" )
if ( crossunder( mafast, maslow ) )
//取引量を追加
strategy.entry( "MA2CrossSE" ,strategy.short ,amount ,comment="MA2CrossSE" )
plot( balance )
=====
チャート上の売買の箇所に「+9000」「-12000」などの
数字がありますが、これが取引量を表しています。
前回までのバックテストと、取引量が違うことが分かると思います。
(前回までは、一括して「資金量の関係ない取引量」が指定されている)
Pine講座㉒ ラインとラベルを組み合わせる使い方は、発想次第で無限大なのですが、
こんな使い方があるよという例をひとつ。
20日間の最高値と最安値、その中間点を描画するインジケーターです。
=====
//@version=4
study( "ラインとラベルを組み合わせる", overlay=true )
// 20日間の高値、安値、均衡点を算出
H = highest( high ,20 )[1]
L = lowest( low ,20 )[1]
M = ( H + L ) / 2
// lineの宣言
var line h = na
var line m = na
var line l = na
// 古いものがあれば削除
line.delete( h )
line.delete( m )
line.delete( l )
// lineを描画
h := line.new( x1=bar_index[20] ,y1=H ,x2=bar_index ,y2=H, extend=extend.right )
m := line.new( x1=bar_index[20] ,y1=M ,x2=bar_index ,y2=M, extend=extend.right )
l := line.new( x1=bar_index[20] ,y1=L ,x2=bar_index ,y2=L, extend=extend.right )
// labelを宣言
var label label_h = na
var label label_m = na
var label label_l = na
// 古いものは削除
label.delete( label_h )
label.delete( label_m )
label.delete( label_l )
// labelを描画
label_h := label.new( bar_index[20] ,H , style=label.style_none, text="high20" )
label_m := label.new( bar_index[20] ,M , style=label.style_none, text="middle20" )
label_l := label.new( bar_index[20] ,L , style=label.style_none, text="low20" )
=====
Pine講座⑳ labelでインフォパネルを表示するlabel関数を使うと、インフォパネルのようなものを設置することもできます。
Pineスクリプト上で取得できるほぼ全てデータを表示することができます。
=====
//@version=4
study( "labelでインフォパネルを表示する", overlay=true )
var label l = na
label.delete(l)
l := label.new( timenow + round(change(time)*15), close ,
xloc=xloc.bar_time, yloc=yloc.price, style=label.style_labelup,
text="label test x="+tostring(bar_index)+" y="+tostring(close) )
=====
label.new( ) の関数だけだと、ローソク足が増える度にチャート上のlabelが増えていってしまいます。そこで、「label.delete(l)」で都度、削除してあげる必要があります。以下の流れですね。
1.var label l = na
「l」というlabelがあると宣言
2.label.delete(l)
古いlabel「l」があれば削除
3.label.new( )
labelを表示
Pine講座⑲ 2行でlabelを表示する日本ではまだ公式に発表されていませんが、
6月頃にPineスクリプトのversion4がリリースされました。
大きな変更点は、
チャートにlabelとlineを描画できるようになったことです。
文字の出力も、かなり自由にできるようになりました。
=====
//@version=4
study( "label を表示する", overlay=true )
label.new( bar_index, high, style=label.style_none, text="x=" + tostring(bar_index) + " y=" + tostring(high) )
=====
bar_index : ローソク足番号(毎回変わる)
出力内容は、
text="x=" + tostring(bar_index) + " y=" + tostring(high)
の部分。
というのは改行のことです。
これがないと改行されずに出力されます。
Pine講座⑤ ボリンジャーバンドを表示する今日はPineスクリプトでボリンジャーバンドを表示する方法です。
=====
//@version=3
study( "ボリンジャーバンドを表示する" ,overlay=true )
price = input( close ,title="計算の対象" )
length = input( 20 ,title="算出する期間" )
sma = sma( price ,length )
dev = stdev( price ,length )
plot( sma )
plot( sma + dev )
plot( sma + dev * 2 )
plot( sma - dev )
plot( sma - dev * 2 )
=====
Pineスクリプトでは、stdev( ) という標準偏差を算出する関数が用意されています。
いわゆる シグマ (σ) ですね。
シグマを算出して、足したり引いたりして plot( ) するだけです。
簡単ですね!
Pine講座③ EMAを複数表示するEMAを複数表示するのは簡単ですね。
講座②までのものを、
表示したい数だけ増やしてあげれば良いだけです。
これができれば何十本ものEMAを表示することもできます。
あんまり多いと表示に時間がかかったり、
どこかに上限があったりするとは思いますが。
=====
//@version=3
study( "EMAを3本表示する" ,overlay=true )
price = input( close ,title="EMAの対象" )
length1 = input( 5 ,title="EMA1の期間" )
length2 = input( 20 ,title="EMA2の期間" )
length3 = input( 40 ,title="EMA3の期間" )
plot( ema( price ,length1 ) ,color=red )
plot( ema( price ,length2 ) ,color=blue )
plot( ema( price ,length3 ) ,color=green )
=====
Pine講座② EMAに設定項目を追加する①で表示したインジケーターに設定項目を追加します。
こうすることで、他のインジケーターと同様に、
歯車マークの設定画面から様々な数値の調整ができるようになります。
=====
//@version=3
study( "EMAに設定項目を加える" ,overlay=true )
price = input( close ,title="EMAの対象" )
length = input( 20 ,title="EMAの期間" )
plot( ema( price ,20 ) ,color=red )
=====
この例では、以下の設定項目を追加しています。
・EMAを算出する対象を選択できるように
・EMAを算出する期間を変更できるように
EMAの対象というのは、終値で計算するのか、始値、高値、安値にするのかなどの調整ですね。
Pine講座① たった2行で移動平均線が出せるせっかくなので、たまにご要望のあるPineスクリプト講座をやってみようと思います!
シンプルに、シリーズでちょっとずつ。
今回のコードはこちら!
=====
//@version=3
study( "たった2行でEMAが出せる" ,overlay=true )
plot( ema(close ,20) ,color=red )
=====
Pineスクリプトのすごいところは、このシンプルさです。
たった2行でインジケーターが出せてしまうのはスゴイ。他の言語ではありえない簡単さです。
チャート画面の下の方にある「Pine エディタ」からできます。
今回出せるのはただのEMA(指数平滑移動平均線)ですが、以下の手順で、ぜひ表示してみてください^^
1.Pineエディタ をクリック
2.入力されているコードをすべて消して、上記のコードを貼り付ける
3.エディタの右上にある「チャートに追加」をクリック