損失後に一時停止する戦略のダイアグラム
シンプルなモメンタムのダイアグラムに、そもそも取引してよいかどうかを判断するルールを組み合わせています。損益変化ブロック(Strategy P&L)が口座の実現損益を伝えるため、価格を測らなくても、決済された取引を勝ちか負けかとして読み取れます。連続した負けの回数を数え、その回数が上限に達するとフラグブロック(Flag)がセットされ、決められた本数のローソク足の間、取引を停止したままにします。新規建てが再開するのは、カウントダウンが終わってフラグが解除された後だけです。
戦略の概要
- 確定した1時間足を、期間1のRate of Changeに入力します。これは終値の前回終値に対する変化率であり、1つの指標が新規建ての閾値と決済の閾値の両方を担います。
- 2つの比較が、この変化率を2つの変数と照合します。上昇の動きには上側の閾値、下落の動きには下側のマイナスの閾値です。
- ポジションブロックはゼロと3回比較されます(等しい・より大きい・より小さい)。これにより、新規建て用のノーポジション判定と、決済用のロング判定およびショート判定が得られます。
- 新規建ては3つのシグナルの論理積(AND)です。狙った方向のモメンタム、ノーポジションであること、そして一時停止が動いていないこと。どちらの新規建てブロックも open only に設定されているため、ダイアグラムは同時に1つのポジションだけを保有し、積み増しは行いません。
- 決済は、逆方向のモメンタムと、その側にポジションがあることの論理積(AND)です。これがクローズに設定されたポジション変更ブロック(Position modify)を起動し、保有している建玉から数量を算出します。
- 損益変化ブロックは実現損益を伝えます。直前値ブロック(Previous value)が最新の変化より前の値を保持し、2つの比較が結果が下がったか上がったかを示します。これがそれぞれ、負けの決済取引か勝ちの決済取引かを表します。
- 負けの場合、保存された連敗数は1を加える計算式を通り、その合計が同じ変数に書き戻されます。勝ちの場合はゼロが上書きされます。新しいカウントと上限との比較が、一時停止を開始するシグナルになります。
- このシグナルがフラグ(Flag)をセットし、確定したローソク足を数えるN値ブロック(N values)を起動します。フラグがセットされている間、毎ローソク足で読み出される状態変数が「一時停止中」を示し、論理否定(NOT)がそれを「再び許可」に変え、これが両方の新規建てゲートの3番目の入力になります。
エントリーとエグジットの条件
- ロングエントリー: 確定したローソク足のRate of Changeがロング閾値を上回り、ポジションがなく、一時停止も動いていない状態です。ポジション変更ブロックが成行で注文数量を買い建てます(open only)。
- ショートエントリー: 確定したローソク足のRate of Changeがショート閾値を下回り、ポジションがなく、一時停止も動いていない状態です。ポジション変更ブロックが成行で注文数量を売り建てます(open only)。
- エグジット: モメンタムが逆に転じた時点でポジションを手放します。ロングはRate of Changeがショート閾値を下回ったとき、ショートはロング閾値を上回ったときに決済されます。ブロックはポジションのクローズに設定されているため、注文数量はポジション自体から取られ、1回の注文で一方の側から反対側へドテンすることはありません。反対側は、ノーポジションの状態から後続のローソク足でのみ建てられます。決済が一時停止で妨げられることはなく、制限されるのは新規建てだけです。
パラメーター
| パラメーター | 既定値 | 説明 |
|---|---|---|
| Candles | 01:00:00 | ダイアグラム全体が扱うローソク足の時間足。一時停止もこのローソク足で数えられるため、足が長いほど、実時間での一時停止も長くなります。 |
| Rate Of Change Length | 1 | Rate of Changeが何本前まで測るか。1のときは前回終値からの変化率であり、両方の閾値はこれを前提に書かれています。期間を長くするとより広いモメンタムの尺度になり、それに合わせて閾値も広げる必要があります。 |
| Long Threshold, % | 0.3 | ロングを建て、ショートを決済する変化率。値を上げるとどちらも起こりにくくなり、ダイアグラムはより選択的になります。 |
| Short Threshold, % | -0.3 | ショートを建て、ロングを決済する変化率で、マイナスの数値で指定します。ロング閾値と対称である必要はなく、非対称な値にするとダイアグラムは一方の側に偏ります。 |
| Order Volume | 1 | 新規建て注文1回あたりの数量(銘柄の単位)。決済は数量をポジションから取るため、この値はそこでは使われません。 |
| Consecutive Losses | 3 | 取引が停止されるまでに、決済取引が何回連続で負ける必要があるか。勝ちの取引でカウントはゼロに戻るため、これは合計ではなく連続回数を数えます。1にすると、負けの取引ごとに一時停止が始まります。 |
| Pause Candles | 8 | 一時停止が続く確定ローソク足の本数。その間は新規建てが拒否され、終了後にフラグが解除され、負けのカウントがゼロに戻ります。 |
ダイアグラムの詳細
- 取引の側から一時停止へ入力されるものはありません。連敗カウンターとフラグを動かすのは口座の損益だけなので、ダイアグラムにループはなく、一時停止は許可を取り上げることしかできず、与えることはありません。
- フラグブロックは最初にセットされた瞬間にだけ値を出力し、N値ブロックはすでにカウント中のトリガーを無視します。そのため、一時停止の実行中にさらに負けのシグナルが出ても、カウントダウンは再スタートも延長もされません。
- カウントダウンは口座のイベントではなく、取引時間足の確定したローソク足で測られます。そのため、値動きの少ない期間でも多い期間でも、一時停止の長さは同じになります。
- 新規建てのゲートは、フラグそのものではなく保存された変数から一時停止を読み取ります。フラグは瞬間を伝え、変数は状態を保持します。フラグがセットされたときに true が書き込まれ、カウントダウンが終わると false が書き込まれ、毎ローソク足で出力されます。そのため、どちらのゲートも、他の2つのシグナルと組み合わせるための最新の値を常に持っています。
- チャートパネルにはローソク足、Rate of Change、実現損益、新規建てと決済の注文、そしてすべての約定が描かれます。そのため、シグナルは出ているのに注文が続かない区間を、一時停止として容易に見分けられます。
使い方
.json ファイルを Designer に読み込み、バックテスターで過去データを使って実行し、実運用の前にパラメーターやブロック自体を自分の銘柄に合わせて調整してください。