最初のアルゴ作成
約定データの取得
このセクションでは、ロジックを作成して、エントリ注文約定からデータを抽出し、データを作成して実行中の平均始値を計算するのに使用します。平均の始値は後に、Scalper アルゴのエグジット価格を計算するのに使用されます。
このセクションでは以下の内容を説明しています。
- 連続メッセージと離散メッセージの違い。
- ADL の数式エディターの使用。
- 算術ブロックを使った計算の実行。
ADL のメッセージ連続メッセージと離散メッセージ
ADL のブロック間で渡されたデータはメッセージと呼ばれます。ADL には以下の2つのタイプのメッセージがあります。
- 連続メッセージ: 特定のデータの連続入力。
- 離散メッセージ: ある時間の特定の時点で送信された個々のメッセージで、イベントによりトリガーされたもの。フィールドにイベントに関する詳細が保存されています。
これまで、Scapler アルゴは連続メッセージを使用しています。
次に、[Entry Order] ブロックの離散イベント メッセージを使用します。これは 約定出力ポートを通じて放出されるメッセージであり、このブロックにより発注された注文を使って発生した各約定の個々の離散メッセージを出力します。
約定離散メッセージには、約定価格や約定枚数などの約定に関する情報を取得する欄が含まれています。
平均始値の計算
Scalper アルゴは、すべての執行済みエントリ注文の平均始値を計算します。これは後にエグジット価格の計算に使用されます。平均始値を計算するには
- ポジションのコストであるバリュー アット リスク (VaR) を計算します。
- すべてのエントリ注文の約定枚数を合計します。
- 合計約定枚数で VaR を割算し、平均始値を決定します。
VaR の計算
エントリ注文から約定を受信すると、これらの約定の合計は、各約定の枚数で価格を掛け算して計算されます。ValueAccumulator ブロックを使って、各約定にこの計算を実行でき、各結果の実行合計を蓄積します。ブロックは提供された数式を使って新規の値を計算し、離散メッセージがブロックに入力する度に蓄積します。
注文の約定から VaR を計算するには
- [Blocks] パネルから、[ValueAccumulator] ブロックを探し、キャンバスで [Entry Order] ブロックの右に配置します。
- [Entry Order] ブロックの [Fills] 出力ポートを [ValueAccumulator] ブロックの上部の入力ポートに接続します。
このエッジが離散メッセージを通過したという視覚的な表示を提供するためエッジは異なって表示されていることがわかります。
- [Block Properties] パネルにて、[Name] を [VAR] に設定します。
- [Formula] 欄の編集リンクをクリックして、計算で使用するブロックの数式を定義します。ブロックの [Formula Editor] が表示されます。
- [Formula Builder] にて、数式を作成して約定価格と約定枚数を掛け算し、受信する約定のコストを決定します。ブロックに送信された離散メッセージ欄にアクセスするには、使用する値の名前の後に # を入力します。タイプすると、エディターに利用可能なメッセージの欄が表示されます。
- [#] をタイプしてリストから[fillPrice] を選択し、数式に [fillPrice] 欄を追加します。
- 掛け算の場合は [*] を入力し、[fillQuantity] 欄を選択して数式を完了します。
- [Save] (保存) をクリックします。[Block Properties] の [Formula] 欄にブロック数式が表示されているのが分かります。
合計約定枚数の追跡
注文から受信したすべての約定の平均価格を決定するには。すべての約定の枚数を追跡する必要があります。VaR を計算するのに使用するのと同様で、[ValueAccumulator] ブロックを使用して、実行中の約定枚数の合計を保持する必要があります。
合計約定済み枚数を追跡するには
- 別の [ValueAccumlator] ブロックを [VAR] の下のキャンバスにドラッグし、[Entry Order] 約定出力ポートに接続します。
- [Block Properties] パネルにて、[Name] を [Fill Qty] に設定します。
- [Formula Editor] を開いて [#] をタイプし、数式に [fillQty] 欄を追加します。
- [Save] (保存) をクリックします。
平均始値の計算
最後に、[VAR] ブロックと [Fill Qty] ブロックからの値を使って、平均始値を決定する必要があります。[Divide] ブロックを使ってこの計算を実行します。
平均始値を決定するには
- [Blocks] パネルから、キャンバスに [Divide] ブロックをドラッグします。[Average Open Price] に名前を変更します。
- [VAR] ブロックの上部の数値出力ポートを [Average Open Price] ブロックの上部の入力ポートに接続します。
- [Fill Qty] ブロックの上部の数値出力ポートを [Average Open Price] ブロックの下部の入力ポートに接続します。
ロジックのテスト
アルゴで続行する前に、約定ロジックをテストして、意図したとおりにアルゴが機能していることを確認するようにおすすめします。
ロジックをテストするには、以前のように同じセットアップを使用します。
- [Values] タブにて、大きな注文枚数を入力し、各約定がブロック値を適切に更新することを確認できます。
- アルゴを実行して、[VAR]、[Fill Qty]、 and [Average Open Price] ブロックの数値出力を監視し、予測したとおりに更新していることを確認します。
- アルゴを中止します。
これで約定からデータを取得し、そのデータで計算を実行することを正常に完了できました。これらの値を使って、エグジット注文の価格と枚数を決定することができます。