2020-06-22

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

単純にロングやショートのポジションを持つstrategy.entry関数。当たり前のように使っているがちょっと細かい内容を理解しておいたほうが良い。

Article Image

今回やること

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

このコードは「ロングやショートでポジションを持つ」命令だ(デフォルトは成行)

タイトルにある通りstrategy.orderというのもありどれがどれなのかわからなくなるが、今回はentryだけに絞って解説する。

※厳密には指値もentryで行えるが今回は指値オプションは使わず成行のみとする。

とりあえず戦略を新規作成

Pineで戦略を新規作成してみる。

image-20200621191757236

1,2,3とクリックすると次の戦略が自動で生成される。

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © toguroani

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

longCondition = crossover(sma(close, 14), sma(close, 28))
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = crossunder(sma(close, 14), sma(close, 28))
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)

これをチャートに追加するとsma()の部分つまり単純移動平均線のクロスで売買するバックテストが表示される。

image-20200621192617129

1時間足。普通に強い。

実験コード準備

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

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

私の以前の記事

【Pine Script】 ラベルオブジェクト(label)の使い方【Version 4】

こちらより「現在のバーの番号」を頭に描画する。

これはTradingView上に描画されたローソク足の一番最初のバーをを1とし「いま何番目」なのかを表示しているだけだ。

新規作成したコードをすべて消去し、次のコードで上書きしてチャートへ追加する。

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

l = label.new(bar_index,na,text=tostring(bar_index),color=color.green, 
textcolor=color.white,style=label.style_labeldown,yloc=yloc.abovebar)

image-20200621215007713

直近のバーの上に番号が表示される。

この番号を使ってstrategy.entryを使ってみる。

わかりにくいので整形「1~」へ変更

ちょっと番号がわかりにくいので21620番を1に変更し、それ以前はラベルを表示しないようにしてみよう。

//@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番として順番にラベルがついた(見やすいように色も青にした)

ラベルの描画にif文を追加したが、分からなければ無視してよい。

ただ見た目を作っているだけである。

1番でロング(strategy.entry)

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

このコードで初めて**「成行によりポジションを持つ」**と覚えよう。

//@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.entry("ロングしました", strategy.long)

image-20200621212254676

あれ?2でロングしているのだけど?

よく見ると2番でロングしている。コードには1番を条件にしたのに。

これは足が確定してその次のOPENでロングするというTVの特徴からこのような結果となっている。

つまり1番の足が確定した最初=2番のOPENentryされる。

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

うまく行ったので、今度は続けて3連続でロングしてみる(strategy.entry)

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

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

//ロング3回
if (bar_no == 1)
    strategy.entry("ロングしました", strategy.long)
if (bar_no == 2)
    strategy.entry("ロングしました", strategy.long)
if (bar_no == 3)
    strategy.entry("ロングしました", strategy.long)

結果は

image-20200621212550498

最初と何も変わらない。

つまり、2番のOPEN1回ロングしただけだ。

どうやら連続でロング(entry)しても通らない

ということが分かる。

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

上のコードに更にコードを追加して3連続でショートしてみる。

//ロング3回
if (bar_no == 1)
    strategy.entry("ロングしました", strategy.long)
if (bar_no == 2)
    strategy.entry("ロングしました", strategy.long)
if (bar_no == 3)
    strategy.entry("ロングしました", strategy.long)
    
//ショート3回 ここから追加
if (bar_no == 4)
    strategy.entry("ショートしました", strategy.short)
if (bar_no == 5)
    strategy.entry("ショートしました", strategy.short)
if (bar_no == 6)
    strategy.entry("ショートしました", strategy.short)

さて、どうなる。

image-20200621212731067

ショートも1回だけ入った。

この結果からstrategy.entryはどのようにエントリーするかというと...

ピラミッディング(ナンピン)できない

という特徴が分かる。

  • ピラミッディング:勝ちポジションを持っている状態で更に同じ方向に増す手法

  • ナンピン:持っているポジションが負けている時に更に同じ方向のポジションを積む手法

Trading View上ではどちらも区別せず**「ピラミッディング」**と呼ぶ。

つまりstrategy.entryピラミッディングをしないようにエントリーしているのだ。

あれ?1ロング+1ショート=ポジションなしでは?

ここでもう一つ疑問がある。

1のロングを持っている状態で1のショートを入れたら相殺されポジションは0になるはず。

ここで5番のショートはどういう動きをしているのだろうか。

strategy.entryはドテン式

実は5番目のショートはドテンしている。

2番で持った1のポジションに対し5番で2のポジションをショートしているのだ。

つまり5番目以降の足は**「ショートポジションをホールドしたまま」**の状態になっている。上にハネれば大損だ。

このあたり、知っておかないと危ない。

※よく見ると先程の「ショートしました」のコメントの上に-2と書いてあり倍のポジションでドテンしていることが分かる。

実は...ピラミッディングできちゃう!?

実はピラミッディングもできる(これがややこしい)

これはストラテジーテスターのオプション(歯車)をクリックし

image-20200622201344184

ピラミッディングとあるところを2以上にする

image-20200622201417719

すると...

image-20200622201657403

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

番号5の足に注意!(矢印の箇所)

矢印を付けた番号5の足を見てほしい。

非常に見にくいが-4という数字がわかるだろうか。

つまりピラミッディングがオンになっていても、最初のショートで今まで積んだ3のロング+1ショート分で4のショートを積んでいる。

つまりちゃんとドテンしている。

これは間違えやすいので注意だ。

まとめ

strategy.entryは...

  • 連続で同じ方向にエントリーしない。つまりデフォルトではピラミッディング(ナンピン)しない。
  • 設定ダイアログを開き「ピラミッディング」の数値を変更するとピラミッディングする。
  • ポジションと逆側のエントリーがあったときはドテン(倍ロット)する

ということだけ理解できれば今回はOKだ。

さいごに

一度にstrategy.orderの基本動作も確認する予定だったが、思いの外長くなってしまい恐らく初心者は既に混乱しているのでここまでとした。

できるだけ短く分かりやすくしようとしてみたが長くなってしまった。

まだ知らなかった人は頑張ってみてほしい。

次回entryと似ているorderに迫る。



この記事をシェア


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