GitHub で見る

資金ガード付きスケジュール実行の2レッグ・バスケット

このダイアグラムが取引するのはシグナルではなく時計です。指標は一切使いません。1日に一度、短いエントリー時間帯が開き、ダイアグラムは2つの銘柄を同じ瞬間に買います。その後の時間帯で両方を手仕舞いし、2つの時間帯のあいだは資金ガードがバスケットの損益を監視して、利益目標または損失限度に達したら早めに手仕舞いします。

戦略の概要

  • Security 型の変数 (Variable) ブロック2つが、ダイアグラムの取引する2銘柄を指定します。それぞれが自分のローソク足シリーズ、自分の建てるアクション、自分の閉じるアクションへ値を渡すため、2本のレッグは同時に開閉されながらも、数量の設定と管理は別々に行われます。
  • 同期 (Sync) は2つの5分足シリーズを保持し、両方のレッグが同じ足を出し終えてから1組としてまとめて送り出します。そのため、バスケットについて描画される値が、一方のレッグの新しい価格と他方の古い価格を混ぜてしまうことはありません。
  • 数式 (Formula) は、送り出された各終値にそのレッグの取引数量を掛け、2つの積を足し合わせます。結果は、ダイアグラムが実際に取引する数量でのバスケットの価値であり、これがチャートパネルに描画される線です。
  • 稼働時間 (Working time) は第1レッグの確定したローソク足のタイムスタンプを読み取り、エントリー時間帯の内側でのみ通過を許可します。したがって1日にちょうど1本の足だけがここを通ります。フラグ (Flag) はその通過を1回のパルスに変え、バスケットが手仕舞いされるまでラッチされたままになります。
  • ラッチされたパルスは、Open position に設定された2つのポジション変更 (Position modify) ブロックを起動します。それぞれが自分の Security と自分の Volume を持ち、Open position 条件によって、その銘柄をすでに保有しているあいだは何も出しません。そのため、1回のパルスで既存のバスケットの上にもう1つ積み増すことはありません。
  • 戦略損益 (Strategy P&L) は数式 (Formula) に値を渡し、実現損益と評価損益を合算します。2つ目の数式は、バスケットを建てた瞬間に取り込んだ金額を差し引き、口座の累計を現在のバスケットだけの損益に変えます。
  • 論理 OR が手仕舞いの3つの理由をまとめます。手仕舞い時間帯、利益目標を上回ったバスケット損益、損失限度を下回ったバスケット損益です。その信号は Close position に設定された2つのポジション変更ブロックを動かすと同時に、その日のフラグを解放するため、次のエントリー時間帯ではラッチが空いた状態になります。

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

  • ロングエントリー: エントリー時間帯の内側で第1レッグの確定した足が稼働時間を開き、その日のフラグがまだ使われていなければ、2つの Open position ブロックが同じパルスで発火します。一方は第1レッグを自分の数量で買い、もう一方は第2レッグを自分の数量で買います。どちらの注文も成行注文で、それぞれ自分の銘柄にすでにポジションがある場合は発注が抑止されます。
  • ショートエントリー: このダイアグラムに売りの側はありません。2つのエントリーブロックはどちらも Buy 方向で固定されています。売りのバスケットは設定1つ分の違いです。2つの Open position ブロックの Direction を Sell に切り替えれば、同じスケジュール、同じラッチ、同じ資金ガードのままバスケットを逆向きに回せます。
  • エグジット: バスケットを手仕舞いする理由は3つあり、そのいずれか1つで十分です。手仕舞い時間帯はローソク足の到着ではなく戦略の時計で駆動され、予定どおりに手仕舞いします。バスケット損益が利益目標を上回れば利益のうちに早めに手仕舞いし、損失限度を下回れば損失のうちに早めに手仕舞いします。3つはいずれも1つの論理 OR を通って2つの Close position ブロックへ入ります。これらのブロックは数量も方向も必要とせず、見つけたポジションから両方を計算します。ポジションがなければ何もしないため、時間帯の内側で信号が繰り返されても害はありません。

パラメーター

