GitHub で見る

2レッグ・スプレッド・ダイバージェンス戦略のダイアグラム

普段は連動して動く2つの銘柄でも、値動きの幅が食い違うことがあり、出遅れた側は後から追いつく傾向がある。このダイアグラムは、同じ本数のバーの間に2つの銘柄がそれぞれどれだけ動いたかを測り、一方から他方を差し引く。その差が十分に広がったところで、出遅れたレッグを買い、先行したレッグを同時に売る。差が再び縮まれば、両レッグとも手仕舞う。

戦略の概要

  • Security 変数が2本目の銘柄を指定するため、ペアの組み合わせは配線ではなく設定として決まる。2本目のローソク足系列も、2レッグ目の注文ブロックもすべて、この同じ変数によってその銘柄に向けられる。1本目のレッグは、戦略自体に設定された銘柄である。
  • どちらのローソク足系列も確定足のみを扱う設定になっており、未確定のバーが判断を動かしたり、注文の時刻を決めたりすることはない。
  • 同期ブロック(Sync)は銘柄ごとに1本の入力を保持し、5分ごとのタイミングで両方のローソク足をそろえて送り出す。2つのフィードは互いに独立して届くため、この保持を経て初めて2本のローソク足が同じバーのものになる。2つの銘柄を比較することに意味が生まれるのは、この一点による。
  • 送り出されたローソク足ごとに、コンバータが終値を取り出し、前値ブロック(Previous value)が一定本数だけ前のローソク足を保持し、2つ目のコンバータがその古いローソク足から終値を読み取る。ブロックが保持するのはローソク足そのもので、フィールドはその後に読み取る。この順序だからこそ、毎バー値が得られる。
  • 2つの数式が、それぞれの価格の組を1つの数値に変換する。すなわち、そのレッグが古いバーからどれだけ動いたかを、古い価格に対する百分率で表した値である。
  • 2つの変数が、この2つの百分率を売買対象のローソク足に結び付ける。各変数はペアが生成した最新の値を保持し、売買対象銘柄のバーが確定したときにそれを送り出す。これにより、下流の比較・ゲート・注文はすべて、注文が送られる銘柄の時計に従う。
  • 1つの数式が売買レッグの変動幅から2レッグ目の変動幅を引き、これがダイバージェンスとなる。もう1つの数式は、手仕舞い用に符号を無視した大きさを取る。比較ブロックは、ダイバージェンスを左右対称のバンドと、両レッグの値をゼロと、ポジションをゼロと突き合わせる。2つの And と1つの Or が、2つの符号の判定を1つの相関フラグにまとめる。
  • 3つの論理条件が判断を組み立て、6つのポジション ブロック(Position)がそれを実行する。各方向にペアを建てる2つずつ(銘柄ごとに1注文)と、両レッグを閉じる2つである。建てる側のブロックはいずれも、自分の銘柄のポジションがフラットのときだけ動くよう設定されているため、ペアを保有している間に同じシグナルが繰り返されても、それ以上の積み増しは起きない。

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

  • ロングエントリー: ダイバージェンスがバンドの下限を下回り(売買レッグが2レッグ目に対して出遅れている状態)、シフト期間中に両レッグが同じ方向に動いており、売買レッグのポジションがフラットである。この1つのシグナルで2つのブロックが同時に発火する。一方は戦略の銘柄で Traded Leg Volume を成行で買い、もう一方は指定された銘柄で Second Leg Volume を成行で売る。
  • ショートエントリー: ダイバージェンスがバンドの上限を上回り(売買レッグが2レッグ目より先行している状態)、シフト期間中に両レッグが同じ方向に動いており、売買レッグのポジションがフラットである。対称となるブロックの組が Traded Leg Volume を売り、Second Leg Volume を買う。いずれも成行である。
  • エグジット: 建てる根拠となった差が縮まったとき、両レッグは同時に手仕舞われる。すなわち、ペアを保有している間に、符号を無視したダイバージェンスの大きさが Exit Threshold を下回ったときである。この1つのシグナルで、銘柄ごとに1つずつ、2つの手仕舞いブロックが発火する。各ブロックは保有している建玉から自分の数量を割り出すため、いずれも自前の数量を必要とせず、フラットな銘柄で発火した手仕舞いブロックは何もしない。ここには金額目標もストップロスも時間制限もない。2つのレッグが再び寄り添うこと、それが手仕舞いのすべてである。

