ADL と TT Mobile
残念ながら、ユーザーは TT Moblie アプリを通じて新規のアルゴ注文を起動できません。ただし、TTW ブラウザ アクセスからアルゴを起動すると、TT Mobile アプリにログインして、アルゴ ダッシュボードで実行中のこれらのインスタンスを表示できます。

残念ながら、ユーザーは TT Moblie アプリを通じて新規のアルゴ注文を起動できません。ただし、TTW ブラウザ アクセスからアルゴを起動すると、TT Mobile アプリにログインして、アルゴ ダッシュボードで実行中のこれらのインスタンスを表示できます。

Unaccumulated LTQ is simply the most recent LTQ. Accumulated LTQ is a summation of all LTQs that occur at a given LTP while the LTP remains unchanged.
For example, consider the following trades: LTP = 100, LTQ = 3LTP = 99, LTQ = 4LTP = 99, LTQ=7LTP = 99, LTQ=1
At this point, an unaccumulated LTQ would be displayed as 1 whereas an accumulated LTQ would display as 12 (4+7+1). In 7x, TT Price Servers could be configured to deliver LTQ as accumulated or unaccumulated. As such, the LTQ displayed in ADL would be accumulated or unaccumulated based on this setting. In TT, TTW displays an accumulated LTQ. However, TT ADL displays an unaccumulated LTQ. If desired, ADL designers can calculate the accumulated LTQ as follows

For more information and LTP/LTQ in ADL, refer to the documentation on the Field Block.
TT ADL 開発者がアルゴにて時間とタイマーを使用する必要のある状況があります。ADL は、いくつかのブロックやメカニズムをつうじてこの機能を提供しています。これらのうち幾つかは TT ADL の新機能です。以下にそれぞれ使用実例を説明しています。
Stopwatch ブロックではユーザーが、ミリ秒で離散イベントの時間の遅延を設定できます。ミリ秒数は関連の緑色のキャンバスの出力として指定されるので、内部のロジカル状態に基づいて異なります。

これが便利である場合の例として、約定と追加の注文発注の間での遅延を設定することです。以下のアルゴでは、Order ブロックにフィードされる枚数が増加する前に、約定メッセージでは10秒間の遅延があります。

Generator ブロックの新規の AtStartTime モードを使って、通知のメッセージを送る日付と時間を指定できます。AtStartTime モードの際、UTCDate と UTCTime コネクターの両方を表示します。これは年、月、日、時間、秒、ミリ秒で構成されています。指定した UTC 日付と時間に達すると、離散イベントは出力ポートから伝搬されます。

これが便利である場合の例として、特定の日付と時間に Order ブロックのオン・オフ入力ポートを更新することです。以下のアルゴにて、Order ブロックが2017年7月14日 15:00:00.000 (米国中央時間帯) まで有効化されます。

Generator ブロックの新規の AtStartTime モードを使って、通知のメッセージを送る毎日の時間を指定できます。AtStartTime モードの際、UTCTime コネクターを表示します。これは時間、秒、ミリ秒で構成されています。指定した UTC 時間に達すると、離散イベントは出力ポートから伝搬されます。これは毎日繰り返されます。

これが便利である場合の例として、特定の時間に Order ブロックのオン・オフ入力ポートを更新することです。以下のアルゴにて、Order ブロックが 3:00:00.000 (米国中央時間帯) に有効化されます。

Generator ブロックの機能強化された TimeInterval モードを使って、指定した時間の間隔が経過した際に、離散メッセージ通知を送るように指定できます。このモードにある場合、有効化、繰り返し、periodMs の入力ポートが露出されます。有効化ポートを使って、タイマーを有効化または無効化でき、繰り返しポートを使って、イベントを繰り返すことができ、さらに periodMs ポートを使って、時間の期間をミリ秒で定義できます。これらのすべてを動的に設定できます。

これが便利である場合の例として、特定の時間の間隔で Order ブロックの価格ポートを更新することです。以下のアルゴで、注文が 500ミリ秒毎に買値と同じ値に再価格設定されます。

