GitHub で見る

フラクタル・トレーリングストップ戦略のダイアグラム

フラクタルとは、高値が5本の中で最も高い、あるいは安値が5本の中で最も安いローソク足のことであり、それがフラクタルだと確定できるのは発生から2本後になります。このダイアグラムはその遅延をごまかしません。確定したローソク足だけを扱い、すべてのフラクタルをストップ価格に変換し、その価格を一方向にのみ動かします。ストップが破られるたびにポジションはドテンされ、破られた水準は新しいフラクタルが再び有効化するまで脇に退きます。

戦略の概要

  • すべての土台となるのは1本のローソク足系列で、確定したローソク足だけを配信する設定になっています。そのため、後続のティックで取り消されうる価格から水準や注文が作られることはありません。
  • Highest と Lowest は直近5本のローソク足の極値を取り、前の値(Previous value)は2本前のローソク足を返し、2つのコンバーターがその高値と安値を読み取ります。
  • 2本前の高値がウィンドウ内で最も高ければ、そのローソク足は上側フラクタルです。安値についての対称的な判定は下側フラクタルを示します。ラッチ付きの変数が各フラクタル価格を保持し、判定が成立したバーでのみそれを出力します。
  • 計算式が上側フラクタル価格にバッファのパーセントを加え、下側フラクタル価格からは差し引き、フラクタルをストップ価格に変えます。
  • さらに2つの計算式が min と max でこれらの価格をラチェットします。上側ストップは下がることしかできず、下側ストップは上がることしかできません。これが、単なるスイング水準ではなくトレーリングストップたらしめている点です。
  • 確定したローソク足の終値は両方のストップと突き合わせられます。上側ストップを上回ればダイアグラムはロングへドテンし、下側ストップを下回ればショートへドテンします。
  • ドテンは2つのブロックの組み合わせです。一方が開いているポジションを閉じ、もう一方が新しい側を開きます。そして、たった今使われたストップは、それが開いたポジションが生きている間ずっと手の届かない位置へ退避されます。
  • ローソク足、両方のストップ水準、そしてすべての約定は1つのチャート領域に描画されるため、ラチェットの動きを図からそのまま読み取れます。

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

  • ロングエントリー: 確定したローソク足の終値が上側トレーリングストップを上抜けます。Close モードのポジション変更(Position modify)はショートが開いていればそれを買い戻し、Open モードのポジション変更は口座がフラットになり次第、注文数量を買います。
  • ショートエントリー: 確定したローソク足の終値が下側トレーリングストップを下抜け、かつ価格がまだ上側ストップより下にあります。同じ組み合わせが逆向きに働き、まずロングを閉じ、次に注文数量を売ります。
  • エグジット: 独立したエグジット・ルールはありません。ポジションは反対側のストップが破られるまで維持され、その突破が同時に決済と反対側のエントリーを行います。そのためダイアグラムは常にロングかショート、あるいはその一約定手前の状態にあります。新しいフラクタルが現れるにつれてトレーリングストップは詰まっていき、それが建玉の後ろでエグジット価格を追随させます。

パラメーター

パラメーター 既定値 説明
Candles 00:05:00 唯一のローソク足系列の時間軸です。確定したローソク足だけが配信されるため、判断はバーごとに1回だけ行われます。
Upper Fractal Length 5 上側の極値を測るローソク足の本数です。判定対象のローソク足はそのウィンドウの中央に位置します。
Lower Fractal Length 5 下側の極値についての同じウィンドウです。上側と同じ値に保ってください。そうしないと、両側で幅の異なるフラクタルを読み取ることになります。
Fractal Shift 2 判定対象のローソク足がどれだけ過去にあるかです。ウィンドウの中心でなければなりません。ウィンドウが5なら2、7なら3です。
Stop Buffer, % 0 水準が使われる前に、上側フラクタル価格へ加算され、下側フラクタル価格から減算されるパーセントです。ゼロならストップはフラクタルのちょうど上に置かれ、値を大きくすると価格から少し離れた位置に保たれます。
Order Volume 1 ロット単位の注文サイズです。両側で同じサイズが使われるため、ドテンは古いサイズの決済に続けてこのサイズの新規建てを行うことになります。

ダイアグラムの詳細

  • 水準がリペイントしないのは、確定したローソク足だけを使っているからです。インジケーターのブロックは渡された値をすべて確定値として扱うため、形成中のローソク足は Highest と Lowest に書き込まれ、次の更新で上書きされてしまいます。確定したローソク足だけを配信するということは、2つのインジケーターが変化しうる値を決して見ないということです。
  • フラクタルの判定は「より上」ではなく「以上」で行われます。そのため、2本のローソク足が同じ高値を共有する平坦な天井もフラクタルとして数えられ、安値側のダブルボトムも同様です。
  • フラクタルは構造上2本遅れて確定しますが、ダイアグラムはそれを隠そうとはしません。生成される水準は2本前に成立していたものであり、それが判明したバーから使われます。
  • ポジションが開いている間、それを開いたストップは手の届かない遠くへ退避され、ポジションが解消された後に最初に形成されるフラクタルから再び有効になります。これがなければ、ダイアグラムはすでに取っている側のシグナルを出し続け、ラチェットが水準を価格から遠ざけすぎて二度と交差できなくなってしまいます。
  • 万一、両方のストップが同じ瞬間に破られたと読み取られた場合は、ロング側が優先されます。ショート側には価格がまだ上側ストップより下にあるという追加条件が付いているため、2つが同時に発火することはありません。

使い方

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