GitHub で見る

ATR ステップ連続戦略のダイアグラム

2本の移動平均が方向を決めますが、両者が入れ替わったその瞬間に買うことはありません。ダイアグラムはその瞬間から確定したローソク足を決まった本数だけ待ち、そのうえで初めて、そのトレードにまだ取る価値があるかを問い直します。待機を担うのは N個の値 (N values) ブロックで、2本の平均の比較によって起動され、数えるよう指定された本数のローソク足が過ぎた時点で一度だけ信号を出します。2つ目の条件は、直近レンジの端までどれだけ余地が残っているかを測るもので、その尺度は価格ではなくボラティリティです。買う前には終値が直近高値から少なくとも ATR 1ステップ分離れていること、売る前には同じステップ分だけ直近安値より上にあることが求められます。

戦略の概要

  • 確定した15分足がコンバータに入り、そこから終値と5つの指標 — 短期と長期の単純移動平均、ATR、そして直近チャネルの最高値と最安値 — が取り出されます。
  • 2つの 比較 (Comparison) ブロックが両平均を突き合わせ、ローソク足ごとに結果を返します。一方は短期平均が長期平均より上にある間だけ真、もう一方は下にある間だけ真になります。
  • それぞれの比較が自分の N個の値 ブロックを起動します。ブロックは入力でローソク足のストリームを受け取り、起動信号のあとに確定したローソク足を数え、カウントが尽きたところで単一のパルスを出し、次に比較が真になったときに再び起動します。そのためダイアグラムのエントリー側は、マーケットデータよりも遅いクロックで動きます。
  • 1つの 数式 (Formula) が ATR にステップ倍率を掛け、さらに2つの数式がそのステップを1組のガード水準に変えます。最高値からステップを引いた値と、最安値にステップを足した値です。
  • さらに2つの比較が、終値がまだ上側のガードより下にあるか、まだ下側のガードより上にあるかを問います。つまり、価格がチャネルの内側へ進みすぎてトレードの余地が残っていないかどうかを確かめます。
  • ポジション (Position) ブロックがゼロの変数と比較され、エントリー側は口座がノーポジションかどうかを知ります。
  • 各サイドは And に設定した 論理条件 (Logical condition) で4つの条件をまとめます。N個の値 からのパルス、その瞬間に改めて確認された平均の比較、チャネル端までの余地、そしてノーポジションであること。4つがそろって到着したときにだけゲートが開きます。
  • ポジション変更 (Modify position) が変数から取った数量で成行のトレードを建て、さらに2つのポジション変更ブロックが逆向きの比較で手仕舞い、ポジション保護 (Position protection) はエントリーの約定ごとに起動され、チャートパネルはローソク足、両方の平均、チャネルの両端、すべての注文とすべての約定を描画します。

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

  • ロングエントリー: 短期平均が長期平均より上にあり、そのサイドの N個の値 ブロックがこのローソク足でパルスを出し、終値がチャネルの最高値より少なくとも ATR 1ステップ分下にあり、ポジションがノーポジションであること。4つすべてがロングの And で合流すると、ポジション変更 が成行で注文数量を買います。このブロックは建てのみに設定されているため、いずれかのサイドのポジションを既に持っている間は何も買われません。
  • ショートエントリー: その鏡像です。短期平均が長期平均より下にあり、弱気側の N個の値 ブロックがパルスを出し、終値がチャネルの最安値より少なくとも ATR 1ステップ分上にあり、ポジションがノーポジションであること。ショートの And は信号を ポジション変更 ブロックへ渡し、そのブロックが成行で注文数量を売ります。こちらも建てのみです。
  • エグジット: 出口は2つあります。1つは平均の入れ替わりです。入れ替わりのあとに真となる比較が、保有しているサイドのクローズ用ブロックを駆動し、そのブロックがポジション全体を成行で送ります。もう1つは ポジション保護 です。エントリーの約定ごとに起動され、価格入力に供給される確定ローソク足の終値を基準に、2% で利益を確定し、1% で損失を止めます。両方のエントリーブロックが建てのみであるため、トレードを終わらせた比較が反対側を建てることはありません。次のエントリーは、口座がノーポジションの状態で届く次のパルスを待つ必要があります。

