
ビジュアル モジュール構築の取引戦略 - 導入章を学習し、ビジュアル モジュールの構築とスプライシングの概念を理解します。 そうすれば、他のモジュールの使い方を簡単に学ぶことができます。 より複雑な機能を組み合わせることもできます。
これまでの研究やテストでは、いくつかの「トランザクション カテゴリ」モジュールに触れてきました。 例えば: 「引用の交換」モジュール 「交換取得Kライン」モジュール …
すでに使用されているものについては詳細には触れません。

ロボットと取引するための戦略を記述するときに、ヘッジ戦略などの複数の交換オブジェクトを追加できます。 または、市場の状況にアクセスするには、交換オブジェクトをトラバース (トラバースとは、各オブジェクトを 1 つずつ訪問することを意味します) する必要があります。 このとき、交換回数を取得するにはモジュールを使用する必要があります。
まず、単純な構造を使用して、現在構成されている取引所の数を出力します。

実際、これは次の JavaScript ポリシー コードを呼び出すのと同じです。
function main () {
Log(exchanges.length)
}
この結合モジュールを実行した結果を見てみましょう。

3 つの異なる取引所アカウントを表す 3 つの取引所オブジェクトが追加され、バックテスト ログの出力結果が 3 になっていることがわかります。

3 つの交換オブジェクトを追加すると、ドロップダウン ボックスに 3 つのオプションが表示されます。
ループタイプでは、ループモジュールを事前に学習します。

条件判断モジュールを事前に学習しましょう:
判定条件は次のように記述できます。

追加された取引所名をループモジュールで繰り返し処理します 条件判定モジュールを使用して、現在のループカウントが印刷する交換名に対応しているかどうかを判断します。

バックテスト実行結果:

JavaScript 戦略コードのように:
function main () {
for (var i = 1 ; i <= exchanges.length ; i++) {
if (i == 1) {
Log(exchanges[0].GetName())
} else if (i == 2) {
Log(exchanges[1].GetName())
} else {
Log(exchanges[2].GetName())
}
}
}

簡単な例では、現在設定されている最初の交換オブジェクトの取引ペアを取得し、それをテキスト変数(変数カテゴリに事前に作成)に割り当てます。
バックテスト結果:

JavaScript ポリシー コードを呼び出す場合:
function main () {
var text = exchange.GetCurrency()
Log(text)
}
このモジュールは非常に重要で、発注操作に使用されます。価格変数は、最初のほぞ(溝)の位置に埋め込まれ、注文価格を指定します。固定値を直接入力することもできます。
2 番目のほぞ (ドット) 位置には、注文数量を指定するために使用される注文数量変数が埋め込まれます。
たとえば、現在のティック市場データの最新価格に基づいて、10 元のスリップで買い注文を出し、注文数量を 0.1 コインに設定し、注文 ID を出力する例を作成します。

バックテスト実行結果:

次の JavaScript ポリシー コードのように:
function main () {
var id = exchange.Buy(_C(exchange.GetTicker).Last + 10, 0.1)
Log(id)
}

このモジュールは、現在の取引ペアの未完了の注文をすべて返します。返される構造はリスト (配列) であり、リスト型モジュール (トラバーサル操作など) で処理できます。 例えば、上記の注文モジュールの例[4]を少し変更し、注文時に加算される10元の価格を10元の減額に変更します。注文はすぐには実行されず、買いと売りの深さ(つまり、買い 1、買い 2、買い N の間の特定のレベル)で保留されるため、注文は実行を待つ保留注文になります。 次に、「現在の取引ペアの委託注文を取得する」モジュールを使用して、PENDING 状態 (実行待ち) の注文のリストを取得します。 その後の市場状況での注文の実行を回避し、バックテストの最終的な観察に影響を与えるために、「現在の取引ペアの委託注文を取得する」モジュールが実行され、注文リストが印刷された後、すぐに「例外をスローする」を使用します。 「モジュールを実行してプログラムを停止します。

バックテストの結果:

買い注文価格はその時の最新価格より10元低いため、取引はすぐには完了しません。 次に、実行待ちの注文を取得して印刷します。 最後に、例外がスローされ、プログラムが停止します。
組み立てられたモジュール全体は、JavaScript 戦略を呼び出すようなものです。
function main () {
var id = exchange.Buy(_C(exchange.GetTicker).Last - 10, 0.1)
Log(id)
Log(exchange.GetOrders())
throw "stop"
}

