ということで、前回に引き続きTradingViewのバックテストにて表示される取引番号をラベルに表示するコードを作成していく。イメージとしては以下のように表示されるものを作成する。
前回の記事で以下の整理を行った。
(1)strategy.position_sizeの数が変化した際にラベルを表示
(2)「1」→「0」(クローズ注文),「0」→「-1」(新規エントリー注文)を分けて考える
今回はこれらをもとにサンプルコードを作成したので公開&解説を行う。
1、サンプルコード
以下にコードを示す。もしコードを使用される場合はコード画像下のCopyボタンからお願いしたい。
2、コードの解説
(1)ラベルの表示数、エントリー条件、日時等を指定するコード
5 行目: strategy(“CT”, overlay=true, max_labels_count=500)
max_labels_countは、ラベルの最大表示数を指定できる。デフォルトでは50となっているため最大でも取引回数が50個しか表示されない。これでは使えないので、最大数である500個をここで指定している。
7~8行目
これは、ロングエントリーもしくはショートエントリーを行う際の条件を記述したコードだ。
14日間の終値から算出された単純移動平均線が、28日間の単純移動平均線を上回った際にロング、その逆でショートする条件となっている。
10~31行目
ここはバックテストの実施期間を指定するコードだ。詳細は以前の記事を参照してほしい。
(2)エントリーを行うコード
33~36行目
これは、(1)項で解説したエントリー条件をもとに実際にエントリーを行う部分だ。
(3)取引番号をラベルで表示するコード
ここが今回の記事でコアとなる部分になるので詳しく説明する。
38行目
今回は、取引番号をこの変数nで管理することにする。そのため、ここで変数nを宣言して1を代入している。
39~45行目
長ったらしいコードであるがそこまで難しくない。
ここでは新規にエントリーした場合、つまり一つ前のstrategy.position_size(保有しているポジション数)が0であり、かつ今のポジションサイズがプラスの時(つまりロングポジション)を保有している時には、ラベルを上部に表示するというコードとなっている。
ただし、ポイントは表示する番号だ。今回はround(n/2)を表示している。
なぜこんな表記を行なったかといえば、取引番号はエントリー毎に増えるわけではなく「エントリー」→「クローズ」の一つのペアで一つ付与されるからだ。
この辺は、前回の記事を参照してほしい。
つまり、数字を1,1, 2,2, 3,3, 4,4 ・・・と同じ数字を二回繰り返して表示する必要がある。
そこで、ラベルを表示する度にnを1,2,3,4,5・・・・と変化させていきその半分をround()関数で四捨五入して表示している。
そうすることで、n/2は、0.5,1, 1.5, 2, 2.5 ,3・・・となりそれぞれを四捨五入すればお望みどおり1,1, 2,2, 3,3, 4,4 ・・・と同じ数字が二回繰り返される。
そして、ラベルの色については、round(n/2)が偶数か奇数かを三項演算子で判断してラベルの色を青かオレンジかに分けている。三項演算子については以下記事の「5、(おまけ)特殊な条件分岐の表記方法」を参照。
47~55行目
ここでは、一つ前の足で保有しているポジションがプラスの場合で「持っているポジションをクローズした場合」と「ドテンした場合」で処理を分けている。
「ドテンした場合」はラベルを二つ表示させる処理を記述している。
その他は先ほどの39~45行目と同様。
57~65行目
ここでは、一つ前の足で保有しているポジションがマイナスの場合で「持っているポジションをクローズした場合」と「ドテンした場合」で処理を分けている。
その他は先ほどと同様。
3、まとめ
今回は、ストラテジーの取引回数を表示するコードを作成した。
もし、自作のコードで使いたいけど使い方がわからないなどがあればコメントもしくはツイッターで質問してもらえると対応したいと思う。
では、次回の記事でお会いしましょう!
本記事を気に入っていただけたらブックマークお願いします!また、ツイッターもやってるのでフォローよろしくお願いいたします!
Twitter : makoto(@Makoto_beginner)
また、記事中で不明なことや間違い等ありましたら以下のコメント欄からコメントいただけると幸いです。
皆様のコメントをもとにどこよりもわかりやすいブログを目指していきます。
お世話になります。
大変参考になる記事をありがとうございます。
下記31行目の該当箇所の上に
———————
31 if(is_time)
———————
上記の上に下記2行を追加して確認してみます。
そうしますと、1行ずれてしまうようです。
通常、期待しているのは、クロスを確認した次の足で売り買いをし、そこの箇所にlabel表示をさせたいと思うのですが、原因がわからず質問させて頂きました。
———————
plotchar(longCondition, “Up”, “▲”, location.bottom, size = size.tiny)
plotchar(shortCondition, “Dw”, “▼”, location.top, size = size.tiny)
———————
もし、私の認識に何か間違いがあるようでしたら、お手数かけてしまいすみません。
記事にて、何かポイントやアドバイス頂けますと幸いです。
よろしくお願いします。
たっくま様
記事を読んでいただきありがとうございます。
内容確認して記事を更新させていただきます。
ありがとうございます。