パラメーター

パラメーター 既定値 説明
Candles 00:15:00 ダイアグラム全体が扱うローソク足の時間足。ダイアグラム内のすべての本数 — 平均、ATR、チャネル、待機期間 — はこのローソク足で数えられます。
Fast SMA Length 20 短期平均の期間。短くすると2本の平均が入れ替わる頻度が上がり、待機ブロックの起動が増えてエントリーも増えます。
Slow SMA Length 60 長期平均の期間。この期間と短期期間との差が、トレンドがそもそも認識されるまでにどれだけ続く必要があるかを決めます。
Bull Streak Bars 3 平均が並んだ瞬間から、ロング側の N個の値 ブロックが放つパルスまでに数える確定ローソク足の本数。1 にするとクロスの次のローソク足でエントリーします。大きな値にするとエントリーは値動きの深いところまで遅れ、さらにブロックはパルスごとに再起動するため、エントリー同士の間隔も広がります。
Bear Streak Bars 3 ショート側の同じ待機。2つの方向を別々の長さで確認する意図がないかぎり、ロング側と同じ値にしておきます。
ATR Length 14 ボラティリティを測る ATR のウィンドウ。チャネル端までの距離を表す単位を決めます。
Step Multiplier 2 価格がチャネル端までに残しておくべき余地を ATR 何本分とするか。上げるとエントリーは極値から十分離れた場所でしか取られなくなり、頻度は下がります。ゼロに近づけると条件はほぼ消え、遅延させたトレンド信号だけが残ります。
Channel High Length 20 最高値を取るローソク足の本数。ロングのエントリーがステップ分の距離を空けて下回っていなければならない天井です。
Channel Low Length 20 最安値を取るローソク足の本数。ショートのエントリーがステップ分の距離を空けて上回っていなければならない床です。非対称なチャネルを狙うのでなければ、高値側のウィンドウと同じ値にしておきます。
Order Volume 1 両方のエントリーブロックが送る数量。クローズ用ブロックは数量を取りません。保有しているポジションをそのまま送ります。
Take Profit, % 2 保護ブロックの利益目標。約定価格に対する割合です。
Stop Loss, % 1 保護ブロックの損失限度。約定価格に対する割合です。目標と合わせて、平均の入れ替わりではなく保護によって終わるトレードがどれだけになるかを決めます。

ダイアグラムの詳細

  • N個の値 ブロックは連続したバーを数えるカウンタではなく、遅延です。最初に見た真の比較で起動され、そのあとの確定ローソク足を数え、一度だけ信号を出します。条件がウィンドウ全体にわたって保たれていたかどうかは確認しません。だからこそ、パルスが届いた瞬間に And の中で同じ比較が改めて問われます。待機の間に崩れてしまったトレンドはこの2度目の問いに落ち、注文は送られません。
  • 論理条件 は信号を出すとすぐに入力をクリアするため、エントリーのゲートはパルスを伴うローソク足でしか判定されません。2つのパルスの間も比較は更新され続けますが、エントリーブロックには何も届きません。条件が何時間も真であり続けるダイアグラムが、ローソク足ごとに売買してしまうのを防いでいるのはこの仕組みです。
  • ガード水準はボラティリティを測るのと同じ ATR で引かれるため、価格がチャネル端から保つべき距離は、相場の動きが速いときには広がり、静まれば縮みます。どちらのチャネル指標も判定中のローソク足を含むので、水準は極値に遅れず追随します。
  • ダイアグラムの定数 — ゼロ、注文数量、ステップ倍率 — はいずれもローソク足のストリームによってトリガーされるため、その値は比較や乗算の相手となる指標値と同じティックで到着します。
  • クローズ用ブロックは平均の比較に直結しているため、平均がその並びを保っているローソク足ごとにトリガーされます。フィルタの役目を果たすのはそのクローズ条件です。そのサイドにポジションがなければブロックは何もせず、注文はダイアグラムから出て行きません。

使い方

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