Pineスクリプトの学校では、Pineスクリプトの実践的な使用方法について、実際にインジケータなどを作成しながら学んでいく中・上級者向けの解説記事を書いています。
初心者の方は「Pineスクリプト道場」にてPineスクリプトの基礎を学んでから読むとより理解ができますので、初めはそちらをどうぞ。
こんにちは!makoto(@Makoto_beginner)です。
前回、陰線が出現したらその次の足でショートエントリーを行うコードを解説した。
今回はその注文をクローズするコードを2パターン作成していく。
1、前回の振り返り
今回作成するストラテジーのロジックは、
【エントリー条件】
陰線出現後、次の足でショートエントリー
【クローズ条件】
パターン①:エントリーした足の終値でクローズ
パターン②:エントリー後、初めての陽線の終値でクローズ
だった。
前回記事でエントリーするコードの解説を行ったので、今回はその注文をクローズするコードについて解説を行う。
2、注文をクローズするコードの解説
(1)パターン①-エントリーした足の終値でクローズ
まずは、
エントリーしたその足の終値でクローズ
する処理を書いていく。
考え方としては、ポジションを持っている時に決済注文を出せばいいことになるので以下のようなコードになる。
//@version=4
strategy(“BC_entry”)
//エントリー条件
s_entry = open > close
if s_entry
strategy.entry(“Short”,strategy.short)
//ここからクローズの処理を記述
c_entry = strategy.position_size != 0 //①
strategy.close(“Short”, c_entry, comment=”Close”) //②
①c_entry = strategy.position_size != 0
c_entryというブール値を格納する変数を用意した。
strategy.position_sizeは現在持っているポジション数を返すビルトイン変数でありロングポジションなら正の値、ショートポジションなら負の値を返す。
この値が0以外のとき、つまりポジションを持ったらc_entryにはTrueという値が格納される。
②strategy.close(“Short”, c_entry, comment=”Close”)
strategy.closeは特定の注文をクローズするための関数だ。”Short”はクローズしたい注文のIDを記入する。その後のc_entryはいつクローズするかの条件を設定する箇所であり今回はc_entryがTrueの時に処理を実行する。最後のcommentは、チャート上に表示される文字を自由に設定できる。今回は”Close”と表示するようにした。
このコードを実際に動かすと以下のようになる。
見事に陰線が出現したらショートエントリーしてくれている。
ただし、エントリーした足にあるショートエントリーの印とクローズの印が一致していない。これはPineスクリプトのクセであり、参照している足の終値でクローズする処理を記述すると、必ず「次の足の始値」でクローズされる。これはローソク足が確定しないと終値が確定しないためであり、ローソク足の確定後に処理が実施されるため、その足の終値でぴったり決済することができないためである。
よくわからないと感じた方は、そうなんだ的な感じで聞いてもらって問題ない。
(2)パターン②-初めての陽線の終値でクローズ
続いてエントリーした注文をクローズする処理のパターン②、
エントリー後、初めての陽線の終値でクローズ
という処理を書いていく。
考え方として、現在ポジションを持っていてかつ、現在の足が陽線であればクローズ注文を出せば良い。
//@version=4
strategy(“BC_entry”)
//エントリー条件
s_entry = open > close
if s_entry
strategy.entry(“Short”,strategy.short)
//ここからクローズの処理を記述
c_entry = strategy.position_size != 0 and open < close
//①
strategy.close(“Short”, c_entry, comment=”Close”)
①c_entry = strategy.position_size != 0 and open < close
パターン①での条件に加え、open < closeが追加となっただけだ。ポジションを持っているだけではなく、それに加えて現在の足が陽線かどうかを判断してクローズする。
条件を追加して記述する場合は、orやandを使用する。今回はポジションを持っているという条件と現在の足が陽線であるという二つの条件がどちらともTrueとなる必要があるのでandを使用して条件を併記した。もしどちらか片方の条件がTrueとなれば良い場合はorで条件を併記する。詳細については、以下記事の3項「(2)論理演算子」を参照してほしい。
これで無事、陽線出現でクローズするストラテジーとなった。
3、(おまけ)バックテストデータ
せっかくなので今回作成したストラテジーのバックテストを実施してみる。
銘柄はbybitのBTCUSD1時間足、手数料設定なしだ。
まずはパターン①「エントリー後次の足でクローズ」の結果だ。
右肩下がりのチャートになっており、勝率も低いのでそのままでは戦えそうにない。
次に、パターン②「エントリー後初めての陽線出現でクローズ」の結果だ。
こちらもパターン①と大差はない。
ということで、この戦略は長期的には使用できない戦略である可能性が高そうだ。
だが、これをベースに、
「陽線→陰線と出現した場合にのみショートエントリー」や
「ロスカット注文を入れてみる」などのバリエーションをたくさん考えることができるため興味があればぜひ組んで検証してほしい。
もし聖杯が見つかればその時はこっそり教えてくれると嬉しい。
今回の記事は以上となる。
今後は、Pineスクリプト道場の内容も拡充させつつ、Pineスクリプトの学校で実践的な内容について解説を行う予定としている。
解説ブログなどが少ないこともPineスクリプトの特徴であるため、当ブログを役に立ててもらえれば嬉しい。
本記事を気に入っていただけたらブックマークお願いします!また、ツイッターもやってるのでフォローよろしくお願いいたします!
Twitter : makoto(@Makoto_beginner)
また、記事中で不明なことや間違い等ありましたら以下のコメント欄からコメントいただけると幸いです。
皆様のコメントをもとにどこよりもわかりやすいブログを目指していきます。
こんにちは、いつも勉強させていただいてます。
本記事のバックテスト時に「手数料を設定してない」とありました。
手数料を反映させる場合、bybitだと成行の往復では0.15%かかりますが、この際は0.15で設定するのか、それとも0.075で設定するのでしょうか?
コメントいただきありがとうございます。
bybitの場合は、成行注文を出して約定した時点で手数料がかかるので、各取引ごとに手数料の計算が必要となります。
(往復の取引が終わって初めて手数料が加算されるわけではない)
そのため、今回の場合は手数料は0.075%と設定する必要があります。
他に疑問などありましたら遠慮なくコメントいただけますと幸いです。
よろしくお願いいたします。
こんばんは。
返答いただき、ありがとうございます。
そうだったんですね、てっきり往復だと思い検証を進めておりました・・・・
スッキリしました、引き続き検証頑張ります。
これからもブログ執筆頑張ってください。楽しみにしています!
こちらこそ今後ともよろしくお願いいたします!