ということで、TradingViewのバックテストにて表示される取引番号をラベルに表示するコードを作成していく。イメージとしては以下のように表示されるものを作成する。
また今回サンプルとして使用するストラテジーは、Pineスクリプトで新規ストラテジーを作成する際に初めから入力されているストラテジーを使用する。(移動平均線のクロスでエントリーするシンプルな戦略)
※今回は「ドテン」および「注文数量が固定」されたストラテジーでラベルを表示するコードを作成していきます。
1、取引番号とは?
まずはじめに、取引番号について説明する。
取引番号とは、TradingViewにて売買戦略テスターを使用する際に左端に表示される番号のことだ。
以下画像の左端の番号がそれに当たる。
今回は、この数字をチャート上に表示させるコードを作成していく。
2、作成するコードのポイントについて
(1)ラベルを表示させる条件を整理する
今回作成するコードは、ストラテジーがエントリーもしくはクローズした際に一つ取引番号を表示させるものを作成する。
TradingViewのチャートでは、エントリーやクローズしたポイントが矢印で表示される。↓こんな感じ。
少し見辛いが、赤と青で矢印が表示されている。
そして今回はこの矢印に対して1つラベルを表示するものを作成していく。
この矢印は、ロングもしくはショートエントリーを実施した際に出現するため、
(1)strategy.position_sizeの数が変化した際にラベルを表示
するようにすれば良さそうだ。
strategy.position_sizeはPineスクリプトのビルトイン変数であり、現在保有しているポジションを返してくれる変数だ。
また、ロングポジションはプラスでショートポジションはマイナスで返してくれる。
(2)番号付与のルールを確認する
次にトレーディングビューにて取引番号が付与されるルールを確認する。
以下画像はTradingViewの取引番号が表示されている画面であるが「エントリー」および「クローズ(決済)」のペアで一つの取引番号(今回は1)が付与されていることがわかる。
今回は、エントリーもクローズも関係なく注文毎にラベルを表示させたいので、ラベルに表示される番号を1,1,2,2,3,3,4,4,5,5・・・・と同じ数字が2連続続くような形(以下画像参照)にする必要がある。
こうすれば、同じ番号が表示されている箇所が「エントリー」して「クローズ」するまでの1組の取引であることがわかる。
※しかしドテンした場合がややこしい!
先ほどから何度も画像を掲載しているので違和感を感じた方もいるかもしれないが、
上記の「二つ目の1(A)と一つ目の2(B)」を見て欲しい。
すると、矢印は1つしかないにも関わらずラベルが2つ出現している!
先ほどは「矢印に対して1つラベルを表示するものを作成していく」と言ったにも関わらず、なぜこんなことが起きているのだろうか。
これは「ドテン」というエントリー方法を行なっているのが原因だ。
(参考)ドテンとは?
ドテンとは、現在持っているポジションを決済してかつ逆方向の新しいポジションを保有すること
だ。以下に図を用意した。ドテンは「一番最初にとったポジションの倍の数量を注文していく」ことで「必ずどちらかのポジションを保有しておく」エントリー方法だ。
今回のストラテジーでは最初にショートポジションを保有しているので、ショートポジションを1つ保有する。次に「そのショートポジションを決済する(上図青波線部)」+「新たにロングポジションを保有する(上図橙色四角部)」ため2つのロング注文を行う。
この時点でロングポジションを1つ保有しているので、次は「そのロングポジションを決済する(上図橙色破線部)」+「新たにショートポジションを保有する(上図青四角部)」ため2つのショート注文を行う。
つまり、今持っているポジションを処分する注文に加え新たなポジションを保有するための注文を同時に行うのだ。
こうすることで、ポジションの合計として常にどちらかのポジションを保有しておける。これが「ドテン」だ。
下図で矢印で表している取引が「エントリー」「クローズ」のペア取引となる。
TradingViewで確認しても、取引番号は異なっているのに「ショートを決済」および「ロングエントリー」が同じエントリーとなっていることが確認できる。
では、本題に戻ろう
以上を踏まえて再度チャートを確認すると矢印としては一つであるが、
・二つ目の1(A) : 現在保有しているショートポジションをクローズする注文
・一つ目の2(B) : 新しくロングポジションをもつ新規注文
と全く別の注文であるため別々のラベルを出す必要があることがわかる。
つまりドテンに対応するためには、ポジションサイズが「1」「-1」と変化した場合でも、
「1」→「0」(クローズ注文),「0」→「-1」(新規エントリー注文)を分けて考える
必要がありそうだ。
3、次回予告
今回整理した内容は以下の通り。
(1)strategy.position_sizeの数が変化した際にラベルを表示
(2)「1」→「0」(クローズ注文),「0」→「-1」(新規エントリー注文)を分けて考える
次回はこれらをもとにサンプルコードの公開&コードの説明を行う。
お楽しみに!
本記事を気に入っていただけたらブックマークお願いします!また、ツイッターもやってるのでフォローよろしくお願いいたします!
Twitter : makoto(@Makoto_beginner)
また、記事中で不明なことや間違い等ありましたら以下のコメント欄からコメントいただけると幸いです。
皆様のコメントをもとにどこよりもわかりやすいブログを目指していきます。