パラメーター 既定値 説明
First Leg Security BTCUSDT@BNBFT 第1レッグが取引する銘柄。エントリー時間帯のタイミングを決めるローソク足シリーズは、この銘柄から作られます。
Second Leg Security TONUSDT@BNBFT 第2レッグが取引する銘柄。第1レッグと同じ信号で建てられ、同じ信号で閉じられます。
First Leg Candles 00:05:00 第1レッグの時間足。確定した足だけを使うため、エントリー時間帯は少なくともローソク足1本分の幅が必要です。
Second Leg Candles 00:05:00 第2レッグの時間足。バスケット価値を計算する前に2つを揃えて保持するため、第1レッグと同じ値にしてください。
Alignment Interval 00:05:00 2つのレッグを揃えるためのグループ化間隔。ローソク足の時間足と一致させてください。これより大きい値にすると、本来属する足よりも遅れて組が送り出されます。
Entry Window From 10:00:00 1日のエントリー時間帯の開始。第1レッグの確定したローソク足のタイムスタンプから読み取られます。
Entry Window Until 10:04:00 1日のエントリー時間帯の終了。2つの値のあいだには、ローソク足の始まりがちょうど1回だけ含まれる必要があります。そうでないと、その日のラッチが複数回セットされてしまいます。
Flatten Window From 17:00:00 1日の手仕舞い時間帯の開始。ローソク足の到着ではなく戦略の時計から読み取られます。
Flatten Window Until 17:10:00 1日の手仕舞い時間帯の終了。時計がその内側で少なくとも1回はサンプリングされるよう、ローソク足数本分の幅を確保してください。
First Leg Size 0.01 第1レッグを建てるのに使う数量であり、描画されるバスケット価値において第1レッグが占める重みでもあります。
Second Leg Size 100 第2レッグを建てるのに使う数量であり、描画されるバスケット価値において第2レッグが占める重みでもあります。2つのレッグの金額の寄与が同程度になるように選んでください。
Profit Target 100 現在のバスケットの利益がこれを超えると、早めに手仕舞いされます。稼働開始時点ではなく、バスケットを建てた瞬間から測られます。
Loss Limit -500 現在のバスケットの損失がこれを下回ると、早めに手仕舞いされます。負の値で、利益目標と同じ方法で測られます。

ダイアグラムの詳細

  • 銘柄が指定される場所は、Security 型の 変数 (Variable) ブロック2つだけです。それぞれが ローソク足 (Candles) ブロックと、そのレッグを管理する2つのポジション変更 (Position modify) ブロックの Security 入力へ値を渡すため、レッグを別の銘柄に向け直すには1つの値を編集するだけで済みます。
  • 同期 (Sync) はレッグごとに1本の線を受け取り、両方で足が確定した時点で両方をまとめて送り出します。送り出されたローソク足はチャートパネルに描画されるとともに終値へ変換され、数式 (Formula) がそれを取引数量で重み付けしてバスケット価値の線にします。
  • 2つの時計は意図的に別物にしてあります。エントリー側の 稼働時間 (Working time) には第1レッグのローソク足が入るため、エントリーの判断は、その判断が下される価格から乖離しません。手仕舞い側の稼働時間には 時刻 (Time) が入るため、データが途絶えても手仕舞いは実行されます。フラグ (Flag) はエントリー時間帯と注文のあいだに置かれ、手仕舞い信号によってのみリセットされます。これが、ダイアグラムを1日1バスケットに制限している仕組みです。
  • 損益変化 (P&L change) は更新のたびに実現損益と評価損益を報告します。両者を足すと口座の累計になります。最初のエントリー約定でその累計を変数が取り込み、2つ目の変数がそれを保持して以降の更新のたびに再送出し、これを差し引くと、いま建っているバスケットの損益が残ります。したがってガードは口座の全期間ではなく現在のバスケットを測っており、バスケットが閉じられるとすぐにゼロへ戻ります。
  • すべてのアクションは ポジション変更 (Position modify) ブロックです。エントリーの2ブロックは Open position 条件を使い、方向と数量を明示します。エグジットの2ブロックは Close position を使い、そのどちらも指定せず、自分の銘柄の現在のポジションから両方を導き出します。組み合わせ (Combination) は4つの約定ストリームを1つの取引系列にまとめてチャートパネルに描画し、4つの注文ストリームは別々に描画されます。

使い方

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