このシリーズの記事一覧 (クリックで開閉)
【 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.exit
strategy.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を組む人も少ないと思うので表を参考にしてもらえたらと思う。
わからなくなったらこの記事に帰ってきてもらうぐらいで良い。