GitHub で見る

2銘柄投票パネル戦略のダイアグラム

2つの銘柄にまたがる投票パネルです。1時間のローソク足が確定するたびに、各銘柄は自分自身の1つ前の1時間と7つの価格値 — 始値、高値、安値、終値、中値、代表値、加重終値 — で比較され、上昇した値はそれぞれ上向きに1票、下落した値は下向きに1票を投じます。2つのスコアは合算されて1つの判定となり、取引対象の銘柄はその判定だけを根拠に買われるか売られます。ダイアグラムのどこにもインジケーターはありません。判断のすべてがローソク足の価格、算術演算、比較だけで組み立てられています。

戦略の概要

  • 2つのローソク足ブロック(Candles)がダイアグラムに入力を与えます。一方は戦略自身の銘柄で動作し、これが実際に取引される側です。もう一方は Security 変数によって指定された銘柄に向けられているため、2つ目の銘柄は配線の問題ではなく設定項目になります。
  • どちらの系列も確定したローソク足だけを受け取ります。まだ形成中のバーから数えた票は1時間のあいだに何度も変わり、そこから生まれる注文の時刻をその1時間の始まりにしてしまいます。
  • 各系列では、1つ前の値(Previous value)が1ステップ前のローソク足を丸ごと保持し、コンバーター(Converter)が現在のローソク足と保持されたローソク足から始値、高値、安値、終値を取り出します。先にローソク足を保持し、そのあとでフィールドを読み取ります — すべてのバーで値が返るのはこの順序です。
  • これら8つの数値が、銘柄ごとに1つの数式(Formula)へ入ります。価格値ごとに1つずつ、合計7つの sign() 項がそれぞれ +1、0、-1 を返し、それらが加算されます。結果は上票から下票を引いた値であり、-7 から +7 のあいだに収まります。数式には真偽値そのものを返す手段がないため、数式の内部で比較を成り立たせているのが sign です。
  • 参照側のスコアは、input-as-trigger をオフにした変数(Variable)によって取引対象のバー上にサンプリングされます。スコアは入力に届いてそこで待機し、取引対象のローソク足がトリガーに届いてスコアを送り出します。2つのフィードが同じ瞬間にティックすることはなく、これによって2つ目の銘柄が取引対象銘柄の時計に乗せられます。
  • 2つ目の数式が2つのスコアを合算してパネルの判定(-14 から +14)を作り、その判定は、判定を構成する両方のスコアとともに、ローソク足の下のチャートに描画されます。
  • 1つのしきい値が両サイドを支配します。比較ブロックが判定をしきい値と比べ、1行の数式がその符号を反転させ、2つ目の比較が判定をその値と比べます。したがって設定値を上げると、ロング側とショート側の条件が同じだけ厳しくなります。
  • ポジションは変数によってバー上に取り込まれ、ゼロと3通りに比較されます。ノーポジションならエントリーが許可され、ロングまたはショートなら決済が許可されます。4つの AND ゲートが4つのポジション変更(Position modify)ブロック — 2つは新規建て、2つは決済 — を駆動し、2つ目のチャートパネルが参照銘柄を取引対象銘柄と並べて描画します。

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

  • ロングエントリー: 確定したバーでパネルの判定がしきい値を上回り — 2つの銘柄が合わせて14票のうち明確な多数を上向きに投じ — かつポジションがノーポジションである状態です。ロング側のゲートが作動し、ポジション変更(Position modify)が Open position 条件のもとで注文数量を成行で買います。そのため、続くバーが同じ判定を繰り返してもポジションには何も追加されません。
  • ショートエントリー: その鏡像です。判定が符号を反転させたしきい値を下回り、14票の多数が下を向いており、ポジションはノーポジション。ショート側のゲートが作動し、2つ目のポジション変更が、同じく Open position 条件のもとで注文数量を成行で売ります。
  • エグジット: ストップロスもテイクプロフィットもありません。ポジションを建てたパネルが、そのまま手放す役割も担います。ポジションがロングのあいだに判定が符号を反転させたしきい値を下回ると決済ゲートが作動し、Close position がポジション全体を成行で返します。ポジションがショートのあいだに判定がしきい値を上回れば、反対側で同じことが起こります。決済側のブロックは固定サイズを売るのではなく、建っているものを閉じるため、決済がドテンになることは決してありません。パネルが転換すると、まずダイアグラムはノーポジションになり、同じ向きを示し続ける次のバーで新しいサイドが建てられます。

パラメーター

パラメーター 既定値 説明
Reference Instrument TONUSDT@BNBFT もう半分の票を投じるバーを提供する2つ目の銘柄。取引対象の銘柄とともに接続から取得できる必要があります。
Traded Candles 01:00:00 取引対象のローソク足の時間軸。判定が読み取られ、注文が送られるリズムです。
Reference Candles 01:00:00 参照用ローソク足の時間軸。取引対象と同じ値に保ってください。そうしないと2つのスコアが異なる長さの期間で数えられ、その合計は本来の意味を失います。
Vote Threshold 2 ポジションを建てるまでに2つの銘柄が投じなければならない多数の大きさ、そして建てたポジションを手放すまでに判定が反対側へどれだけ振れなければならないかを決めます。パネルが投じる14票のうちの票数で数えます。
Order Volume 1 注文サイズ(ロット単位)。

ダイアグラムの詳細

  • すべての注文ブロックはオンライン接続を必要としない設定になっているため、ダイアグラムはヒストリカルデータでもライブフィードと同じように動作します。既定値のままにすると、リプレイされたデータ上ではブロックがすべての取引を差し止めてしまいます。
  • エントリーには Open position 条件が、決済には反対サイドの Close position 条件が設定されています。条件がなければ、ブロックはトリガーされたすべてのポジション変化に対して動作し、1つの判定が注文の連なりに変わってしまいます。
  • すべての定数 — ゼロ、しきい値、注文数量 — は取引対象のローソク足によってトリガーされます。変数は値が設定されたときではなくトリガーで出力するため、トリガーされない定数は、その隣の比較を実行中ずっと沈黙させたままにします。
  • まったく同じ値が繰り返された場合、票はいっさい投じられません。sign は値が変わらなければゼロを返すので、実際の値動きだけが数えられ、一方の銘柄が動かない1時間は、単にもう一方の銘柄に判断を委ねることになります。
  • パネルを過敏な引き金からフィルターへ変えているのが、このしきい値です。ゼロではダイアグラムはごくわずかな多数でも動き、ほぼ毎バー反転します。値を上げると、2つの銘柄が十分に強く一致するまで待つようになり、その間の不一致を通してポジションは保持されます。

使い方

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