多種ブロック

多種ブロック

Loop ブロック

[Loop] ブロックは、空白の離散イベント メッセージのユーザー指定数を1つずつ生成して出力し、ループを必須とする設計を促進しています。

[Generator] ブロックが [Loop] ブロックの入力ポートを通じて離散イベント メッセージを送信する際、[Loop] ブロックは 3つの繰り返しループを開始します (時間入力ポートを通じて指定)。各繰り返しに対し、[Loop] ブロックはインデックス ポートを通じてループ カウンターを出力し、ループ出力ポートを通じて空白の離散イベント メッセージを送信します。最後の繰り返しは、[Loop] ブロックは [Exit] 出力ポートを通じて空の離散イベント メッセージを送信します。

[Loop] ブロックは、離散イベント メッセージが生成され出力される前に、インデックス ポートを通じてカウンターを出力します。

時間の考慮

[Loop] ブロックでは、「動作」ブロック (注文の発注など、具体的な動作を行うブロック) は、ループを実行中に操作を実行できないようになっています。

[Loop] ブロックが注文価格の減少に失敗します。

この例では、[Loop] ブロックは、3回検索を行うように設計されていて、各反復で、1価格増分ずつ、[Order] ブロックの価格入力が減少されます。一見、[Order] ブロックは、子注文をマーケットで下に移動させる 3つの変更要求を生成するかのように見えます。しかし [Loop] ブロックは、[Order] ブロックがループ中に、いかなる操作であっても実行することを許可していません。ループが完了後、[Order] ブロックは最終結果の価格入力を使って操作を実行できます。

アルゴリズムが開始されたときに、以下のイベントの順番が起こります。

  1. [Order] ブロックは 1枚の子注文で最良買値にジョインします。
  2. [Generator] ブロックは、離散イベント メッセージのダウンストリームを生成してプッシュし、[Loop] ブロックをトリガーします。
  3. [Loop] ブロックは、3回検索を行うように設計されていて、各反復で、1価格増分ずつ、[Order] ブロックの価格入力が減少されます。ただし、[Order] ブロックはこの手順の間はまったく操作を実行できません。これは、ダウンストリームのアクションが完了するまで、[Loop] は停止する離散イベント メッセージを出力しなかったためです。
  4. ループが完了すると、[Order] ブロックは、最終結果の価格入力に基づいて子注文を変更します。

タイミングの問題を解決する1つの方法として、[Order] ブロックではなく、[Discrete Order] ブロックを使用し、[Loop] ブロックのループ ポートを通じて離散イベント メッセージを [Discrete Order] ブロックの [msg] ポートに送信することです。ループ出力を使用すると、ダウンストリーム操作を使って、次のループの繰り返しを開始する前に注文を送信することができます。以下の例に示しています。

  1. [Start Stack Generator] ブロックは、[Loop] ブロックの入力ポートに空白の離散メッセージを送信し、[Loop] ブロックをトリガーします。
  2. 最初の繰り返しに関して、[Loop] ブロックは、アルゴが次の価格の計算に使用するインデックス出力を「 1 」に更新します。
  3. [Loop] ブロックは最初の離散イベント メッセージを出力し、これにより [Loop] ブロックは一時停止され、[Discrete Order] ブロックがトリガーされ、[Loop] インデックスから計算された価格帯にて買値で注文が発注されます。
  4. [Loop] ブロックは 1 ずつインデックスを増分し、2番目の離散イベント メッセージ出力を生成します。この手順は、指定したループ回数分を繰り返します。

ブロック プロパティ

ブロックをカスタマイズするには、[Block Properties] を更新します。

プロパティ 説明
Name (名前) ADL キャンバスのブロックの下に表示される名前。