【はじめに】
こんにちは!makoto(@Makoto_beginner)です。当ブログでは「Pineスクリプト道場」と題し初心者向けにプログラミングの基本から解説する記事を書いているが、今回から新たに「Pineスクリプトの学校」と題し、中・上級者向けにPineスクリプトの実践的な使用方法について解説する記事を書こうと思う。(道場より学校の方が初心者向けなイメージがするというご意見は無しでお願いします)
また「Pineスクリプト道場」との差別化をはかるためタイトルナンバーの頭に@をつけることにする。
Pineスクリプトの学校では、Pineスクリプトの実践的な使用方法について、実際にインジケータなどを作成しながら学んでいく中・上級者向けの解説記事を書いています。
初心者の方は「Pineスクリプト道場」にてPineスクリプトの基礎を学んでから読むとより理解ができますので、初めはそちらをどうぞ。
記念すべき初回となる今回は、陰線が出現したらショートエントリーするストラテジーを作成する。また、本記事では作成するストラテジーの解説とショートエントリーのコードの解説を行う。次回は、エントリーしたポジションをクローズするコードの解説を行う。
記事の目的としてはPineスクリプトの実践的な使用方法についての解説を行うことであり、有用なストラテジーを作成する目的ではないということをご了承の上読んでいただきたい。
1、今回作成するストラテジーの解説
以下に示す画像はBTCUSDの1時間足のチャートである。
このチャートを見ていて感じたのだが「陰線が出現した後の足は陰線になりやすい」ような気がした。つまり、陰線は連続して続いてることが多いような気がした。
陰線が連続して出現している箇所に黄色矢印を入れるとこのようになる。一箇所矢印を入れ忘れているがご愛嬌。
そのため今回は、
陰線が出現したらその次の足でショートエントリーする
というロジックでストラテジーを作成してみることにする。
次にクローズ条件であるが複数考えることができ、私が考えた条件としては、
1、エントリーしたその足の終値でクローズ
上図で説明すると、陰線が出現したら次の足でショートエントリー、その足の終値でクローズする。
見てわかる通り、連続して陰線が続いた場合にもっと大きな値幅が取れたにも関わらず、すぐにクローズしてしまっているのが勿体無い。そこで、次のアイデアだ。
2、エントリー後、陽線出現でクローズ
陰線が出現した次の足でショートエントリー。その後、初めて陽線が出たらその陽線の終値でクローズする。
これなら大きな値幅が取れそうだ。しかし陰線のあと大きくリバウンドした場合に弱い。↓こんな感じ。
まぁ今回はストラテジーの有効性についてはどうでもいいので、とりあえずベースロジックをもとに決済条件を変えたこれら2つのストラテジーを作成してみよう。
2、作成するストラテジーのロジック
では、今回作成するロジックの条件を整理しよう。
【エントリー条件】
陰線出現後、次の足でショートエントリー
【クローズ条件】
パターン①:エントリーした足の終値でクローズ
パターン②:エントリー後、初めての陽線の終値でクローズ
この条件でストラテジーを作成していく。
今回は、エントリーを行うコードについて解説していく。
クローズを行うコードについては次回記事にて解説する。
3、ショートエントリーするコード
まずは、ショートエントリーするコードを作成していく。エントリー条件を振り返ると、
陰線出現後、次の足でショートエントリー
だった。そのため以下2つの処理を記述する。
1、参照している足が陰線であることを確認
2、参照している足が陰線であればショートエントリー
では書いていこう。
また、ストラテジーの名前は適当にBC_entryという名前にする。(陰線は英語でBlack Candlestickというらしいので頭文字をとってBCだ)
//@version=4
strategy(“BC_entry”) //①
//エントリー条件
s_entry = open > close //②
if s_entry //③
strategy.entry(“Short”,strategy.short) //④
たったこれだけで良い。では、それぞれのコードの意味について簡単に説明する。
①strategy(“BC_entry”)
Pineスクリプトではインジケーターとストラテジーの2つを作成できるが、今回はストラテジーを作成するのでstrategy()と記述する。また、ストラテジーの名前はBC_entryという名前にしたいので文字列を示す””で囲ってストラテジー名を記述している。
ストラテジーとインジケーターの違いについては以下の記事で詳しく解説している。
②s_entry = open > close
これが参照している足が陰線であるか確認するコードになる。
ブール値を格納する変数s_entryを用意し、openは今参照している足の始値、closeは終値を示す。
陰線とはその足の始値より終値が安値になった足のことなので始値より終値が安ければ陰線であると判断できる。それをopen > closeと記述している。
もし、参照している足が陰線であればs_entryにはTrue、陽線であればs_entryにはFalseというブール値が格納される。
ブール値ってなに?という方はPineスクリプト道場#2の「3、変数の型について」や#4の「2ー(2)論理演算とは?」を参照してほしい。
③if s_entry
今回のロジックは参照している足が陰線のときにエントリーする。そして足が陰線かどうか判断するには、先ほどの変数s_entryにTrueが入っているかFalseが入っているかで判断しているので、先ほどのs_entry変数の中にTrueが入っていれば実行、Falseが入っていれば実施しないという条件分岐をこのif文で表現している。
④strategy.entry(“Short”,strategy.short)
今参照している足が陰線であればこの処理が実行される。
strategy.entry()はエントリーを表現する構文であり、()内の”Short”はエントリーIDを示している。strategy.shortは、ショートエントリーをするよということを示している。ちなみに、ロングエントリーしたい場合はstrategy.longとすれば良いだけだ。
ここで少し不思議に感じた方はいないだろうか。
今回作成したいロジックの動作イメージはこんな感じだ。
黄色の枠内を見てほしいのだが、陰線が出現した後の足で1回だけエントリーしている。
しかし今、エントリー条件をopen > closeとしているため、言い換えれば「参照している足が陰線であれば全てショートエントリーを行う」という条件になっているのだ。
つまりこんな動作をしそうだ。
では、なぜそうならないのだろうか。実はPineスクリプトでエントリー条件を記述するにはstrategy.entry()とstrategy.order()の2種類がある。そして今回使用したstrategy.entry()関数は「ポジションを持っている場合は追加注文しない」という特徴がある。つまり、一度エントリーした後はポジションを解消するまで追加でエントリーできない。(その逆でstrategy.orderはいくらでもエントリーできる)
そのため、今回のように参照足が陰線の時にエントリーするという条件でも問題がない。動作としては、参照足が陰線であればstrategy.entry()のコードは処理されるが追加注文ができないため実質処理がされていないものと同じという感じだ。
4、次回予告
次回の記事では、今回エントリーした注文をクローズする処理を行うコードの解説を行う。
今回の記事中でもお話しした通り、
パターン①:エントリーした足の終値でクローズ
パターン②:エントリー後、初めての陽線の終値でクローズ
の2パターンのクローズ方法を考えたので、次回はこれら2つの条件でクローズするストラテジーを作成する。
お楽しみに!
本記事を気に入っていただけたらブックマークお願いします!また、ツイッターもやってるのでフォローよろしくお願いいたします!
Twitter : makoto(@Makoto_beginner)
また、記事中で不明なことや間違い等ありましたら以下のコメント欄からコメントいただけると幸いです。
皆様のコメントをもとにどこよりもわかりやすいブログを目指していきます。