【Pine】strategy.exit「profit,loss,qty,qty_percent」【Trading View】

July 19, 2020

strategy.exitを解説。今回はprofitとlossを主に解説。qty, qty_percentは簡単なのでざっくりと。

profit_loss

記事一覧

strategy系コード解説の記事一覧。

strategy記事一覧

前準備

これまで通りバーの上にわかりやすいようにラベルを表示させている。

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)

image-20200625214525219

次のコードは上のラベルが1の時に取引をするコードである。

if (bar_no == 1)
    strategy.entry("LONG", strategy.long)

このbar_noだけ私が用意した変数なので注意。足の頭に表示させた数字である。

strategy.exit

strategy.exitstrategy.close「ポジションを決済するコード」だ。

この記事は引き続きstrategy.exitに絞って解説する。

引数一覧

公式のドキュメントは次

Pineスクリプト言語リファレンスマニュアル — TradingView

まずは引数の一覧

strategy.exit(id, fromentry, qty, qtypercent, profit, limit, loss, stop, trailprice, trailpoints, trailoffset, ocaname, comment, when)

本日解説するのは次の4つ

  • qty: ロット数
  • qty_percent: ロット数(%表記)
  • profit: 利確ライン
  • loss: 損切りライン

上2つは簡単なので今回は主にprofit, lossの解説だと思ってもらえれば良い。

qty

ロット数量。絶対値で指定した数量を発注。

exitの場合は決済する数量となる。

10ロットロングして、3ロットだけ損切りする例。

if (bar_no == 6)
    strategy.entry("LONG", strategy.long, qty=10)
    strategy.exit("LONG_EXIT", "LONG", stop=990000, qty=3)

結果

image-20200713165639440

qty_percent

パーセンテージで決済する。

次は30%だけ損切りする場合は数値を30にする。

if (bar_no == 6)
    strategy.entry("LONG", strategy.long, qty=10)
    strategy.exit("LONG_EXIT", "LONG", stop=990000, qty_percent=30) //30%の決済

結果は上と同様となる。

ただし次の条件だけ注意

  • 100%を超えたり、0以下を指定してはいけない
  • 非常に小さい値を指定した場合、ロット数は最低1となる(0.0001%などにしても必ず1ロット決済)
  • 1以上の決済の場合は小数点切り捨て(上記例なら39%にしても決済は3ロットとなる)

条件については次の記事内で詳細に実験しているので気になる方は参照してほしい。

【Pine】strategy.closeの説明とexitの違い【Trading View】 | Blog

profit

以前limitを使って利確を行ったが、もっとシンプルに利確したいときに使う。

覚えておくことは2つ。

  • バーの途中で決済される
  • profitは単純に値幅を指定する

値幅を指定する

profitは利益という意味なので指定した利益になったら利確ではなく

profitに指定した値幅で利確となる。

つまりqtyの影響を受けないので注意。

例えば次の例では

  1. 10ロットで1BTCが100万円のときにロング
  2. 1万円のプロフィットで利確

というコードなので、1000円幅で1万円となるためprofit=1000かも?という疑問がわくが

値幅なので10000を指定するのが正しい。

if (bar_no == 5)
    strategy.entry("LONG", strategy.long, limit=1000000, qty=10) //ロット10
    strategy.exit("LONG_EXIT", "LONG", profit=10000) //ロットに関係なく値幅1万で利確

結果

image-20200713171437694

ロット数に関係なく1万円幅で正しく決済されていることがわかる。

バーの途中で決済される

上の例を見てもらえばわかるがバーの途中でも指定した値幅を達成したら決済される。

実際のトレードではここに成り行きの滑りや手数料が加算されるのを意識しておこう(指値決済ではないので)

loss

今度は逆の損切りである。

指定した値幅、損する方向へ動いたときに決済される。

if (bar_no == 5)
    strategy.entry("LONG", strategy.long, limit=1000000, qty=10) //100万円でlong
    strategy.exit("LONG_EXIT", "LONG", loss=5000) //5000円の損=995000で決済

image-20200713171947347

想定通りの結果となった。

profit,lossどっちが先に発動するか

では、両方とも同時に仕掛けたときどっちが優先されるだろうか

if (bar_no == 6) //同じ足で
    strategy.entry("LONG", strategy.long)
    strategy.exit("LONG_EXIT", "LONG", profit=1000) //profit
    strategy.exit("LONG_EXIT2", "LONG", loss=1000) //loss を同時に仕掛ける

成り行きでエントリーし、同一の足でプラスにもマイナスにも千円幅動いているため両方刺さる想定のコードだ。

image-20200713174915645

先にprofitの方で決済された。

2020/07/21:コードの2行目のIDが"LONG_EXIT"となっていた箇所を"LONG_EXIT2"と変更(テスト結果はこちらで行っている)

この場合のコードは「先に記述したほうが優先される」模様。

つまりID:"LONG_EXIT"が先に決済される。

strategy.exit("LONG_EXIT2", "LONG", loss=1000)を上に持っていくと...

image-20200721142329739

lossで決済される。

limitstopの存在意義

profitlossがあればlimit, stopなしでも決済ができる上にシンプルなので数字に対して直感的に決済ができる。

limitstopいらないのでは?とさえ思うかもしれないが...

たしかに要らない気がする。

ただ、前回解説したように

含み損になってから損切りラインをlimitで決定する

というような上級者向けストラテジにはprofit, lossは使えないので注意だ。

最後に

以前に難しいlimit, stopを解説したが

初心者はprofit, lossを使ったほうが直感的でかんたんかもしれない。

が、やはり実際の取引所を使う場合は指値、逆指値の理解は必須なのでできれば難しい方も覚えておきたい。

この記事をシェア:

author icon

仮想トイレ @CrypticToilet
プログラミングや仮想通貨のシステムトレードに関する情報を更新中!どんな情報を流しても詰まらないトイレ。