このシリーズの記事一覧 (クリックで開閉)
【 strategy解説(Pine) 】
これまで通りバーの上にわかりやすいようにラベルを表示させている。
bar_no = 0
if(bar_index > 21699 and bar_index < 21750)
bar_no := bar_index - 21699
l = label.new(bar_index,high+10000,text=tostring(bar_no),color=color.blue, textcolor=color.white,style=label.style_labeldown,yloc=yloc.price)次のコードは上のラベルが1の時に取引をするコードである。
if (bar_no == 1)
strategy.entry("LONG", strategy.long)このbar_noだけ私が用意した変数なので注意。足の頭に表示させた数字である。
strategy.exitstrategy.exitもstrategy.closeも**「ポジションを決済するコード」**だ。
この記事は引き続きstrategy.exitに絞って解説する。
前回はidとfrom_entryを解説した。
【Pine】strategy.exit「idとfrom_entry」【Trading View】
前回の内容は読んでいる前提で進める。
公式のドキュメントは次
Pineスクリプト言語リファレンスマニュアル — TradingView
まずは引数の一覧
strategy.exit(id, from_entry, qty, qty_percent, profit, limit, loss, stop, trail_price, trail_points, trail_offset, oca_name, comment, when)
limit: 指値決済stop: 逆指値決済※流れ的にqty, qty_percent, profitをスキップしているが別記事で解説する。初めにlimit, stopを理解していないと困るはず。
entry,orderのlimit,stopを勉強済みでも復習を以前の記事にてstrategy.orderのlimitとstopを詳しく解説した。
こちらの予備知識があれば基本的には同様だが
明示的にエントリー方向を指定するentry,orderと違いexitは決済する対象のポジションに応じてlimitとstopの挙動が変わるので注意だ。
※以下で解説するがショートを持っているときのexitのlimitは現在価格より低い位置である必要があるが、ロングを持っているときのlimitは現在価格より高い位置である必要がある。
limit,stopはentry,orderと同時に発注して良いコード
if (bar_no == 6)
strategy.entry("LONG", strategy.long)
strategy.exit("LONG_EXIT", "LONG", limit=1010000) //全く同じバーでentryとexitを同時に発行している=OKこれは正しく動作する。
なぜ、この項目を書いたかと言うとstrategy.exitではなく
strategy.closeの場合は同じバーで発注を出しても正しく決済されないという特性があるため。
予め注意しておきたい。もちろんバーを分けても正しく動作する。
記事の最後ににわからん人用の簡易チャートを設けた。
わからんければ表を見て判断すれば良い。
limit:指値で決済ではまず指値で決済するオプション。
コード
if (bar_no == 6)
strategy.entry("LONG", strategy.long)
strategy.exit("LONG_EXIT", "LONG", limit=1010000) //ここで101万円に指値決済を置く最初に成行でロング(99万7千あたり)し利確用の指値101万を配置。
正しく決済された例。
このようにlimitは**「利確」**で使う場合が多い。
exitの指値に指定している値は必ず次を守ること
ロングのlimit決済:exitするバーのcloseより高い価格を指定(主に利確)
ショートのlimit決済:exitするバーのcloseより低い価格を指定(主に利確)
limitを低い価格(NG)に置く実験例えば先程のロングのexit指値を1円に指定(現在価格よりも低い=NG価格に)すると....
if (bar_no == 6)
strategy.entry("LONG", strategy.long)
if (bar_no == 7)
strategy.exit("LONG_EXIT", "LONG", limit=1) //ここで1円に指値(現在価格より低い価格)結果は
exitした次のバーのopenにて決済されてしまった。
※この方法によりexitを使って成行クローズもできるが、恐らく想定された方法ではないので価格を指定せず成行したい場合はstrategy.closeを使おう。
stop:逆指値で決済stopは逆指値を指定する。逆指値の意味がわからない場合は私の過去記事を参照。
【Pine】strategy.orderとstrategy.entryのオプション「 stop 」【Trading View】
逆指値、ということはlimitとは逆の位置に価格を置く。
ロングの決済:exitするバーのcloseより低い価格を指定(主に損切)
ショートの決済:exitするバーのcloseより高い価格を指定(主に損切)
例を見てみよう。
コード
if (bar_no == 6)
strategy.entry("LONG", strategy.long)
strategy.exit("LONG_EXIT", "LONG", stop=993000) //993000で損切りSTOPつまりstopは「損切り」で使うことが多い。
stopを高い価格に置く実験limit同様やってはいけない価格にstopをおいてみよう。
ここでは「現在価格より高い位置」にstopを置く。
通常はlimitで利確するはずのものをstopと間違えてしまった場合だ。
if (bar_no == 6)
strategy.entry("LONG", strategy.long)
if (bar_no == 7)
strategy.exit("LONG_EXIT", "LONG", stop=99999999999999) //ロングのstopに高すぎる価格を指定このようなコードは書かないようにしよう。
limitは利確, stopは損切りで使うのがベターとおぼえておくと楽だ。
ロングの決済のlimit≒利確なので、高い位置
ロングの決済のstop≒損切りなので、低い位置
ショートの決済のlimit≒利確なので、低い位置
ショートの決済のstop≒損切りなので、高い位置
limit=利確」「stop=損切」ではない厳密にはlimit=利確とstop=損切りではないので一応注意。
次のケースはロングの損切りでlimitが機能する。
if (bar_no == 6)
strategy.entry("LONG", strategy.long)
if (bar_no == 10) //バーが10になってから発注 = 含み損になってからlimitを発注したので
strategy.exit("LONG_EXIT", "LONG", limit=994000) //ロング地点よりも低い位置=損切り位置でもlimitが置ける価格が下から上に抜けたのでロング決済のlimit(ショート指値)は正しく動作している。
ここまでくると損切りをstopではなくlimitで行う上級者向けストラテジにしか実装しないと思われるので興味ある人だけわかっていれば良いと思う。
やっぱり、わからん人がいるはずだ。
うん。ちょっと小難しい。説明すればするほどわからんくなる。
というわけでチャートで表した。
strategy.exitの**「limitは利確, stopは損切りで使うのがベター」**と覚えよう(厳密には違うが...)
難しければとりあえずこの表をみてlimit,stopを仕掛ければよいかと思う。
指値と逆指値だけでも混乱するのに今回はそれを「決済」で使う方法であるため更に混乱を招く。
何度も使って覚えるのがベストだがそこまで頻繁にPineを組む人も少ないと思うので表を参考にしてもらえたらと思う。
わからなくなったらこの記事に帰ってきてもらうぐらいで良い。
