pp
メインは空です.
取引所[0].IO(
The ZB exchange is special. There are two addresses: one is the market data interface address, and the other is the trading interface address. Switch the address:
```js
function main() {
// The second parameter of exchange.IO is the trading interface address, and the third parameter is the market interface address, which is switched to an address that can be accessed domestically
exchange.IO("base", "https://trade.zb.plus", "http://api.zb.plus")
// Print the account information
Log(exchange.GetAccount())
}
def main():
exchange.IO("base", "https://trade.zb.plus", "http://api.zb.plus")
Log(exchange.GetAccount())
void main() {
exchange.IO("base", "https://trade.zb.plus", "http://api.zb.plus");
Log(exchange.GetAccount());
}
市場モードを切り替える 現在サポートされている取引所:
交換 | コメント |
---|---|
ハウビースポット | WebSocket プロトコルをサポートした後,コードexchange.IO( |
exchange.IO("websocket")
市場通信プロトコルをwebsocket
(デフォルトは休息) 市場価格の取得方法は,切り替え後に変更されます.exchange.GetTicker()
そしてexchange.GetDepth()
切り替えるwebsocket
市場データの原始のアクティブ取得から市場データの受動的取得まで,現在 Huobi Exchangeのみがサポートされています.
市場モードがプッシュメカニズムである場合,次の関数を呼び出すことができます.
exchange.IO("mode", 0)
即返回モード.現在の市場データプッシュが取引所から受信されていない場合は,古い市場データが即返回されます.新しいデータがある場合は,新しいデータが返されます.
exchange.IO("mode", 1)
キャッシュモード (デフォルトモード). 取引所の最新の市場データが受信されていない場合 (以前のインターフェースから入手したデータと比較して),受信を待って戻します. この機能を呼び出す前に最新の市場データが受信されている場合は,最新のデータが直ちに返されます.
exchange.IO("mode", 2)
強制更新モード 入力して,交換の次の最新のプッシュデータが受信されるまで待って,それから戻します.
最新の市場情報を最初に入手したい場合は,websocket
呼び出さないSleep
データを直ちにテストする.exchange.GetTicker()
そしてexchange.GetDepth()
機能はキャッシュモードで動作します.例えば:
function main () {
exchange.IO("websocket")
while (true) {
Log(exchange.GetTicker())
}
}
def main():
exchange.IO("websocket")
while True:
Log(exchange.GetTicker())
void main() {
exchange.IO("websocket");
while(true) {
Log(exchange.GetTicker());
}
}
取引所レバレッジ口座モード
使用exchange.IO("trade_margin")
取引所exchange.IO("trade_normal")
普通のアカウントモードに戻る
サポートされている交換:
交換 | 特別 意見 |
---|---|
OKX | レバレッジアカウントモードの取引ペアは通常のペアとは異なります.exchange.IO("cross", true) ローバー付き口座のフルポジションに切り替え,exchange.IO("cross", false) 隔離位置に切り替える |
ハウビー | ハーバードアカウントモードの取引ペアは通常のものとは異なり,一部の取引ペアは利用できない場合があります. Huobi ハーバードアカウントはクロスポジションと孤立ポジションに分かれています.trade_margin 引き上げ口座から孤立したポジションに切り替えるtrade_super_margin 引き上げ口座に切り替えるtrade_normal 通常の通貨モードに切り替える |
ZB | 資金はQCでのみ転送できます.レバレッジ取引部門では,異なる取引ペアの間の資金は独立しています.つまり,ETH_QC取引ペアの下にあるQCコインの数がBTC_QCでは表示されません. |
バイナンス | レバレッジアカウントは,クロスポジションと孤立ポジションに分かれています.trade_margin 隔離位置に切り替えるtrade_super_margin 交差位置に切り替えるtrade_normal 通常の通貨モードに切り替える |
ゲート | レバレッジアカウントは,クロスポジションと孤立ポジションに分かれています.trade_margin 隔離位置に切り替えるtrade_super_margin 交差位置に切り替えるtrade_normal 通常の通貨モードに切り替える |
アセンデックス | 使用exchange.IO("trade_margin") レバレッジアカウントモードに切り替えてexchange.IO("trade_normal") 普通のアカウントモードに戻る |
exchange.Log(LogType, Price, Amount)
呼び出し時に注文を入れないし,取引日記情報を出力するために取引情報を記録するだけです.
注記:
exchange
グローバル関数とは異なります.Log()
.LogType
取れるLOG_TYPE_BUY
, LOG_TYPE_SELL
, LOG_TYPE_CANCEL
そしてPrice
価格としてAmount
量としてLogType
はLOG_TYPE_CANCEL
, Price
パラメータはオーダーIDです使用exchange.Log(LogType, Price, Amount)
ライブ取引のフォローアップテスト,シミュレーションのオーダープレスメントを行い,オーダー記録を支援する.
最も一般的な使用例は:exchange.IO
条件付きの注文を配置する交換の条件付きの注文のインターフェースを作成する機能にアクセスします.exchange.IO
ログの記録に表示されません. したがって,使用できますexchange.Log(LogType, Price, Amount)
ログ出力を補完し,注文情報記録する.
var id = 123
function main() {
// Order type: buy; price: 999; quantity: 0.1
exchange.Log(LOG_TYPE_BUY, 999, 0.1)
// Cancel the order
exchange.Log(LOG_TYPE_CANCEL, id)
}
id = 123
def main():
exchange.Log(LOG_TYPE_BUY, 999, 0.1)
exchange.Log(LOG_TYPE_CANCEL, id)
void main() {
auto id = 123;
exchange.Log(LOG_TYPE_BUY, 999, 0.1);
exchange.Log(LOG_TYPE_CANCEL, id);
}
exchange.HMAC(Algo, OutputAlgo, Data, Key)
支持するHMAC暗号化計算md5/sha256/sha512/sha1リアルタイムの取引のみがサポートされています.
exchange.HMAC("sha256", "hex", "xxxxx", "{{secretkey}}")
引用するとaccessKey
服用する"{{accesskey}}"
- わかった
引用するとsecretKey
服用する"{{secretkey}}"
; または,普通テキストを使用することができます"abc-123-xxxx"
. "{{accessKey}}","{{secretkey}}"
この関数を使用するときにのみ有効です.OutputAlgo
支柱:
BitMEX 位置変更をプッシュする (wss プロトコル)
function main() {
var APIKEY = "your Access Key(Bitmex API ID)"
var expires = parseInt(Date.now() / 1000) + 10
var signature = exchange.HMAC("sha256", "hex", "GET/realtime" + expires, "{{secretkey}}")
var client = Dial("wss://www.bitmex.com/realtime", 60)
var auth = JSON.stringify({args: [APIKEY, expires, signature], op: "authKeyExpires"})
var pos = 0
client.write(auth)
client.write('{"op": "subscribe", "args": "position"}')
while (true) {
bitmexData = client.read()
if(bitmexData.table == 'position' && pos != parseInt(bitmexData.data[0].currentQty)){
Log('position change', pos, parseInt(bitmexData.data[0].currentQty), '@')
pos = parseInt(bitmexData.data[0].currentQty)
}
}
}
import time
def main():
APIKEY = "your Access Key(Bitmex API ID)"
expires = int(time.time() + 10)
signature = exchange.HMAC("sha256", "hex", "GET/realtime" + str(expires), "{{secretkey}}")
client = Dial("wss://www.bitmex.com/realtime", 60)
auth = json.dumps({"args": [APIKEY, expires, signature], "op": "authKeyExpires"})
pos = 0
client.write(auth)
client.write('{"op": "subscribe", "args": "position"}')
while True:
bitmexData = json.loads(client.read())
if "table" in bitmexData and bitmexData["table"] == "position" and len(bitmexData["data"]) != 0 and pos != bitmexData["data"][0]["currentQty"]:
Log("position change", pos, bitmexData["data"][0]["currentQty"], "@")
pos = bitmexData["data"][0]["currentQty"]
void main() {
auto APIKEY = "your Access Key(Bitmex API ID)";
auto expires = Unix() + 10;
auto signature = exchange.HMAC("sha256", "hex", format("GET/realtime%d", expires), "{{secretkey}}");
auto client = Dial("wss://www.bitmex.com/realtime", 60);
json auth = R"({"args": [], "op": "authKeyExpires"})"_json;
auth["args"].push_back(APIKEY);
auth["args"].push_back(expires);
auth["args"].push_back(signature);
auto pos = 0;
client.write(auth.dump());
client.write("{\"op\": \"subscribe\", \"args\": \"position\"}");
while(true) {
auto bitmexData = json::parse(client.read());
if(bitmexData["table"] == "position" && bitmexData["data"][0].find("currentQty") != bitmexData["data"][0].end() && pos != bitmexData["data"][0]["currentQty"]) {
Log("Test");
Log("position change", pos, bitmexData["data"][0]["currentQty"], "@");
pos = bitmexData["data"][0]["currentQty"];
}
}
}
exchange.Go(Method, Args...)
は,すべてのサポートされた機能の動作を非同期に変換できる多スレッドアシンクロンサポート機能です (暗号通貨取引所のみをサポートします). パラメータ値:Method
文字列の種類,すなわち同時に呼び出された関数の名前です.
注記:
exchange.Go
この関数で,wait
呼び出しによって自動的に解放されます. 呼び出しによって,データ取得後,スレッドは自動的に解放されます.wait
終了します. タイムアウトパラメータを指定する場合はwait
,タイムアウトが発生してもスレッドが解放されない.この方法では,スレッドの結果を取得することによってのみスレッドが自動的に解放される (同時アクセスされたインターフェースが成功または失敗で呼び出されても).wait
機能,およびスレッドリソースが適用されるexchange.Go
機能はドッカーによって自動的に解放されます.wait
動作が完了しない場合,スレッドリソースは自動的に解放されず,適用スレッドの蓄積を引き起こします.スレッド数が2000を超えると,エラーが報告されます."too many routine wait, max is 2000"
.サポートされている機能:GetTicker
, GetDepth
, GetTrades
, GetRecords
, GetAccount
, GetOrders
, GetOrder
, CancelOrder
, Buy
, Sell
, GetPosition
そしてIO
.
function main(){
// The following four operations are executed concurrently and asynchronously by multiple threads, without time-consuming, but with immediate return.
var a = exchange.Go("GetTicker")
var b = exchange.Go("GetDepth")
var c = exchange.Go("Buy", 1000, 0.1)
var d = exchange.Go("GetRecords", PERIOD_H1)
// Call the "wait" method, to wait for the return of the asynchronously obtained "ticker" result
var ticker = a.wait()
// Return the depth; it is possible to return null, if the acquisition fails
var depth = b.wait()
// Return the order number; limit the timeout in 1 second; the timeout returns "undefined"; this object can continue to call "wait" to wait if the last "wait" is timeout
var orderId = c.wait(1000)
if(typeof(orderId) == "undefined") {
// Timeout, reacquire
orderId = c.wait()
}
var records = d.wait()
}
def main():
a = exchange.Go("GetTicker")
b = exchange.Go("GetDepth")
c = exchange.Go("Buy", 1000, 0.1)
d = exchange.Go("GetRecords", PERIOD_H1)
ticker, ok = a.wait()
depth, ok = b.wait()
orderId, ok = c.wait(1000)
if ok == False:
orderId, ok = c.wait()
records, ok = d.wait()
void main() {
auto a = exchange.Go("GetTicker");
auto b = exchange.Go("GetDepth");
auto c = exchange.Go("Buy", 1000, 0.1);
auto d = exchange.Go("GetRecords", PERIOD_H1);
Ticker ticker;
Depth depth;
Records records;
TId orderId;
a.wait(ticker);
b.wait(depth);
if(!c.wait(orderId, 300)) {
c.wait(orderId);
}
d.wait(records);
}
注記:
undefined
服用するtypeof(xx)==="undefined"
なぜならnull == undefined
JavaScript で提供されています.function main() {
var d = exchange.Go("GetRecords", PERIOD_H1)
// Wait for K-line result
var records = d.wait()
// Here we wait for an asynchronous operation that has been waited and ended; it will return null, and record the error
var ret = d.wait()
}
def main():
d = exchange.Go("GetRecords", PERIOD_H1)
records, ok = d.wait()
ret, ok = d.wait()
void main() {
auto d = exchange.Go("GetRecords", PERIOD_H1);
Records records;
d.wait(records);
Records ret;
d.wait(ret);
}
この2つの違いとはPython
そしてJavaScript
それは?Python
ほらwait
function は 2 つのパラメータを返します.最初のパラメータは,非同期 API が返した結果であり,第 2 つのパラメータは,非同期呼び出しが完了したかどうかを示します.
Python
例:
def main():
d = exchange.Go("GetRecords", PERIOD_D1)
# "ok" must return "True", unless the strategy is stopped
ret, ok = d.wait()
# If the waiting times out, or "wait" for an ended instance, "ok" returns "False"
ret, ok = d.wait(100)
ret, ok = d.wait(100)
複数の取引所のコートを同時に取得する:
function main() {
while(true) {
var beginTS = new Date().getTime()
var arrRoutine = []
var arrTicker = []
var arrName = []
for(var i = 0; i < exchanges.length; i++) {
arrRoutine.push(exchanges[i].Go("GetTicker"))
arrName.push(exchanges[i].GetName())
}
for(var i = 0; i < arrRoutine.length; i++) {
arrTicker.push(arrRoutine[i].wait())
}
var endTS = new Date().getTime()
var tbl = {
type: "table",
title: "Market Quotes",
cols: ["Index", "Name", "Latest Executed Price"],
rows: []
}
for(var i = 0; i < arrTicker.length; i++) {
tbl.rows.push([i, arrName[i], arrTicker[i].Last])
}
LogStatus(_D(), "The total time to acquire multiple platforms concurrently is:", endTS - beginTS, "millisecond", "\n", "`" + JSON.stringify(tbl) + "`")
Sleep(500)
}
}
import time
import json
def main():
while True:
beginTS = time.time()
arrRoutine = []
arrTicker = []
arrName = []
for i in range(len(exchanges)):
arrRoutine.append(exchanges[i].Go("GetTicker"))
arrName.append(exchanges[i].GetName())
for i in range(len(exchanges)):
ticker, ok = arrRoutine[i].wait()
arrTicker.append(ticker)
endTS = time.time()
tbl = {
"type": "table",
"title": "Market Quote",
"cols": ["Index", "Name", "Latest Executed Price"],
"rows": []
}
for i in range(len(arrTicker)):
tbl["rows"].append([i, arrName[i], arrTicker[i]["Last"]])
LogStatus(_D(), "The total time to acquire multiple platforms concurrently is:", endTS - beginTS, "second", "\n", "`" + json.dumps(tbl) + "`")
Sleep(500)
void main() {
while(true) {
int length = exchanges.size();
auto beginTS = UnixNano() / 1000000;
Ticker arrTicker[length] = {};
string arrName[length] = {};
// Note that to add a few exchange objects, here we need to execute the "exchanges[n].Go" function several times. In this example, we need to add four exchange objects, which can be modified in details
auto r0 = exchanges[0].Go("GetTicker");
auto r1 = exchanges[1].Go("GetTicker");
auto r2 = exchanges[2].Go("GetTicker");
auto r3 = exchanges[3].Go("GetTicker");
GoObj *arrRoutine[length] = {&r0, &r1, &r2, &r3};
for(int i = 0; i < length; i++) {
arrName[i] = exchanges[i].GetName();
}
for(int i = 0; i < length; i++) {
Ticker ticker;
arrRoutine[i]->wait(ticker);
arrTicker[i] = ticker;
}
auto endTS = UnixNano() / 1000000;
json tbl = R"({
"type": "table",
"title": "Market Quote",
"cols": ["Index", "Name", "Latest Executed Price"],
"rows": []
})"_json;
for(int i = 0; i < length; i++) {
json arr = R"(["", "", ""])"_json;
arr[0] = format("%d", i);
arr[1] = arrName[i];
arr[2] = format("%f", arrTicker[i].Last);
tbl["rows"].push_back(arr);
}
LogStatus(_D(), "The total time to acquire multiple platforms concurrently is:", format("%d", endTS - beginTS), "millisecond", "\n", "`" + tbl.dump() + "`");
Sleep(500);
}
}
共同の呼びかけexchange.IO("api", ...)
機能:
function main() {
/*
Use the OKX placing order interface to test
POST /api/v5/trade/order
*/
var beginTS = new Date().getTime()
var param = {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"}
var ret1 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", JSON.stringify(param))
var ret2 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", JSON.stringify(param))
var ret3 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", JSON.stringify(param))
var id1 = ret1.wait()
var id2 = ret2.wait()
var id3 = ret3.wait()
var endTS = new Date().getTime()
Log("id1:", id1)
Log("id2:", id2)
Log("id3:", id3)
Log("Time for placing orders concurrently:", endTS - beginTS, "millisecond")
}
import time
import json
def main():
beginTS = time.time()
param = {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"}
ret1 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", json.dumps(param))
ret2 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", json.dumps(param))
ret3 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", json.dumps(param))
id1, ok1 = ret1.wait()
id2, ok2 = ret2.wait()
id3, ok3 = ret3.wait()
endTS = time.time()
Log("id1:", id1)
Log("id2:", id2)
Log("id3:", id3)
Log("Time for placing orders concurrently:", endTS - beginTS, "second")
void main() {
auto beginTS = UnixNano() / 1000000;
json param = R"({"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"})"_json;
auto ret1 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", param.dump());
auto ret2 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", param.dump());
auto ret3 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", param.dump());
json id1 = R"({})"_json;
json id2 = R"({})"_json;
json id3 = R"({})"_json;
ret1.wait(id1);
ret2.wait(id2);
ret3.wait(id3);
auto endTS = UnixNano() / 1000000;
Log("id1:", id1);
Log("id2:", id2);
Log("id3:", id3);
Log("Time for placing orders concurrently:", endTS - beginTS, "millisecond");
}
exchange.GetAccount()
交換口座情報を返します.返回値:Account
structure.
Account
構造function main(){
var account = exchange.GetAccount()
Log("Account information, Balance:", account.Balance, "FrozenBalance:", account.FrozenBalance, "Stocks:",
account.Stocks, "FrozenStocks:", account.FrozenStocks)
}
def main():
account = exchange.GetAccount()
Log("Account information, Balance", account["Balance"], "FrozenBalance:", account["FrozenBalance"], "Stocks:",
account["Stocks"], "FrozenStocks:", account["FrozenStocks"])
void main() {
auto account = exchange.GetAccount();
Log("Account information, Balance", account.Balance, "FrozenBalance:", account.FrozenBalance, "Stocks:",
account.Stocks, "FrozenStocks:", account.FrozenStocks);
}
取引対象が暗号通貨先物取引所に設定され,USDT
利回りとして (参照exchange.SetContractType
資産の交換方法を知るために機能)USDT
マージンとして記入されます.Balance
そしてFrozenBalance
.
function main(){
// Switch the trading pair
exchange.IO("currency", "BTC_USDT")
// Take OKX futures as an example; set the contract as the contract of the week, and the current trading pair is BTC_USDT, so the current contract is BTC USDT-margined contract of this week
exchange.SetContractType("this_week")
// Acquire the data of the current account assets
var account = exchange.GetAccount()
// The available balance of USDT as margin
Log(account.Balance)
// The frozen amount of USDT as margin
Log(account.FrozenBalance)
}
def main():
exchange.IO("currency", "BTC_USDT")
exchange.SetContractType("this_week")
account = exchange.GetAccount()
Log(account["Balance"])
Log(account["FrozenBalance"])
void main() {
exchange.IO("currency", "BTC_USDT");
exchange.SetContractType("this_week");
auto account = exchange.GetAccount();
Log(account.Balance);
Log(account.FrozenBalance);
}
exchange.GetName()
文字列の種類を返します. 一般的には,文字列の種類を決定するために使用されます.exchange
またはexchanges[n]
戦略コードのオブジェクトです
function main() {
Log("Determine the exchange object to be OKX:", exchange.GetName() == "OKEX")
}
def main():
Log("Determine the exchange object to be OKX:", exchange.GetName() == "OKEX")
void main() {
Log("Determine the exchange object to be OKX:", exchange.GetName() == "OKEX");
}
Docker の線バージョンをコマンドするには,-1
交換名のリストを印刷するコマンドです.
exchange.GetLabel()
交換のカスタムラベルを返します. 返した値:文字列タイプ.
についてexchange
またはexchanges[n]
戦略コードのオブジェクトは,交換オブジェクトの設定時に設定されたラベルによって通常決定されます.
exchange.GetCurrency()
取引所が運営する通貨ペアの名前と,暗号通貨プラットフォームは文字列を返しますLTC_BTC
返される値は:文字列の種類.
についてexchange.SetCurrency(Symbol)
交換オブジェクトの現在の取引ペアを切り替えるために使用されます.exchange.IO ("currency","BTC_USDT")
バックテストシステムで取引ペアを切り替えるのをサポートし,pricing currency
バックテストシステムで取引ペアを切り替えるときには変更できません (例えば,BTC_USDT
切り替えられるLTC_USDT
切り替えることはできませんLTC_BTC
) は,バックテスト以外のページで最初に設定された取引ペアに切り替えた後,trading coins
0 (例えば,バックテスト中に,バックテストページの取引ペアの初期値は,BTC_USDT
USDTの数は10,000です. すぐにBTCに切り替えたら,LTC_USDT
,数についてtrading coins
切り替えた取引ペアの共有USDT金額は依然として10000である.
function main() {
var ticker = exchange.GetTicker()
Log(ticker)
Log(exchange.GetAccount())
// Switch trading pairs, and pay attention to changes in market quote data and account information after switching
Log("Switch LTC_USDT: ", exchange.SetCurrency("LTC_USDT"))
ticker = exchange.GetTicker()
Log(ticker)
Log(exchange.GetAccount())
}
def main():
ticker = exchange.GetTicker()
Log(ticker)
Log(exchange.GetAccount())
Log(" Switch LTC_USDT: ", exchange.SetCurrency("LTC_USDT"))
ticker = exchange.GetTicker()
Log(ticker)
Log(exchange.GetAccount())
void main() {
auto ticker = exchange.GetTicker();
Log(ticker);
Log(exchange.GetAccount());
exchange.SetCurrency("LTC_USDT");
Log(" Switch LTC_USDT: ");
ticker = exchange.GetTicker();
Log(ticker);
Log(exchange.GetAccount());
}
バックテスト結果:
exchange.GetQuoteCurrency()
エクスチェンジが運用するベース通貨の名前を返します.BTC_CNY
リターンCNY
そしてETH_BTC
リターンBTC
返される値は:文字列の種類.
暗号通貨の先物取引所の場合は,その取引先のコードを呼び出す前に,契約コードを指定する必要があります.市場, 順序インターフェース,およびexchange.SetContractType
交換オブジェクトの現在の取引ペアを切り替えるとき,あなたは呼び出す必要がありますexchange.SetContractType
プラットフォームがサポートするデジタル通貨交換契約コードについては,exchange.SetContractType
function.
exchange.GetPosition()
現在の位置情報を取得します.返却値:position
位置がない場合は,空の配列を返します.[]
.
Position
構造通常,仮想通貨先物契約は2種類に分かれます.
納品契約
契約が配達契約に設定された場合,exchange.GetPosition()
現行の取引ペアの下の配送契約のすべてのポジションが返されます.
永久契約
永久契約に設定された場合,呼び出すexchange.GetPosition()
継続契約のすべてのポジションが,現在の取引ペアで返されます.
/*
Note: if there is no position, it will returns an empty array, so you should judge whether the data returned by the interface is a null array, before you use the returned data
For example:
When the exchange is set to OKX futures, if the contract is set to be a delivery contract, when the position data of the current week, the next week, and the quarter is obtained, the data type will be an array of position structure.
When the exchange is set to OKX futures, if the contract is set to a perpetual contract, the array of position structure containing the position data of the perpetual contract will be obtained.
*/
function main(){
exchange.SetContractType("this_week")
exchange.SetMarginLevel(10)
exchange.SetDirection("buy")
exchange.Buy(10000, 2)
var position = exchange.GetPosition()
if(position.length > 0){
Log("Amount:", position[0].Amount, "FrozenAmount:", position[0].FrozenAmount, "Price:",
position[0].Price, "Profit:", position[0].Profit, "Type:", position[0].Type,
"ContractType:", position[0].ContractType)
}
}
def main():
exchange.SetContractType("this_week")
exchange.SetMarginLevel(10)
exchange.SetDirection("buy")
exchange.Buy(10000, 2)
position = exchange.GetPosition()
if len(position) > 0:
Log("Amount:", position[0]["Amount"], "FrozenAmount:", position[0]["FrozenAmount"], "Price:",
position[0]["Price"], "Profit:", position[0]["Profit"], "Type:", position[0]["Type"],
"ContractType:", position[0]["ContractType"])
void main() {
exchange.SetContractType("this_week");
exchange.SetMarginLevel(10);
exchange.SetDirection("buy");
exchange.Buy(10000, 2);
auto position = exchange.GetPosition();
if(position.size() > 0) {
Log("Amount:", position[0].Amount, "FrozenAmount:", position[0].FrozenAmount, "Price:",
position[0].Price, "Profit:", position[0].Profit, "Type:", position[0].Type,
"ContractType:", position[0].ContractType);
}
}
exchange.SetMarginLevel(MarginLevel)
パラメータ値:数値型
仮想通貨の先物注文のレバレッジの大きさを設定します 例えば:
function main() {
exchange.SetMarginLevel(10)
}
def main():
exchange.SetMarginLevel(10)
void main() {
exchange.SetMarginLevel(10);
}
仮想通貨先物については,仮想通貨先物取引所のレバレッジメカニズムは均一ではない.一部の取引所で,先物取引所のレバレッジ値は,注文の配置インターフェースのパラメータである.この場合,レバレッジメカニズムは,先物取引所のレバレッジメカニズムである.SetMarginLevel
この関数はネットワークリクエストを生成できないが,底層のレバレッジ変数を設定するだけ (プレスオーダーインターフェイスのパラメータを通過するために使用される).一部の取引所の先物レバレッジは,取引所のウェブサイトページまたはAPIインターフェイスを使用して設定する必要がある取引所の設定である.この時点で,レバレッジを呼び出す.SetMarginLevel
この関数はネットワークリクエストを生成し,様々な理由からレバレッジを設定できない可能性があります.例えば:現在のポジションと待機中のオーダーがある場合,この取引ペアと基となるオブジェクトのレバレッジ値は設定されない可能性があります.
戦略設計におけるレバレッジの設定に関する注意事項:
exchange.SetDirection(Direction)
セットexchange.Buy
またはexchange.Sell
フューチャーオーダーの配列を設定する パラメータ値:文字列タイプ
についてSetDirection
この関数は,先物取引方向とオーダー配置関数の間の対応を設定します.
オーダー 配置 機能 | パラメータ設定方向 |
コメント |
---|---|---|
exchange.Buy | 買って | オープン・ロング・ポジションを購入 |
exchange.Buy | 閉店する | ショートポジションを閉じる |
exchange.Sell | 売る | オープンショートポジションを売却 |
exchange.Sell | ロングポジションを閉じる |
パラメータDirection
4つのパラメータを取ることができます.buy
, closebuy
, sell
そしてclosesell
.
function main(){
// Make an example for setting OKX futures weekly contract
exchange.SetContractType("this_week")
// Set 5 times of leverage
exchange.SetMarginLevel(5)
// Set the order placing type into placing long order
exchange.SetDirection("buy")
// Place an order with the contract quantity of 2, at the price of 10,000
exchange.Buy(10000, 2)
exchange.SetMarginLevel(5)
exchange.SetDirection("closebuy")
exchange.Sell(1000, 2)
}
def main():
exchange.SetContractType("this_week")
exchange.SetMarginLevel(5)
exchange.SetDirection("buy")
exchange.Buy(10000, 2)
exchange.SetMarginLevel(5)
exchange.SetDirection("closebuy")
exchange.Sell(1000, 2)
void main() {
exchange.SetContractType("this_week");
exchange.SetMarginLevel(5);
exchange.SetDirection("buy");
exchange.Buy(10000, 2);
exchange.SetMarginLevel(5);
exchange.SetDirection("closebuy");
exchange.Sell(1000, 2);
}
exchange.SetContractType(ContractType)
契約型を設定します. パラメータ値:文字列型. 仮想通貨戦略では,例としてexchange.SetCurrency("BTC_USDT")
またはexchange.IO("currency", "BTC_USDT")
薬剤の使い方をexchange.SetContractType
新しい取引ペアで操作する必要がある現在の契約を決定するために契約をリセットする機能.currency-based contract
またはU-based contract
基準としてトレーディングペア例えば,取引ペアがBTC_ USDT
機能を使用するexchange.SetContractType
契約コードを設定するswap
取引ペアが USDTベースの BTCの永続契約として設定されます.BTC_ USD
機能を使用するexchange.SetContractType
契約コードを設定するswap
BTCの通貨ベースの永続契約として設定されています.
異なった規定がない限り,納品契約暗号通貨の先物契約のコードには,一般的に以下の項目が含まれます.
this_week
: 週間の契約next_week
: 来週の契約quarter
:四半期契約next_quarter
: 次の四半期契約異なった規定がない限り,永久契約暗号通貨の先物契約のコードには,一般的に以下の項目が含まれます.
swap
永久契約現在の契約を毎週契約に設定します.
function main() {
// Set to weekly contract
exchange.SetContractType("this_week")
}
def main():
exchange.SetContractType("this_week")
void main() {
exchange.SetContractType("this_week");
}
サポートされている各暗号通貨取引所の契約命名に関する詳細な説明は以下のとおりです.
OKX
永久契約に設定:exchange.SetContractType("swap")
この週契約に設定:exchange.SetContractType("this_week")
来週に契約するexchange.SetContractType("next_week")
決算は四半期契約で:exchange.SetContractType("quarter")
次の四半期に設定された契約:exchange.SetContractType("next_quarter")
OKX USDT保証契約は,現在の契約に対応するUSDT決済を使用する契約に切り替えることができます.trading pair
(または交換オブジェクトを追加するときに直接設定します).
function main() {
// The default trading pair is BTC_USD, the contract is set to the weekly contract, and the contract is the crypto-margined contract
exchange.SetContractType("this_week")
Log("ticker:", exchange.GetTicker())
// Switch trading pairs, and then set a contract to a USDT-margined contract, which is different from the crypto-margined contract
exchange.IO("currency", "BTC_USDT")
exchange.SetContractType("swap")
Log("ticker:", exchange.GetTicker())
}
def main():
exchange.SetContractType("this_week")
Log("ticker:", exchange.GetTicker())
exchange.IO("currency", "BTC_USDT")
exchange.SetContractType("swap")
Log("ticker:", exchange.GetTicker())
void main() {
exchange.SetContractType("this_week");
Log("ticker:", exchange.GetTicker());
exchange.IO("currency", "BTC_USDT");
exchange.SetContractType("swap");
Log("ticker:", exchange.GetTicker());
}
フューチャーズ_HuobiDM
この週契約に設定:exchange.SetContractType("this_week")
来週に契約するexchange.SetContractType("next_week")
決算は四半期契約で:exchange.SetContractType("quarter")
次の四半期に設定された契約:exchange.SetContractType("next_quarter")
永久契約に設定:exchange.SetContractType("swap")
プラットフォームは,USDTの保証契約をサポートします. BTCの契約を例に挙げましょう.exchange.SetCurrency("BTC_USDT")
,または現在の取引ペアをBTC_USDT
取引ペアを切り替えた後,呼び出す必要がありますexchange.SetContractType
契約を設定するために再び機能します.
フューチャーズ_BitMEX
永久契約に設定:exchange.SetContractType("XBTUSD")
, exchange.SetContractType("APTUSDT")
- わかった
BitMEXの公式ウェブサイトにログインして,詳細については各契約コードを確認します.例えば:exchange.SetContractType("XBTM19")
.
フューチャーズ_GateIO
この週契約に設定:exchange.SetContractType("this_week")
- わかった
来週に契約するexchange.SetContractType("next_week")
- わかった
決算は四半期契約で:exchange.SetContractType("quarter")
- わかった
次の四半期に設定された契約:exchange.SetContractType("next_quarter")
- わかった
永久契約に設定:exchange.SetContractType("swap")
- わかった
取引所は,USDTで保証される契約をサポートします.例として,BTC契約を挙げましょう.exchange.SetCurrency("BTC_USDT")
,または現在の取引ペアをBTC_USDT
取引ペアを切り替えた後,呼び出す必要がありますexchange.SetContractType
契約を設定するために再び機能します.
フューチャーズ_デリビット
永久契約に設定:exchange.SetContractType("BTC-PERPETUAL")
デリビットのUSDC契約のサポートexchange.SetContractType("ADA_USDC-PERPETUAL")
ADA USDCの保証付き永続契約を設定する
契約は特定のタイミングで決済されます.詳細については,Deribitの公式ウェブサイトにログインして各契約コードを確認してください.exchange.SetContractType("BTC-27APR18")
.
フューチャー=KuCoin
BTC_USD
暗号化されたコンタクトと呼ばれます
永久契約に設定:exchange.SetContractType("swap")
決算は四半期契約で:exchange.SetContractType("quarter")
次の四半期に設定された契約:exchange.SetContractType("next_quarter")
BTC_USDT
契約コードを設定します.これはUSDTの保証契約です.
永久契約に設定:exchange.SetContractType("swap")
.フューチャー=Binance
契約のステータスを設定する必要はありません. 契約を最初に設定する必要があります.
永久契約に設定:exchange.SetContractType("swap")
バイナンス・フューチャーズ永続契約は,USDTの担保契約である可能性があります.BTC
取引対が設定されている場合,BTC_USDT
. Binance 期貨の永久契約には,暗号保証契約も含まれます.例えば,暗号保証契約では,取引ペアをBTC_USD
.
決算は四半期契約で:exchange.SetContractType("quarter")
配送契約には,暗号化保証契約 (つまり,使用通貨を保証金として) が含まれます.BTC
,取引対はBTC_USD
契約コードを設定しますexchange.SetContractType("quarter")
BTCの暗号化保証契約を設定しています
次の四半期に設定された契約:exchange.SetContractType("next_quarter")
例えば,Crypto-marginedの四半期契約では,BTC
,取引対はBTC_USD
契約コードを設定しますexchange.SetContractType("next_quarter)
.Binanceは,BTC取引ペアをBTC_USDT
契約コードを設定します
フューチャーズ_ビボックス
バイボックス 永久契約コード:swap
- わかった
永久契約に設定:exchange.SetContractType("swap")
.
フューチャー=AOFEX
AOFEX永続契約コード:swap
- わかった
永久契約に設定:exchange.SetContractType("swap")
.
フューチャー=BFX
BFX永続契約コード:swap
- わかった
永久契約に設定:exchange.SetContractType("swap")
.
フューチャーズ_Bybit
Bybitは現在の取引ペアの永久契約にデフォルトします.swap
- わかった
四半期契約コード:quarter
- わかった
次の四半期契約コード:next_quarter
.
フューチャーズ_クラケン
契約コードを設定する必要があります. 契約コード:swap
永久契約month
月間契約quarter
契約は四半期ごとにnext_quarter
次の四半期契約です
フューチャー=Bitfinex
Bitfinexは,現在の取引ペアの永久契約に 欠陥があります.契約コード:swap
.
フューチャー=Bitget
Bitget は現在の取引ペアの永久契約にデフォルトします.swap
. 取引対は,BTC_USD
取引ペアが設定されているのはBTC_USDT
模擬された契約は,取引ペアを以下に設定できます.SBTC_USD
そしてBTC_SUSDT
.
フューチャーズ_dYdX
dYdX永久契約の契約コード:swap
- わかった
永久契約に設定:exchange.SetContractType("swap")
. dYdXは,USDTの保証契約のみを持っています.
フューチャーズ_MEXC
MEXC永続契約の契約コード:swap
- わかった
永久契約に設定:exchange.SetContractType("swap")
. 取引対は,BTC_USD
取引ペアが設定されているのはBTC_USDT
, USDT保証契約を表示する.
暗号通貨の戦略を書いているとき,exchange.SetContractType(ContractType)
契約パラメータによって設定された機能と詳細な契約情報ContractType
返されるでしょう
例えば,交換オブジェクトとして設定されたOKXコントラクトの戦略コードを実行します.
function main(){
// Set to weekly contract
var ret = exchange.SetContractType("this_week")
// Return the information of the weekly contract
Log(ret)
}
def main():
ret = exchange.SetContractType("this_week")
Log(ret)
void main() {
auto ret = exchange.SetContractType("this_week");
Log(ret);
}
戦略を実行しますJavaScript
言語と印刷ret
詳細な情報this_week
契約:
{
"instrument":"BTC-USD-191101",
"InstrumentID":"BTC-USD-191101"
}
exchange.GetContractType()
交換オブジェクトの現在設定されている契約コードを返します (exchange
), 返した値:文字列.
function main () {
Log(exchange.SetContractType("this_week"))
Log(exchange.GetContractType())
}
def main():
Log(exchange.SetContractType("this_week"))
Log(exchange.GetContractType())
void main() {
Log(exchange.SetContractType("this_week"));
Log(exchange.GetContractType());
}
次の表は,暗号通貨先物契約の交換対象に関連するエラー情報を記述しています.
価値 | 機能表示のエラー | トリガー機能 | 記述 |
---|---|---|---|
0 | フューチャー_OP 0 | exchange.SetMarginLevel | レバレッジ関数を呼び出すエラー |
1 | フューチャー_OP1 | exchange.SetDirection | フューチャー取引方向関数設定の誤り |
2 | フューチャーズ_OP2 | exchange.SetContractType | 契約機能の設定の誤り |
3 | フューチャー_OP3 | exchange.GetPosition | 位置関数を取得するエラー |
4 | フューチャーズ_OP4 | exchange.IO | IO関数を呼び出すエラー |
使用exchange.SetContractType
異なる取引所には異なるオプション契約コードがあります.
FMZ Quant トレーディング プラットフォームがサポートする仮想通貨オプション取引所
デリビット
Deribitの取引では,exchange.SetContractType
オプション契約を設定した後,市場インターフェースを呼び出すとき,GetTicker
オプション契約の市場データは全て得られます.exchange.Sell
そしてexchange.Buy
取引方向に注意し,取引方向を設定するexchange.SetDirection
..........exchange.Cancel
注文をキャンセルする機能exchange.GetPosition
位置をクエリする機能です
参照のための戦略コード:デリビットのオプションのテスト戦略
OKX
契約の作成,注文の提出,注文のキャンセル,注文の問い合わせ,市場価格の取得などDeribit
契約コードの形式はBTC-USD-200626-4500-C
インターフェースで契約に関連する情報をクエリできますhttps://www.okx.com/api/v5/public/instruments
.
例えば,BTCオプション契約の情報をクエリするには,
function main() {
Log(HttpQuery("https://www.okx.com/api/v5/public/instruments?instType=OPTION&uly=BTC-USD"))
}
import json
import urllib.request
def main():
ret = json.loads(urllib.request.urlopen("https://www.okx.com/api/v5/public/instruments?instType=OPTION&uly=BTC-USD").read().decode('utf-8'))
Log(ret)
void main() {
Log(HttpQuery("https://www.okx.com/api/v5/public/instruments?instType=OPTION&uly=BTC-USD"));
}
フューチャーズ_HuobiDM
例えば Huobi オプション契約コード:BTC-USDT-201225-P-13000
契約はBTC
契約; 実施日は2020年12月25日. オプションはPUT (Put Options) です. ストライキ価格は13,000ドルです.
コールオプションの場合,購入者が支払うプレミアムはUSDTで,口座資産のUSDTが使用されていることを示します.売り手のマーゲンは通貨で,資産の通貨によって保証されます.
販売オプションの場合,購入者が支払うプレミアムはUSDTで,口座資産のUSDTが使用されていることを示します.売り手の利回りはUSDTで,資産のUSDTによって保証されます.
フューチャーズ_Bybit
取引ペアをBybitのUSDCオプションをサポートし,ETH_USDC
呼び出し機能exchange.SetContractType
契約をオプション契約として設定する.オプション契約コードの例:ETH-25NOV22-1375-P
.
についてexchange.SetBase(Base)
交換オブジェクトに記録されたAPIベースアドレスを切り替えるために使用されます.OKX
ドメイン名https://aws.okx.com
, と互換性があるexchange.IO("base","https://aws.okx.com")
スイッチングメソッド.バックテストシステムは,交換所のAPIベースアドレスのスイッチングをサポートしていない (バックテストシステムはサンドボックス環境であり,交換にアクセスするための実際のインターフェースではありません).
function main() {
// Use the default base address
Log(exchange.GetTicker())
// Switch to https://aws.okx.com
exchange.SetBase("https://aws.okx.com")
Log(exchange.GetTicker())
}
def main():
Log(exchange.GetTicker())
exchange.SetBase("https://aws.okx.com")
Log(exchange.GetTicker())
void main() {
Log(exchange.GetTicker());
exchange.SetBase("https://aws.okx.com");
Log(exchange.GetTicker());
}
exchange.SetProxy(...)
この関数は返却値がない (変数によって得られ,得られるものはundefined
インターフェースが呼び出されると null 値が返されます.休む交換オブジェクトはexchanges[n]
プロキシを設定した後,交換インターフェースはプロキシを通じてアクセスされます.
最初の追加された交換オブジェクトを取りますexchange
つまり,exchanges[0]
例えば:
exchange.SetProxy("socks5://127.0.0.1:8889")
exchange.SetProxy("socks5://username:password@127.0.0.1:8889")
(username
ユーザの名前ですpassword
パスワードです)exchange.SetProxy("")
交換オブジェクトが要求する IP アドレスを設定するサポート.
windows
システムインターフェースのバージョンを直接設定できます. これは次の図で示されています.コマンドプロンプト使用パラメータで操作される他のドーカー-I
IP アドレスを指定するには:
交換をベースに 詳細に:
function main(){
exchange.SetProxy("ip://10.0.3.15")
exchange.GetTicker() // The reque