このシリーズの記事一覧 (クリックで開閉)
【 strategy解説(Pine) 】
今回は strategy.entry
というコードを使う。
このコードは「ロングやショートでポジションを持つ」命令だ(デフォルトは成行)
タイトルにある通りstrategy.order
というのもありどれがどれなのかわからなくなるが、今回はentry
だけに絞って解説する。
※厳密には指値もentry
で行えるが今回は指値オプションは使わず成行のみとする。
Pine
で戦略を新規作成してみる。
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()
の部分つまり単純移動平均線のクロスで売買するバックテストが表示される。
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)
直近のバーの上に番号が表示される。
この番号を使ってstrategy.entry
を使ってみる。
ちょっと番号がわかりにくいので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)
該当のバーを1
番として順番にラベルがついた(見やすいように色も青にした)
ラベルの描画にif
文を追加したが、分からなければ無視してよい。
ただ見た目を作っているだけである。
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)
2
でロングしているのだけど?よく見ると2番でロングしている。コードには1番を条件にしたのに。
これは足が確定してその次のOPEN
でロングするというTVの特徴からこのような結果となっている。
つまり1
番の足が確定した最初=2
番のOPEN
でentry
される。
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)
結果は
最初と何も変わらない。
つまり、2
番のOPEN
で1回ロングしただけだ。
entry
)しても通らないということが分かる。
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)
さて、どうなる。
ショートも1回だけ入った。
この結果からstrategy.entry
はどのようにエントリーするかというと...
という特徴が分かる。
ピラミッディング:勝ちポジションを持っている状態で更に同じ方向に増す手法
ナンピン:持っているポジションが負けている時に更に同じ方向のポジションを積む手法
Trading View
上ではどちらも区別せず**「ピラミッディング」**と呼ぶ。
つまりstrategy.entry
はピラミッディングをしないようにエントリーしているのだ。
ここでもう一つ疑問がある。
1のロングを持っている状態で1のショートを入れたら相殺されポジションは0になるはず。
ここで5番のショートはどういう動きをしているのだろうか。
strategy.entry
はドテン式実は5
番目のショートはドテンしている。
2
番で持った1のポジションに対し5
番で2のポジションをショートしているのだ。
つまり5
番目以降の足は**「ショートポジションをホールドしたまま」**の状態になっている。上にハネれば大損だ。
このあたり、知っておかないと危ない。
※よく見ると先程の「ショートしました」のコメントの上に-2
と書いてあり倍のポジションでドテンしていることが分かる。
実はピラミッディングもできる(これがややこしい)
これはストラテジーテスターのオプション(歯車)をクリックし
ピラミッディングとあるところを2以上にする
すると...
ピラミッディングしている。
矢印を付けた番号5の足を見てほしい。
非常に見にくいが-4
という数字がわかるだろうか。
つまりピラミッディングがオンになっていても、最初のショートで今まで積んだ3のロング+1ショート分で4のショートを積んでいる。
つまりちゃんとドテンしている。
これは間違えやすいので注意だ。
strategy.entry
は...
ということだけ理解できれば今回はOKだ。
一度にstrategy.order
の基本動作も確認する予定だったが、思いの外長くなってしまい恐らく初心者は既に混乱しているのでここまでとした。
できるだけ短く分かりやすくしようとしてみたが長くなってしまった。
まだ知らなかった人は頑張ってみてほしい。
次回entry
と似ているorder
に迫る。