新規の MsgInfo Extractor ブロックを使って、イベントが発生した日付と時間を露出することができます。特に言えば、年、月、日、時間、分、秒、ミリ秒の出力ポートを露出します。これらは離散イベントが MsgInfo Extractor ブロックに入ると常に更新されます。日付と時間のスタンプは、ブロックがメッセージを受信する時間の一点を示しています。

これが便利である場合の例として、アルゴが特定の時間の間に開始される場合のみ必ず Order ブロックが有効化されるように確認することです。以下のアルゴでは、10:00:00.000 UTC ~ 14:00:00.000 UTC の間にアルゴが開始される場合のみ、Order ブロックが有効化されます。

注: Clock ブロックは X_TRADER バージョンの ADL で利用できますが、TT バージョンの ADL には含まれていません。TT ADL でも技術的には同じメカニズムを作成できますが、ご使用のアルゴの性能で深刻な低下が起こる可能性があるので、TT ではこれを勧めていません。

アルゴで時間とタイマーを使用する必要がある場合、TT ADL ではこれを行う幾つかのブロックやメカニズムを提供しています。
Autotrader ウィジェットを利用して、ユーザーは RTD Excel データでユーザー変数を生成できます。この方法は、値を連結させる TTW での Autotrader ウィジェットを使用しています。
アルゴの開発とテストを行った後、他のユーザーが取引にアルゴを使用できるように設定できます。ADL のアルゴ共有機能を使って、他のユーザーがアルゴを執行したり ADL でアルゴを起動できるように、アクセス許可を認めることができます。他のユーザーが執行のためのアルゴを共有する場合、アルゴはアルゴ ダッシュボードにて利用可能なアルゴの一覧に自動的に表示されます。アルゴが 注文チケット アルゴ (OTA) または 合成注文アルゴ (SOA)である場合、アルゴは [MD Trader] などの [取引] ウィジェットにて公開アルゴ一覧に表示されます。
アルゴを共有する場合、これらのユーザーに以下のアクセス許可の両方または1つを設定できます。
注: ユーザーは ADL キャンバスでアルゴを開かなくても、アルゴの承認要求を送信できます。
TT は、共有アルゴに対して以下の制限事項を課しています。
このトピックでは、新規のアルゴ インスタンスを起動することなく、アルゴを取得して注文を再発注する方法や、注文を連続して発注する方法について説明しています。「リロード機能」を利用したり作成するには幾つかの方法があります。ここにリロード機能タイプの Library ブロックを作成する簡単な方法をいくつか紹介します。

ユーザーは 3 コネクター入力を使って Library ブロックを作成します (約定、クリップサイズ枚数、合計注文枚数)。最初に入力した約定値を比較して、それをクリップ サイズ枚数入力値で割り算します。そしてこの計算値が出て、整数に四捨五入切り捨てを行い、小数点が入らないようにします。この結果の計算値は次に、クリップ サイズ枚数入力値で乗算されます。この結果の計算値は次に、クリップ サイズ枚数入力値に追加されます。結果の計算値はリロード枚数値となり、注文が起動または開始されて以来の直前の約定を構成しています。リロード枚数は Math ブロックにフィードされ、このリロード枚数を合計注文枚数と比較する出力最小値に設定されます。結果の出力最小値は、実際のリロード枚数となり、Orders ブロックにフィードされます。最小値を出力するよう設定された Math ブロックは、Reload ロジック機能がシャットオフされる方法です。比較は、合計注文枚数入力が最小 (MIN) 値 対、リロード枚数入力を示しています。この値は、Orders ブロックの枚数入力にフィードし、Order ブロックがそれ以降注文を発注しなくなり、最初の合計注文枚数より多くなります。

以下の例は、ユーザー定義変数「リロード ボタン」を作成する方法を示しています。これにより、ユーザーがアルゴを手動でトリガーして、希望した時に新規の注文を発注できます。これは、単に Boolean ブロックから [TRUE/FALSE] 出力を切り替えることでできます。これにより、以下に示すとおり、内部ロジックがトリガーされます。

ユーザーは、「注文一覧の上下」の注文を発注する必要がある場合があります。これを実行するには、基本優先順位ホルダーを作成します。以下の例は、発注のこれらのタイプのロジックの基本エントリ側を示しています。
この例は、以下のアルゴ変数を使用します。

