2020-06-25

【Pine】strategy.order関数【Trading View】

strategy.order関数を見ていく。strategy.entryとどう違うのだろうか

Article Image

今回やること

今回は strategy.orderというコードを使う。

前回はstrategy.entryを使ったが、どう違うのだろうか。

前回の記事:【Pine】strategy.entry関数【Trading View】

実は前回より簡単

前回やったentryの知識があればorderはサクっと理解できるはずだ。

実験コード準備

まず実験がわかりやすいように準備を行う。

足の上にバーの番号を表示

こちらは前回の記事に同じなので詳細は省略するが、単にわかりやすいように足に番号を付けただけだ。

//@version=4
strategy("マイストラテジー", overlay=true)

bar_no = 0
if(bar_index > 21620)
    bar_no := bar_index - 21620
    l = label.new(bar_index,na,text=tostring(bar_no),color=color.blue, textcolor=color.white,style=label.style_labeldown,yloc=yloc.abovebar)

image-20200621211843256

上についた番号を使って解説していく。

1番でロング(strategy.order)

1と書かれたラベルのバーでロングでstrategy.orderする。

こちらも前回のコードをorderに変えただけ。コメントも少し変えている。

//@version=4
strategy("マイストラテジー", overlay=true)

bar_no = 0
if(bar_index > 21620)
    bar_no := bar_index - 21620
    l = label.new(bar_index,na,text=tostring(bar_no),color=color.blue, textcolor=color.white,style=label.style_labeldown,yloc=yloc.abovebar)

//ロング1回
if (bar_no == 1)
    strategy.order("ロング(Order)", strategy.long)

image-20200622195933136

このようになる。

でオーダーしたのになぜ2のバーで実際にロングが入っているかは前回の記事でも書いたが

CLOSEが確定した直後に注文が入るので実際にはのオープンでロングされるからである。

ちなみにorderではなく前回のentryでは次のようになっていた。

image-20200621212254676

orderでは色が紫になっているようだ。

実験1:3連続ロング(strategy.order)

前回と同様に3連続でロングをorderしてみる。

1, 2, 3と続けてロングするということ。どうなるだろうか。

//バーを表示するコードは省略

//3連続でロングをorder
if (bar_no == 1)
    strategy.order("ロング(Order)", strategy.long)
if (bar_no == 2)
    strategy.order("ロング(Order)", strategy.long)
if (bar_no == 3)
    strategy.order("ロング(Order)", strategy.long)

結果は

image-20200622200158204

3回ともロングが成功している。つまり...

ピラミッディングしている

ということが分かる。

entryでは(デフォルトで)ピラミッディングはできないのでこの差がorderなのである。

実験2:その後3連続でショート(strategy.order)

では、この後orderで3連続ショートするとどうなるか。

//ロング3回
if (bar_no == 1)
    strategy.order("ロング(Order)", strategy.long)
if (bar_no == 2)
    strategy.order("ロング(Order)", strategy.long)
if (bar_no == 3)
    strategy.order("ロング(Order)", strategy.long)
    
//ショート3回
if (bar_no == 4)
    strategy.order("ショート(Order)", strategy.short)
if (bar_no == 5)
    strategy.order("ショート(Order)", strategy.short)
if (bar_no == 6)
    strategy.order("ショート(Order)", strategy.short)

もうおわかりかと思うが

image-20200622200418359

3回ショートした。

entryとの違い:ドテンしない

3回ロングを積んで3回ショートした。

結果どうなったかというとトータルポジションが0になった。

entryでは逆のポジションを取る時に倍の値を積んでドテンするという違いがある。

一応確認

strategy.position_sizeというビルトイン変数を使うと

**「今所持しているポジションの総数」**が取得できる。

つまりラベルの数字をこれにかえればポジション数が分かるはずだ。

labelのコードのオプションをtext=tostring(strategy.position_size)にする。

本当にポジションがピラミッディングで3まで上がって、最後0になったか確認しよう。

image-20200622200940160

ポジションが3まで登った後ショートも3回入り正しくポジションが0になっていることが確認できた。

そしてこれは先日の記事のように「設定項目のピラミッディング」の影響を受けないので設定を変更しても無意味である。

ユーザーが記述したorder分だけピラミッディングするので正しいポジション管理が必要になってくる。

これを忘れないように。

まとめ

strategy.orderは...

  • 連続で同じ方向にエントリーする。つまりピラミッディングされる。
  • 設定の「ピラミッディング」の項目は無視されるのでプログラム側でポジション管理が必要。
  • 現在のポジションと逆側のエントリーがあったときはドテンせず設定された数量だけorderされる。

さいごに

entryの挙動を勉強してしまえばstrategy.orderは簡単だ

ただ、詳しいオプションを一つも解説していないのでまだ覚えることはたくさんある。

もう少しこのシリーズは続く予定。



この記事をシェア


謎の技術研究部 (謎技研)