このモジュールは注文をキャンセルするために使用されます。
ポリシーを記述するときにこれが必要となるシナリオは多数あります。
現在保留中の注文をすべてキャンセルします。
間違いなく、これには「注文キャンセルモジュール」の使用が必要になります。注文キャンセルモジュールを学習しながら、[5]を使用して現在の取引ペアの委託注文のモジュールを取得し、それらを組み合わせてこの機能を実現できます。
まず、すべての注文をキャンセルするテストをします。注文の配置はあまり明白ではないので、2 つの注文を区別するために、異なる価格と数量の 2 つの注文を配置することから始めます。

ループ タイプ モジュールの「リスト内の各要素を走査」モジュールを使用して、現在の保留注文リスト内の注文を走査します。
トラバーサル中、取得された各順序は、変数モジュール順序に割り当てられます (以下に示すように、変数モジュール タイプで作成されます)。
ツール タイプ モジュールを使用します。
注文IDを取り出してキャンセル注文モジュールのほぞ(凹)位置に渡すと、キャンセル注文モジュールがキャンセル注文を実行します。
バックテストの実行:

JavaScript ポリシーの説明の使用:
function main () {
var id = exchange.Buy(_C(exchange.GetTicker).Last - 10, 0.1)
Log(id)
var id2 = exchange.Buy(_C(exchange.GetTicker).Last - 12, 0.2)
Log(id2)
var orders = exchange.GetOrders()
Log(orders)
for (var i in orders) {
var order = orders[i]
Log(exchange.CancelOrder(order.Id))
}
}

このモジュールは、注文 ID 変数モジュールをほぞ穴の位置に接続することで、詳細な注文情報を返すことができます。

実行後に返される順序に注意してください。

[5]の例の実行結果と比較すると、印刷された注文は別の注文情報であることがわかります。[] 角括弧で囲まれています。
例[5]はリストを返すため、この例では単一の順序情報(モジュールによって渡されたテノン位置のID変数モジュールに基づいて取得)を返します。
上記の例は、JavaScript ポリシーを実行することと同じです。
function main () {
var id = exchange.Buy(_C(exchange.GetTicker).Last - 10, 0.1)
Log(exchange.GetOrder(id))
}
上記のモジュールを一つずつ学習し、テスト取引所を商品先物に設定します。
バックテスト設定:
次の例では、この設定をバックテストします。

商品先物には開始時間と終了時間があり、市場が閉まっている場合は接続できません。

取引所オブジェクトが先物取引所として設定されている場合、契約を設定せずに市場情報を直接取得すると、エラーが報告されます。

契約はメタノールの現在の主契約であるMA909としました。
このようにして、MA909 契約の現在のティック市場における最新の価格値が取得されます。
実行順序モジュール

先物には以下の理由から、注文方向を指定する必要があります。
買い:ロングポジションを開く
売り:ショートポジションを開く
closebuy : ロングポジションをクローズ
closesell : ショートポジションをクローズする
4 つの方向 (商品先物にはさらに 2 つの方向があります: closebuy_today は今日のロング ポジションをクローズし、closesell_today は今日のショート ポジションをクローズします)。
たとえば、注文モジュールが買いに設定されている場合、ロングポジションを開くこととショートポジションを閉じることの 2 つの意味があり、あいまいさが生じます。 したがって、明確な注文方向を設定するには、「先物取引注文方向の設定」モジュールが必要です。

バックテストの結果:

JavaScript 戦略コードのように:
function main () {
while (true) {
if (exchange.IO("status")) {
exchange.SetContractType("MA909")
Log(exchange.GetTicker().Last)
exchange.SetDirection("buy")
Log(exchange.Buy(1000, 1))
throw "stop"
} else {
Log("未连接商品期货前置机")
}
Sleep(1000)
}
}
デジタル通貨先物の使用方法は、基本的に上記[8]の商品先物の使用方法と同じである。
OKEX を例にとると、契約コードは次のようになります。
BitMEX :
レバレッジモジュールの設定

デジタル通貨先物のレバレッジを設定するために使用されます。
# 注意 : 回测不支持。
JavaScript 戦略の場合:
function main () {
exchange.SetMarginLevel(10)
}
視覚化の例の戦略:
その他の戦略については、https://www.fmz.com/square をご覧ください。
このシリーズの他の記事