GitHub で見る

バンド確認型リバージョン戦略のダイアグラム

ボラティリティバンドの外側で始まり、バンドの内側に戻って終わるローソク足は、値動きが拒絶されたことを示す典型的な形です。このダイアグラムは、まさにその形を買い、そして売ります。単なる1本のローソク足のパターンで終わらせないのは、パターンと注文の間に置かれた二つの条件です。ひとつは、エッジが押し返されずに持ちこたえている価格チャネル、もうひとつは、決められた本数のローソク足が経過するまで確認シグナルを出さないカウントブロックです。パターン、チャネル、カウントの三つが同じローソク足でそろったときにだけ、ポジションが建ちます。

戦略の概要

  • 15分足のローソク足系列ひとつがダイアグラム全体を駆動します。そこに入る値はすべて、まず確定値ブロック(Final)を通るため、後段に形成途中のローソク足が届くことはありません。
  • このストリームから三つのインジケーターが計算されます。移動平均を中心としたボラティリティバンド、高値と安値でつくる価格チャネル、そして通常のローソク足の値幅を測る平均真の値幅(ATR)です。
  • コンバーターがバンドを上限と下限の二本に分け、チャネルを上端と下端に分け、確定した各ローソク足から始値・終値・高値・安値を取り出します。
  • 二つの前回値ブロック(Previous value)が1本前のローソク足時点のチャネル端を保持し、二つの比較が、下端が下げ止まったか、上端が上げ止まったかを判定します。これがこのダイアグラムにおける「チャネルが持ちこたえている」の定義です。
  • この二つの判定結果はそれぞれN値ブロック(N values)を起動し、ブロックは設定された本数の確定ローソク足を数えたうえで、確認のインパルスを一度だけ出します。カウント中に再び起動がかかっても無視されます。
  • ロング側では、論理条件が五つの要素をまとめます。ローソク足が下限バンドを下回って始まったこと、その内側に戻って終わったこと、いまこの瞬間もチャネル下端が持ちこたえていること、確認のインパルスが届いたばかりであること、そしてポジションがフラットであることです。ショート側は、上限バンドとチャネル上端を対象に同じ条件を反転させたものです。
  • どちらのエントリーも、フラットからのみ建てる設定にしたポジション変更ブロック(Position modify)経由の成行注文です。そのため、取引中にシグナルが届いても、その上にもう一つポジションを積み増すことはできません。
  • 二つの結合ブロック(Combination)が決済理由 — 平均真の値幅から組み立てたストップ幅と、1本前のローソク足のチャネルを超えた終値 — をまとめ、決済用のポジション変更ブロックに渡します。チャートパネルにはローソク足、三つのインジケーター、注文と約定が描画されます。

エントリーとエグジットの条件

  • ロングエントリー: 確定したローソク足が下限バンドを下回って始まり、その上に戻って終わっている。チャネル下端が1本前のローソク足の水準以上にある。ロング側のカウントブロックが確認シグナルを出したばかりである。そしてポジションがフラットである。このときポジション変更ブロックが注文数量を成行で買います。取引の間隔を空けているのはこのカウントです。シグナルを出すたびに、ブロックはチャネル下端が持ちこたえている次のローソク足で再び起動するため、すぐ次のローソク足に同じパターンが出ても二度目のエントリーにはなりません。
  • ショートエントリー: こちらは鏡写しです。確定したローソク足が上限バンドを上回って始まり、その下に戻って終わっている。チャネル上端が1本前のローソク足の水準以下にある。ショート側のカウントブロックが確認シグナルを出している。そしてポジションがフラットである。このときポジション変更ブロックが注文数量を成行で売ります。
  • エグジット: どちらの側にも専用の結合ブロックがあり、二種類の決済理由を保持します。ひとつめはボラティリティによる損切りです。ロングは、ローソク足の安値が「下限バンド − 平均真の値幅 × ストップ倍率」を下回ったときに決済され、ショートは、高値が「上限バンド + 同じ幅」を上回ったときに決済されます。バンドは相場とともに動くため、この損切り水準はエントリー価格を覚えておかなくても自動的に追随します。ふたつめはチャネルのブレイクアウトです。1本前のローソク足のチャネル上端を上回る終値、あるいは1本前のチャネル下端を下回る終値が、どちらの側の取引も終わらせます。上抜けはロングの利益を確定し、下抜けはロングの損失を確定します。ショートはその逆です。決済用のブロックはいずれもポジションを閉じる設定になっているため、それぞれ自分の側にだけ作用し、常に全数量を送ります。