以下の画像では、ロジックの組み立て方法を説明しています。この最初の画像では、変数を設定します。

この部分は注文のもとのスタックを作成します。これは、スタックの深みを設定するのにループ ブロックを使用します。そして Loop ブロックから Index Number をとり、任意のオフセットに追加します。ユーザーは各元の注文を発注するちょうどの価格を特定するように設計されています。これらは各自、仮想インスタンスになります。DOB はもとの注文と注文枚数として、「START PRICE」を参照します。また DOB はフリップ フォー セル (Flip for Sell) 機能に設定されています。
以下に示すブロックのいくつかの内部参照について説明します。

この画像では、[Virtual Order Managers] グループ ブロックのインサイド ロジックを示しています。
以下に示すブロックのいくつかの内部参照について説明します。

この画像では、[Virtualized Group] ブロックの中のロジックを大きな表示で示しています。

そしてこの画像では、[Order Price Movement] をになっているロジックを示しています。

ADL の自動ストラテジーの多くは、「ピボット」ポイントなどの特定のブロックの動作をもつ、ほぼ同一の買側と売側の方法を使用します。そのように、ADL の幾つかのブロックユーザーが [Flip for Sell Order] 機能を持っています。これで [Order Side] のユーザーの選択によって、代わりの機能を実行できるようになります (買または売)。例えば、この機能が有効化されると、[Add] ブロックは [Order Side ] の値に基づいて、加算または減算のいずれかを実行します。
例 Flip for Sell Order 機能を使った両方向のストラテジー (Flip for Sell Order が有効化されたブロックが協調表示されます)

注 上記のストラテジーの特定の部分を視覚化して適切に機能させる必要があります。視覚化とは、例では明確化の目的で示されていません。
常に買サイドの方向から設計して [Flip for Sell Order] 機能を有効化し、適切なピボット ブロックに対し売サイド方向に切り替え可能にする必要があります。
[Trade] ウィジェットにて、[Algo Dashboard] など、[Flip for Sell Order] 機能が有効化されたブロックを含んでいるアルゴリズムに対しては、[Side] 変数が自動的に表示されます。そしてユーザーはアルゴリズムを起動する前にこの変数を設定する必要があります。
ユーザーは以下の方法の1つを使って [Order Side] 変数を替えることができますが、アルゴリズムを起動する前に、[Order Side] 変数を宣言する必要があり、起動後は変更できません。
ドロップダウン メニューを使用。以下のブロックは Flip for Sell Order 機能をサポートしています。
ADL ブロックは [Numeric] 出力ポートと [Boolean] 出力ポートからの値をエクスポートでき、[Algo Dashboard] のアルゴの一番右の列に表示されます。これらの出力の値は動的に更新されます。
例 アルゴからエクスポートされた3つの値

注 エクスポート済みの値は仮想ブロック内や、仮想ブロックの出力ポートに対してはサポートされていません。
仮想化とは、アルゴリズムの指定の部分に適用して、指定の部分の複数の「コピー」を作成し、同時に執行できるようにするプロパティです。概念は複雑に見えますが、例で説明すると、仮想化の必要性が明確になります。
以下の例で示すとおり、ユーザーは E-ミニ S&P 500 限月で単純なマーケット メイクのアルゴリズムを設計して実行する例を紹介します。

現在の最良買値が 1313.75 でアルゴリズムのエントリ ロジックが、この価格で 10 エントリ側の限月をクォートすることを想定します。次に 10 限月中 1 つの限月が 1313.75 で約定します。それに対して、アルゴリズムのエグジット ロジックが 1314.25 で1限月を、約定値より高い 2増分を提供します。