パラメーター

パラメーター 既定値 説明
Second Instrument TONUSDT@BNBFT 2レッグ目を売買する銘柄。接続したデータの中に存在し、実際に売買できる銘柄である必要がある。ここには注文が送られるのであって、単にデータを読み取るだけではない。
Traded Candles 00:05:00 戦略自身の銘柄のローソク足の長さ。判断も注文も、このタイミングで動く。
Second Leg Candles 00:05:00 2本目の銘柄のローソク足の長さ。売買対象の系列と同じ値にしておくこと。異なると、2つのレッグが別々の時間幅で測られ、その差には意味がなくなる。
Sync Interval 00:05:00 保持した両銘柄を送り出す間隔。ローソク足の長さに合わせること。
Traded Leg Shift 12 売買レッグの変動幅を何本前のバーから測るか。5分足で12本は1時間にあたる。
Second Leg Shift 12 2レッグ目についての同じ本数。両者は同じ値にしておくこと。時間幅が異なると、引き算に意味がなくなる。
Divergence Threshold, % 0.3 ペアを建てるに値すると判断するために、2つの変動幅がどれだけ離れている必要があるかを百分率で指定する。バンドは左右対称なので、この1つの値が上下両方の境界を決める。
Exit Threshold, % 0.1 両レッグを手仕舞うために、2つの変動幅がどこまで近づく必要があるかを百分率で指定する。参入しきい値より小さくしておくこと。そうしないと、ペアは建てたバーと同じバーで閉じられてしまう。
Traded Leg Volume 1 戦略の銘柄での注文数量(ロット単位)。
Second Leg Volume 10 2本目の銘柄での注文数量(ロット単位)。2つの数量は互いに独立して設定されるため、レッグ間の比率は価格から算出されるものではなく設定値である。2つの銘柄の価格水準に合うように選び、2本目の銘柄の数量ステップと照らして確認すること。そうしないと、注文数量は切り下げられる。

ダイアグラムの詳細

  • バーをそろえるのは同期ブロック(Sync)だが、その出力から直接注文が出されることはない。2つのフィードは同じ瞬間に確定するわけではなく、保持から送り出される組は2つの時刻のうち早いほうを持つ。現在時刻より前の時刻が付いた注文は拒否される。下流全体を1つの時計にそろえているのは、値を売買対象のローソク足に結び付ける2つの変数である。
  • この結び付けがもたらす結果は押さえておく価値がある。判断に使われる値は最後に完成した組であり、そのためペアは、その値を生んだバーの中ではなく、次のバーで建てられる。
  • すべての定数(ゼロ、2つのしきい値、2つの数量)は、売買対象のローソク足によって起動される。比較ブロックは評価のたびに2つの入力値が再び届く必要があり、二度と送られない定数は、何の兆候も見せないまま、その先の条件を静かに止めてしまう。
  • バンドの下限は2つ目の定数ではなく、しきい値から計算する数式になっている。そのため、しきい値をどう設定してもバンドは左右対称のまま保たれ、食い違いかねない2つの数値ではなく、変更すべき数値は1つで済む。
  • ポジション ブロック(Position)が読むのは売買対象の銘柄だけであり、その値もレッグの値と同じ方法でバーに結び付けられる。両レッグは同じシグナルで建てられ、同じシグナルで閉じられるため、売買レッグの状態がそのままペアの状態を表す。

使い方

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