パラメーター

パラメーター 既定値 説明
Candles 00:15:00 ダイアグラム全体が動作する唯一のローソク足系列の時間軸。短くすればパターンも取引も増え、長くすれば少なくなり、頻度も落ちます。
Bollinger Length 100 ボラティリティバンドの平均をとるローソク足の本数。ウォームアップ期間も決めており、この本数が経過するまで取引は行われません。
Bollinger Width 1 各バンドが平均から標準偏差いくつ分離れているか。ここでは、バンドの外で始まって内側に戻って終わるローソク足が定期的に現れるよう狭めにしてあります。より稀で極端な拒絶を狙うなら広げてください。
Donchian Length 100 価格チャネルが対象とするローソク足の本数。長くするとチャネル端の動きが鈍くなり、それが「端が不利な方向へ動くのをやめた」という判定を意味のあるフィルターにします。
ATR Length 21 平均真の値幅を測るローソク足の本数。損切り幅を表す単位を決めます。
Long Confirm Candles 5 ロング側のカウントブロックが、起動してから確認シグナルを出すまでに待つローソク足の本数。1にすると待ち時間はなくなり、すべてのパターンで取引します。値を大きくするとエントリーは間引かれます。
Short Confirm Candles 5 ショート側のカウントブロックが待つローソク足の本数。別の設定になっているため、両サイドを互いに調整できます。
ATR Stop Multiplier 2 ロングの損切りが下限バンドから平均真の値幅いくつ分下に置かれるか、ショートの損切りが上限バンドからいくつ分上に置かれるか。小さくすると損切りは近くなり、決済の頻度が上がります。
Order Volume 1 エントリー時に送る注文数量(ロット単位)。決済は常に建っている分をすべて閉じるため、独自の数量は持ちません。

ダイアグラムの詳細

  • ローソク足ブロックは確定足のみを出す設定で、その後ろにある確定値ブロックがダイアグラムの内部でも同じ規則を強制します。形成途中のローソク足の更新はバーが始まった時刻を持つため、その値から組み立てた注文は現在時刻より過去の日時となり、拒否されます。だからこそロジック全体を確定足の上で動かします。
  • N値ブロックは、起動後に届いた値の本数を数えるだけで、起動条件がその間ずっと成立し続けたかどうかは確認しません。そのため、このブロックを起動するのと同じチャネル比較が、エントリー条件にも直接つながっています。インパルスは待ち時間が終わったことを伝え、その時点の比較は、待った理由がいまも残っているかどうかを伝えます。
  • 決済に使うチャネル端は1本前のものです。高値と安値でつくるチャネルの現在の上端は、今のローソク足自身の高値をすでに含んでいるため、終値がそれを上回ることはありえません。1本前の端と比べてはじめて、ブレイクアウトが実際の出来事になります。
  • 損切りの基準は、取引を建てた価格ではなくボラティリティバンドです。ダイアグラムは、エントリー価格を保持する変数を追加しない限りそれを記憶しません。そもそもエントリーが起きたのはバンドの位置なので、バンドを基準にしても同じだけの保護幅が得られ、しかも相場とともに動きます。
  • ポジションの保護は意図的に二重です。フラットかどうかの比較がエントリー条件の中に入っており、さらにエントリーブロック自体もポジションがゼロのときだけ建てる設定になっています。前者はダイアグラムを読みやすく保つためのもので、二つのタイミングがずれた場合に重複注文を実際に止めるのは後者です。

使い方

.json ファイルを Designer に読み込み、バックテスターで過去データを使って実行し、実運用の前にパラメーターやブロック自体を自分の銘柄に合わせて調整してください。