マーケットは高値に移動し、最良値は 1314.00 に変化することを想定します。Step 2 からのオフセット限月が 1314.25 でリセットされますが、アルゴリズムのエントリ ロジックは残りの 9 エントリ側限月を 1314.00 に変更します。次に 9 エントリ側のうち 2 エントリ側が 1314.00 で約定します。この時点で、アルゴリズムの合計約定数は、手順2 からの最初の部分約定も含めて 3 となります。アルゴリズムのエグジット側のロジックが合計約定数と最新の約定値のみを使用するように設計されている場合、1314.50 で3つのオフセット限月と、最新の約定値より2つ高い増分を提供します。さらに、アルゴリズムのエグジット ロジックは一度に1注文のみクォートできるので、1314.25 で残存するオフセット限月を削除しました (手順 2 より)。

この動作が発生しないようにするには、ユーザーはこのアルゴリズムのエグジット ロジックを仮想化する必要があります。仮想化では、エントリ側の約定が発生するたびに、エグジット ロジックの新規コピーが作成されるので、各オフセット注文が独立したロジックで作動できます。

ブロックのグループを仮想化すると、ユーザーは、指定の離散イベント (約定など) が発生するたびに、グループの新規コピーが作成されるように整理できます。つまり、ユーザーはブロック1組をグループ化し、グループを仮想化して、仮想グループ ブロックに離散イベント メッセージへの道筋を結びつける必要があります。この道筋を通じて離散イベント メッセージが仮想ブロックに入った場合、新たなコピーが作成され、各コピーはそれぞれ独立して作動します。ブロックの構造では同一である各コピーは、独自の入力と出力によりそれぞれ独立して作動できます。
注: 仮想ブロックの複数コピーが同時に存在できるので、[Designer Canvas] は仮想ブロック内に含まれるブロックの動的出力値を正確に表示しない場合があります。
推定優先順位 (EPIQ) は、詳細な注文の情報に欠けているので完全ではありません。しかし注文の発注時に注文の価格での枚数で開始することで、保守的な推定ができます。そしてこの価格で発生したすべての注文によって値は下がります。次に [BidQty] がこの値を下回ると、さらに下向きに調整します。

Branch0 ブロックの数式は以下のとおりです。
! tradeIsOTC AND tradePrice = MsgInfoExtractor0.limitPrice AND Order0 > 0
ADL の各スマート取引ブロックでは、アルゴリズムが停止や取消された場合に注文一覧で子注文を残すことができます。このオプションは、該当する取引ブロックをダブルクリックするとアクセスできます。
例 注文を残すオプション

以下の操作により、アルゴリズムが停止または取消される可能性があります。
ADL の合成注文アルゴ (SOA) は、TT 注文タイプのように発注時に起動される注文チケット アルゴ (OTA)に類似しています。ただし、SOA は3つの点で OTA とは大きく異なります。
OTA と同様、合成注文アルゴ (SOA) は、[Instrument] ブロックの [Type] プロパティを [Order Instrument] に設定することを必須づけています。さらに、[Number] ブロックの [Variable Type] プロパティを [Order Quantity] に設定する必要があります。

SOA が展開されると、以下のように注文タイプ値の一覧に表示されます。

SOA で発注された親注文と子注文の両方が [MD Trader] ウィジェットに表示されます。アルゴの作成者が ADL で [Synthetic Algo Order (SOA)] 設定を有効化すると、[Show algo order on ladder] 設定は自動的に有効化されます (そして無効化することはできません)。

合成アルゴ注文 (SOA) を送信する際、最初に注文には、親注文の約定待ち枚数は 0 と、非公開枚数には * が表示されます。子注文は通常の約定待ち注文として表示されます。子注文が SOA 親注文として同じ価格帯で発注されると、約定待ち注文には、その価格帯で発注されたすべての子注文の合計約定枚数が反映されます。子注文が別の価格帯で発注されると、親注文の約定待ち枚数は 0 が表示されます。

