その日の最初のシグナル戦略ダイアグラム
5分足で2本の指数移動平均がクロスするのはありふれたシグナルであり、短い時間軸では1日に何度も繰り返されます。このダイアグラムは暦日ごとに各方向の最も早い1回だけを取引し、それ以降のクロスはすべて見送ります。それを可能にしている記憶が2つのフラグ(Flag)ブロックであり、その記憶を消去するのは日付が変わったことを検知する戦略時計です。
戦略の概要
- 確定した5分足が速い指数移動平均と遅い指数移動平均に入力され、クロス(Crossing)ブロックがこの組を単一のイベントに変換します。速い平均が遅い平均を上抜けたときに true を、下抜けたときに false を出力します。
- 論理否定(Not)が同じイベントを独立した下抜けシグナルに変換するため、移動平均をもう一組用意しなくても、1つのクロスブロックで両方向をまかなえます。
- 現在時刻(Current time)ブロックが戦略時計をコンバーターへ流し込み、そこから暦日を取り出します。これによりダイアグラムは、ローソク足系列にまったく依存しない日付番号を得ます。
- 変数(Variable)が日付番号を保持し、ローソク足が確定したときにそれを出力します。つまり常に1本前のローソク足が属していた日を運んでおり、現在の日付番号との不一致(NotEqual)比較は、日付が変わった直後の最初の足でちょうど一度だけ true になります。
- 各方向がフラグを1つずつ持ちます。エントリーシグナルがそのトリガーで、この日替わりのパルスがリセットです。フラグは最初にセットされたときだけトリガーを通すため、その日に最初に受け入れられたシグナル以降はすべて、日付が変わるまで黙って破棄されます。
- エントリーはポジション変更(Position modify)ブロックで、ノーポジションからのみ建てるよう設定されています。そのため2つのラッチは1日あたり最大でロング1回とショート1回しか消費せず、数量を積み増すことはありません。
- 反対方向のクロスが建玉を決済します。2つの論理条件が組み合わせ(Combination)ブロックで合流し、決済に設定された1つのポジション変更ブロックを起動するため、どちらの側も専用の決済ブロックを必要としません。
- ポジション保護(Position protection)がエントリー約定を監視し、固定のテイクプロフィットまたはストップロスの幅で取引をより早く終わらせることができます。そのため、来ないかもしれないクロスをポジションが待ち続けることはありません。
エントリーとエグジットの条件
- ロングエントリー: ノーポジションの状態で、速い平均が遅い平均を上抜けます。この組み合わせがロング側のフラグを起動しますが、フラグは最初のセットでのみ発火するため、日付が最後に変わってからロングを取っていない場合にだけクロスが執行されます。続いてポジション変更ブロックが設定された数量で成行買いを出し、すでに何らかの建玉があるときは注文そのものを拒否します。
- ショートエントリー: ノーポジションの状態で、速い平均が遅い平均を下抜けます。シグナルはショート側のフラグを通りますが、こちらも同じくその日の最初のセットだけを通し、ポジション変更ブロックが同じ数量で成行売りを出します。2つのフラグは互いに独立しているため、1日のうちにロング1回とショート1回が、どちらの順序でも成立し得ます。
- エグジット: ロング保有中の下抜けとショート保有中の上抜けは組み合わせブロックに集められ、決済に設定された1つのポジション変更ブロックを起動します。決済数量はこのブロック自身が計算します。並行してポジション保護がエントリー約定に対して働き、テイクプロフィットまたはストップロスの幅で取引をより早く終わらせることができます。ドテンは一度には行われません。ポジションはまずノーポジションに戻り、反対側は後から、建玉がない状態で発生したクロスによって建てられます。
パラメーター
| パラメーター | 既定値 | 説明 |
|---|---|---|
| Candles | 00:05:00 | ダイアグラム全体が動作するローソク足系列の時間軸です。系列を長くすると1日あたりのクロス回数が減り、1日ごとの上限が効く場面はまれになります。 |
| Fast EMA Length | 14 | 速い指数移動平均の期間です。 |
| Slow EMA Length | 40 | 遅い指数移動平均の期間です。速い方より十分に大きく保ってください。そうしないと2本の平均が絶えずクロスします。もっとも、いずれにせよラッチを通過するのは各日の最初のクロスだけです。 |
| Volume | 1 | 1回のエントリーの数量で、銘柄の単位で指定します。両方向で使用されます。 |
| Take Profit, % | 1.5 | テイクプロフィットまでの幅で、エントリー価格に対するパーセントで指定します。 |
| Stop Loss, % | 1 | ストップロスまでの幅で、エントリー価格に対するパーセントで指定します。 |
ダイアグラムの詳細
- 日付番号はローソク足ではなく時計から取得されるため、リセットは歯抜けのあるセッションでも機能し、日付が変わる瞬間に足が存在するかどうかに依存しません。
- 時計はローソク足の確定よりもはるかに高い頻度で独自のティックを刻みます。だからこそ、その値を保存済みの値と直接比較することはしません。まず変数がローソク足のリズムに載せ替えることで、比較が「このローソク足は1本前のローソク足とは別の日に属する」という意味になります。
- フラグはどちらのソケットに届いた false も無視します。そのため日替わり比較は1日中 false を流し続けてもラッチを乱さず、false と評価される論理条件には何のコストもかかりません。
- エントリーのゲートはノーポジションであることを要求し、エントリーブロック自体もそれ以外の状態からの動作を拒否します。これは意図的なものです。ラッチはシグナルによって消費されるため、約定できなかったシグナルが、その方向の1日分を無駄にしてしまうからです。
- 両方向は1つの数量変数と1つの保護ブロックを共有するため、ロングとショートはまったく同じルールで数量が決まり、保護されます。
使い方
.json ファイルを Designer に読み込み、バックテスターで過去データを使って実行し、実運用の前にパラメーターやブロック自体を自分の銘柄に合わせて調整してください。