Nバーごとのフィルター戦略のダイアグラム
2本の指数移動平均線がクロスし、一方の向きでは買い、他方の向きでは売ります。このダイアグラムの要点は、その移動平均線に何を入力するかにあります。すべてのローソク足を読み取るのではなく、5本に1本の割合で価格を取り出します。この間引きを行うのが、ローソク足のストリームを自分自身に対して数えるように配線された「N個の値」(N values) ブロックです。移動平均線、クロス判定、エントリーといった下流の処理はすべてこの遅いクロックの上で動くため、ダイアグラムは1本ごとではなくサンプリング周期ごとに1回だけ相場を見ることになります。
戦略の概要
- 確定した5分足は、各ローソク足から終値を取り出すコンバーターと、同じストリームをサンプリング用のパルスに変える「N個の値」(N values) ブロックの両方に流れ込みます。
- 「N個の値」ブロックは、2つの入力の両方に同じローソク足ストリームを同時に受け取ります。トリガー側がカウントダウンをセットし、入力側がそれを減らしていくため、5本目の確定足ごとにパルスを出力し、そのたびに即座に再セットされます。
- このパルスは、最新の終値を保持する「変数」(Variable) ブロックのトリガーになります。変数は届いた終値をすべて記憶しますが、パルスが来るまで何も出力しません。そのため、そこから出ていくのは間引かれた価格系列、すなわちサンプリング周期ごとに1つの値です。
- 2本の移動平均線はローソク足ではなくこの間引かれた系列を読み取るため、期間14の平均線は相場時間で70本分、期間40の平均線は200本分をカバーします。
- 「クロス」(Crossing) ブロックは短期平均線と長期平均線を比較し、両者の上下が入れ替わった瞬間にだけ値を出します。短期平均線が上抜けたときは true、下抜けたときは false です。論理 NOT が、この下抜けのケースを独立したシグナルに変えます。
- 「ポジション」(Position) ブロックの値は、ゼロを保持する変数と2つの比較で照合されます。すなわち「買い建てではない」と「売り建てではない」です。それぞれの結果は論理 AND でクロスのシグナルと結び付けられるため、エントリーには新しいクロスと、その方向にまだポジションを持っていないことの両方が必要になります。
- 2つのエントリーブロックはいずれも「新規のみ」に設定されているため、ダイアグラムが同時に持つポジションは1つだけで、積み増しは行いません。注文数量は、ローソク足ごとに更新される変数から供給されます。
- 反対方向のクロスは2つのクローズ用ブロックを動かし、「ポジション保護」(Position protection) は約定のたびに起動されます。チャートパネルにはローソク足、2本の移動平均線、エントリーと決済の注文、保護注文、そしてすべての約定が描画されます。
エントリーとエグジットの条件
- ロングエントリー: サンプリングのパルス上で短期平均線が長期平均線を上抜け、かつ買い建てポジションを持っていないとき。「ポジション変更」(Position modify) が注文数量を成行で買います。執行は新規のみのため、エントリーはノーポジションの状態から行われ、保有中のトレードに積み増すことはありません。
- ショートエントリー: サンプリングのパルス上で短期平均線が長期平均線を下抜け、かつ売り建てポジションを持っていないとき。論理 NOT が下抜けのクロスをシグナルに変え、「ポジション変更」が注文数量を成行で売ります。執行は新規のみです。
- エグジット: 決済の経路は2つあります。約定のたびに起動される「ポジション保護」(Position protection) は、利益 1.5% のテイクプロフィット、または 1% のストップロスでトレードを終了します。移動平均線が入れ替わるまでにどちらにも届かなかった場合は、反対方向のクロスが引き継ぎます。保有している側に対応するクローズ用ブロックが発火し、そのブロックがポジション全量を成行で送信します。エントリーブロックは新規のみで動作するため、トレードを終わらせたクロスがそのまま反対のポジションを建てることはありません。次のエントリーは、ノーポジションの状態で到来する次のクロスを待ちます。
パラメーター
| パラメーター | 既定値 | 説明 |
|---|---|---|
| Candles | 00:05:00 | ダイアグラム全体が動作するローソク足の時間足。サンプリング周期はこのローソク足の本数で数えられます。 |
| Bars Per Sample | 5 | 確定足が何本で1サンプルになるか。値を大きくすると移動平均線が相場を見る頻度が下がり、売買回数も減ります。1に設定すると、ローソク足ごとに判定する通常のクロスオーバーになります。 |
| Fast EMA Length | 14 | 短期移動平均線の期間。ローソク足ではなくサンプル数で数えます。1サンプルが5本のローソク足であれば、相場時間ではその5倍の本数をカバーします。 |
| Slow EMA Length | 40 | 長期移動平均線の期間。サンプル数で指定します。短期側と十分に差をつけてください。差が小さいと2本の線がノイズで入れ替わり、クロスが意味を持たなくなります。 |
| Order Volume | 1 | 各エントリー注文の数量。銘柄の単位で指定します。クローズ用ブロックはこの値を参照せず、保有しているポジションの全量を送信します。 |
| Take Profit, % | 1.5 | テイクプロフィットまでの距離。約定価格に対する割合 (%) で指定します。 |
| Stop Loss, % | 1 | ストップロスまでの距離。約定価格に対する割合 (%) で指定します。 |
ダイアグラムの詳細
- ここでの「N個の値」(N values) ブロックは、遅延ではなく間引きの手段として使われています。2つの入力がどちらも同じローソク足ストリームから来るため、カウントダウンは満了した瞬間に再開し、稼働中はつねに5本目の確定足ごとにパルスが立ち続けます。
- パルスと移動平均線の間にある「変数」(Variable) こそが、リサンプリングを実際に成立させています。入力はすべての終値を受け取りますが、出力はトリガーが来るまで沈黙します。その結果、移動平均線には1周期につき1つの値だけが渡され、その間のローソク足を見ることはありません。
- 2本の移動平均線は同じ変数を読み取るため歩調が揃い、「クロス」(Crossing) ブロックは届いた値を対にして比較できます。報告されるのは2本の線の上下関係が変わったサンプルだけであり、そのためサンプルとサンプルの間のローソク足ではエントリーが発生しません。
- ポジションの判定は「ノーポジション」ではなく「買い建てではない」「売り建てではない」として書かれています。そのため、反対側のポジションがまだ残っている間に到来したクロスもエントリーブロックまで届きます。ダイアグラムを1ポジションに保っているのは新規のみの設定であり、それを解放するのがクローズ用ブロックです。
- エントリーと決済のいずれの約定も「結合」(Combination) でまとめられ、「ポジション保護」へ送られます。そのため保護側はつねに口座が実際に保有しているポジションを見ており、クロスによってトレードが閉じられるとただちに待機状態に戻ります。
使い方
.json ファイルを Designer に読み込み、バックテスターで過去データを使って実行し、実運用の前にパラメーターやブロック自体を自分の銘柄に合わせて調整してください。