(1) 同じ価格帯で取引所子注文を含んだ SOA 親合成注文
(2) SOA 親合成注文
(3) 別の価格帯での SOA 取引所子注文
注: 親注文の発注済み枚数を表示するには、注文を中央クリックして [Floating Order Book] を表示します。
注: SOA が最初の子注文の送信を遅らせると、SOA 親注文の約定待ち枚数は、最初の子注文が発注されるまで 0 の状態を保ちます。
TT では、Algo Server メンテナンスの再起動の後に、 ADL を自動的に再起動させるための新機能を開発しました。デモ取引環境の Algo Server は、月曜~金曜のシカゴ時間の午後 4時15分に再起動されます。ライブ取引環境の Algo Server は、メンテナンスが必要な場合は週末に再起動される場合があります。
すべての ADL アルゴは、再起動前の状態に回復されますが、Autospreader や Aggregator 注文を実行するのに設定された以下の注文ブロックが1つ以上含まれるアルゴは例外となります。これらのアルゴの回復は失敗します。
さらに、Algo Server が再起動されている間に、取引所以外の定期的な離散イベントを発信するように設計された ADL アルゴの状態は、再起動後に不正確であったり障害を起こす可能性があります。この方法で設計されたアルゴは、週末のメンテナンスが開始される前に停止させる必要があります。
ADL ブロックでは、ブロックの出力値を計算するための数式を定義できます。このようなブロックは、それぞれの [ブロックプロパティ] パネルから [Formula Editor] を開くことができます。



[Formula Editor] には、以下のような、数式で使用できる値や演算子が表示されます。
注: IF 演算子は、[Alert] ブロックで現在サポートされていません。
Formula Editor ではオート コンプリート機能を提供していて、アルゴですでに利用可能な情報を簡単に参照できます。特殊文字を入力すると (@または#)、数式に変数として挿入できる項目のリストがエディターに表示されます。また記号の後に文字を入力すると、その文字で始まる項目に絞り込まれます。

| |
# を入力すると、受信した離散イベント メッセージで利用可能なすべての欄のリストが表示されます。 |
| |
@ を入力すると、キャンバスに1つ以上の連続出力ポートを含むブロックのリストが表示されます。 |
以下のサンプルでは、基本的な数式タイプを説明しています。
以下の数式は、単純にブール値「TRUE」を出力し、他の下流ブロックが使用できるようにするものです。


[ExitPrice Value Extractor] ブロックの次の数式は、買注文の約定値よりも2ティック高い価格を計算します。そしてこれを使用して、買注文の約定値よりも2ティック高いエグジット売注文を発注できます。



| |
[fillPrice] メッセージ欄の値にアクセスするには、# を入力して欄を選択します。 |
| |
[TickSize Field ] ブロックの値にアクセスするには、@ を入力して希望するブロックを選択します。 |
次の数式は、現在の反対側のインサイドマーケットが、約定値より2ティック高いかどうかに基づいて、[TRUE] または [FALSE] の値を出力します。


[Formula Editor] には、アルゴが実行されるにつれ、動的に更新する値を追加できる、ドロップダウン メニューが含まれています。
connectors: アルゴリズムの他のブロックから、連続出力ポートの値を参照できるようにします。また [block.connector] の形式でコネクターを入力することもできます。
[Formula Editor] 内の以下のコネクターにより、アルゴリズム内の Analytics0 という Analytics ブロックからの連続出力ポートが表示されます。

注:
messages: 離散イベント メッセージに埋め込まれた以下の情報を抽出できます。また {fieldName} の形式でコネクターを入力することもできます。
“string“: (Alert ブロックのみ) メッセージ文字にカスタム文字を追加できます。
以下の ADL ブロックでは、カスタム数式を作成できます。
取引ブロック
Discrete ブロック
Misc ブロック
Exit ブロックは、仮想グループ ブロック内で使用され、不必要なインスタンスを廃棄するのに使用されます。アルゴリズムに Exit ブロックを追加するには、仮想グループ ブロック内でキャンバスを右クリックして「Exit ブロックの追加」を選択します。Boolean または離散メッセージのいずれかを使って、アルゴリズムでロジックを作成し、必要でなくなった場合はいつでも仮想インスタンスを廃棄できます。
Exit ブロックを使うのではなく、場合によっては、アルゴリズムの効率性に影響が及ぼされ、遅延の問題を生じることがあります。これは、仮想インスタンスが作成される際は常に、メモリーに保存され、ADL は各仮想インスタンスを更新する必要があります。更新する必要があるインスタンスが多ければ多いほど、この手順により時間がかかります。
1000 の1ロット注文を発注しようとしているエントリ側の注文があります。そして1ティックの利益値のため各個々の1ロットのエントリ側注文を約定待ちしようとしています。全部のエグジット側のヘッジ ロジックを仮想化しました。そしてヘッジ ロジックで約定した場合に各仮想インスタンスのインサイドをトリガーさせるように、 EXIT ブロック内に作成します。
次に入力コネクターに Exit ブロック ロジックを接続させて、1000 個の仮想インスタンスでロジック構造をセットアップします (連続ブール値)。ユーザー定義の Boolean ブロックを今作成した入力に接続させます。アルゴリズムを開始して、アルゴがこれらの1000の仮想ブロック インスタンスを起動している間に、サーバーで利用するシステム リソースを監視します。リソースが均質化するのを待機します (メモリー、スワップファイル、CPU など)。
Boolean ブロックのスイッチを入れて、すべての Exit ブロックを一度にトリガーするようにすると、.NET がゴミ箱の集合をトリガーした際にリソースの空き容量が確保されるのがわかります。
ADL のアルゴリズムは、注文チケット アルゴ (OTA) として設計できます。つまり他の注文タイプと同様に、アルゴリズムを [MD Trader] または [Order Ticket] ウィジェットのいずれかから起動できます。素早い「1クリック」スタイルの執行が必要なストラテジーには、OTA 機能が非常に便利になります。
注: 約定は、OTA 親注文にではなく、OTA 子注文のみに生成されます。
[Instrument] ブロックの [Type] プロパティが [Order Instrument] に設定されると、アルゴは注文チケット アルゴ (OTA) となります。

OTA が作成され展開されると、以下のようにアルゴ名が注文タイプ値に追加されます。

既定で、OTA により発注された子注文のみが [MD Trader] ウィジェットに表示されます。OTA アルゴ クリエーターで 「Show algo order on ladder」 (板情報でアルゴ注文を表示) 設定を有効化すると、OTA で、MD Trader ウィジェットの親合成注文をオプションで表示することができます。

注文枚数と約定待ち枚数は、両方とも 「0」 に設定され、注文が OTA 親合成注文であることを示しています。子注文は通常の約定待ち注文として表示されます。

(1) OTA 親合成注文
(2) OTA 子注文
ADL.変数が更新される粒状順序を理解することは、ADL で高度なプログラミング技術を取得するのに、最も重要な要素の1つです。
ブロックが離散イベント メッセージのパルスを出力すると、アルゴリズムは一時的に、取引所サーバーからの連続メッセージのチャネルを停止します。離散イベント メッセージのパルスがアルゴリズムの中に伝達されている間、連続メッセージ チャネルは、閉じられたままとなります。効果では、この動作は、マーケット データのストリーミングにチャネルする [Instrument Field] ブロックとして、ブロックの出力を「フリーズ」します。この静的状態では、離散的イベント メッセージのパルスはユーザーにより指定された経路を移動して、経路に存在するブロックの出力値の更新を行います。この伝達が完了すると、アルゴリズムはすべての取引所サーバーからの連続メッセージのチャネルを再開します。
注 TT はパフォーマンスの向上のため常にシステム改善を行っています。そのため TT では、アルゴのシーケンス ロジックを設計する際に、特定のシステム遅延を想定した時間の遅延を含めないように強く推奨しています。
このような伝達はミリ秒で実行され、実際には見えることはありません。ただしこのメカニズムでは、ADL でユーザーは、離散イベント時に正確に存在するマーケット データを取得して使用できます。以下の ADL は、離散イベント メッセージが伝達される際にブロックが更新される正確な順番を制御しています。
伝達中に、離散イベント メッセージが Pass-Through ブロックに入り (離散イベント メッセージを変更せずに受信または受け渡しする際)、以下の順番で動作が起こります。
例 「パススルー」ブロックを入力する際の更新の順番。この例では、離散イベント メッセージが、パススルー ブロックを出る前に、パススルー ブロックから 「下流」に接続されているブロックをまず更新します。

離散イベント メッセージは、できるだけ遠くに道筋に沿って伝達を行い、以下のブロックのうちいずれかの1つに入ると、終了 (終結) します。
例 Termination ポイント
