pp
kosong utama() {
pertukaran[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());
}
Bertukar mod pasaran Pertukaran yang kini disokong:
Pertukaran | Catatan |
---|---|
Huobi Spot | Selepas menyokong protokol WebSocket, kodexchange.IO( |
exchange.IO("websocket")
Tukar protokol komunikasi pasaran kewebsocket
(default is rest), cara untuk mendapatkan sebut harga pasaran akan berubah selepas beralih.exchange.GetTicker()
danexchange.GetDepth()
akan ditukar kepadawebsocket
Protokol untuk mengemas kini, dari pengambilalihan aktif mentah data pasaran untuk pengambilalihan pasif data pasaran, hanya Huobi Exchange yang disokong pada masa ini.
Apabila mod pasaran adalah mekanisme dorong, anda boleh memanggil fungsi berikut untuk menetapkan:
exchange.IO("mode", 0)
Mod pulangan segera. Jika data pasaran semasa tidak diterima dari bursa, data pasaran lama akan dikembalikan dengan segera. Jika terdapat data baru, data baru akan dikembalikan.
exchange.IO("mode", 1)
Mod cache (mod lalai). Jika data pasaran terkini bursa tidak diterima (berbanding dengan data yang diperolehi dari antara muka sebelumnya), tunggu untuk menerima dan kemudian kembali. Jika data pasaran terkini telah diterima sebelum memanggil fungsi ini, data terkini akan dikembalikan dengan segera.
exchange.IO("mode", 2)
Masukkan dan tunggu sehingga data push terkini pertukaran seterusnya diterima dan kemudian kembali.
Jika anda ingin mendapatkan maklumat pasaran terkini pada kali pertama, anda boleh beralih kewebsocket
Dan janganlah kamu menyeruSleep
dan menguji data dengan segera.exchange.GetTicker()
danexchange.GetDepth()
fungsi bekerja dalam mod cache, seperti:
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());
}
}
Mod akaun leverage pertukaran
Penggunaanexchange.IO("trade_margin")
untuk beralih ke mod akaun leverage, meletakkan pesanan dan mengakses aset akaun akan menggunakan antara muka leverage bursaexchange.IO("trade_normal")
untuk beralih semula ke mod akaun biasa.
Pertukaran yang disokong:
Pertukaran | Perhatikan Khusus |
---|---|
OKX | Pasangan dagangan mod akaun leverage berbeza dari yang biasa, dan beberapa pasangan dagangan mungkin tidak tersedia.exchange.IO("cross", true) untuk beralih ke kedudukan penuh akaun leveraged danexchange.IO("cross", false) untuk beralih ke kedudukan yang terpencil. |
Huobi | Pasangan dagangan mod akaun leverage berbeza dari yang biasa, dan beberapa pasangan dagangan mungkin tidak tersedia. akaun leverage Huobi dibahagikan kepada kedudukan bersilang dan kedudukan terpencil.trade_margin untuk beralih ke kedudukan terpencil akaun leverage; menggunakantrade_super_margin untuk beralih ke akaun leverage yang melintasi kedudukan; menggunakantrade_normal untuk beralih ke mod mata wang biasa |
ZB | Dana hanya boleh dipindahkan dalam QC. Dalam sektor dagangan leverage, dana antara pasangan dagangan yang berbeza adalah bebas, iaitu jumlah syiling QC di bawah pasangan dagangan ETH_QC tidak kelihatan dalam BTC_QC |
Binance | Akaun leverage dibahagikan kepada kedudukan bersilang dan kedudukan yang terpencil.trade_margin untuk beralih ke kedudukan yang terpencil; menggunakantrade_super_margin untuk beralih ke kedudukan bersilang; menggunakantrade_normal untuk beralih ke mod mata wang biasa |
GateIO | Akaun leverage dibahagikan kepada kedudukan bersilang dan kedudukan yang terpencil.trade_margin untuk beralih ke kedudukan yang terpencil; menggunakantrade_super_margin untuk beralih ke kedudukan bersilang; menggunakantrade_normal untuk beralih ke mod mata wang biasa |
AscendEx | Penggunaanexchange.IO("trade_margin") untuk beralih ke mod akaun leverage, dan menggunakanexchange.IO("trade_normal") untuk beralih semula ke mod akaun biasa. |
exchange.Log(LogType, Price, Amount)
tidak meletakkan pesanan apabila dipanggil, dan ia hanya merakam maklumat perdagangan untuk mengeluarkan maklumat log pertukaran.
Nota:
exchange
objek, yang berbeza dari fungsi globalLog()
.LogType
boleh mengambilLOG_TYPE_BUY
, LOG_TYPE_SELL
, LOG_TYPE_CANCEL
danPrice
sebagai harga, danAmount
sebagai kuantitiLogType
adalahLOG_TYPE_CANCEL
, Price
Parameter adalah ID pesanan.Penggunaanexchange.Log(LogType, Price, Amount)
untuk menjalankan ujian susulan dagangan langsung, penempatan pesanan yang disimulasikan, dan untuk membantu dalam merekodkan pesanan.
Kes penggunaan yang paling biasa ialah: menggunakanexchange.IO
fungsi untuk mengakses penciptaan antara muka perintah bersyarat bursa untuk meletakkan perintah bersyarat.exchange.IO
fungsi tidak akan output maklumat log pertukaran dalam rakaman log bot.exchange.Log(LogType, Price, Amount)
untuk melengkapkan output log untuk merakam maklumat pesanan.
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)
menyokongHMACpengiraan penyulitanmd5/sha256/sha512/sha1, dan hanya perdagangan langsung berjalan disokong.
exchange.HMAC("sha256", "hex", "xxxxx", "{{secretkey}}")
Untuk mengutipaccessKey
, gunakan"{{accesskey}}"
.
Untuk mengutipsecretKey
, gunakan"{{secretkey}}"
; atau anda boleh menggunakan teks biasa"abc-123-xxxx"
. "{{accessKey}}","{{secretkey}}"
hanya sah apabila fungsi ini digunakan.OutputAlgo
sokongan:
Push BitMEX perubahan kedudukan (wss protokol)
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...)
adalah fungsi asynchronous yang disokong berbilang benang, yang boleh mengubah operasi semua fungsi yang disokong menjadi serentak asynchronous (yang hanya menyokong pertukaran cryptocurrency). Nilai parameter:Method
, jenis rentetan, iaitu nama fungsi yang dipanggil secara serentak.
Nota:
exchange.Go
fungsi mengembalikan objek,wait
fungsi dipanggil untuk mendapatkan data yang dikembalikan oleh utas melalui objek. utas akan dibebaskan secara automatik selepas pemerolehan data dengan memanggilwait
Jika menentukan parameter masa lapangwait
, benang tidak akan dibebaskan walaupun masa lapang berlaku; dengan cara ini, benang akan dibebaskan secara automatik hanya dengan mendapatkan hasil benang (tidak kira antara muka yang diakses secara serentak dipanggil dengan berjaya atau tidak berjaya).wait
fungsi, dan sumber benang yang digunakan olehexchange.Go
fungsi dibebaskan secara automatik oleh docker.wait
fungsi tidak dicapai pada akhirnya, sumber benang tidak akan dibebaskan secara automatik, yang akan menyebabkan pengumpulan benang yang digunakan; jika bilangan benang melebihi 2000, satu ralat akan dilaporkan:"too many routine wait, max is 2000"
.Fungsi yang disokong:GetTicker
, GetDepth
, GetTrades
, GetRecords
, GetAccount
, GetOrders
, GetOrder
, CancelOrder
, Buy
, Sell
, GetPosition
danIO
.
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);
}
Nota:
undefined
, gunakantypeof(xx)==="undefined"
, kerananull == undefined
tersedia dalam 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);
}
Perbezaan antaraPython
danJavaScript
Adakah ituPython
...wait
fungsi mengembalikan dua parameter: yang pertama adalah hasil yang dikembalikan oleh API asynchronous; yang kedua menunjukkan sama ada panggilan asynchronous selesai.
Python
contoh:
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)
Mendapatkan beberapa pertukaran sebut harga serentak:
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);
}
}
Panggilan serentak kepadaexchange.IO("api", ...)
fungsi:
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()
mengembalikan maklumat akaun pertukaran. Nilai pulangan:Account
structure.
Account
strukturfunction 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);
}
Jika objek pertukaran ditetapkan untuk pertukaran niaga hadapan cryptocurrency dan beralih ke kontrak denganUSDT
sebagai margin (lihatexchange.SetContractType
fungsi untuk mengetahui bagaimana untuk beralih), aset mengambilUSDT
sebagai margin, yang direkodkan dalam sifatBalance
danFrozenBalance
.
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()
mengembalikan nama pertukaran. Nilai balik: jenis rentetan.exchange
atauexchanges[n]
objek dalam kod strategi.
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");
}
Untuk memerintahkan versi baris docker, anda boleh menggunakan-1
perintah untuk mencetak senarai nama pertukaran.
exchange.GetLabel()
Mengembalikan label khusus pertukaran. Nilai balik: jenis rentetan.
Peraturanexchange
atauexchanges[n]
objek dalam kod strategi biasanya ditentukan oleh label yang ditetapkan semasa mengkonfigurasi objek pertukaran.
exchange.GetCurrency()
mengembalikan nama pasangan mata wang yang dikendalikan oleh bursa, dan platform cryptocurrency mengembalikan rentetan, sepertiLTC_BTC
. Nilai pulangan: jenis rentetan.
Peraturanexchange.SetCurrency(Symbol)
fungsi digunakan untuk menukar pasangan dagangan semasa objek pertukaran.exchange.IO ("currency","BTC_USDT")
. Ia menyokong menukar pasangan dagangan dalam sistem backtesting, dan namapricing currency
tidak boleh diubah apabila menukar pasangan dagangan dalam sistem backtesting (contohnya,BTC_USDT
boleh ditukar kepadaLTC_USDT
, tetapi ia tidak boleh ditukar kepadaLTC_BTC
Selepas beralih ke pasangan dagangan yang pada mulanya ditetapkan pada halaman bukan backtesting, bilangantrading coins
adalah 0 (contohnya, semasa backtest, nilai awal pasangan dagangan pada halaman backtest adalahBTC_USDT
, bilangan BTC adalah 3, dan bilangan USDT adalah 10,000.LTC_USDT
, bilangantrading coins
Selepas menukar akan menjadi 0, yang bermaksud jumlah LTC dalam akaun adalah 0, tetapi jumlah USDT bersama pasangan dagangan yang ditukar masih 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());
}
Hasil operasi ujian belakang:
exchange.GetQuoteCurrency()
mengembalikan nama mata wang asas yang dikendalikan oleh pertukaran. Sebagai contoh,BTC_CNY
pengembalianCNY
, danETH_BTC
pengembalianBTC
. Nilai pulangan: jenis rentetan.
Untuk objek pertukaran niaga hadapan cryptocurrency, kod kontrak mesti ditentukan sebelum memanggilnya.pasaran, Perintahdan antara muka lain, danexchange.SetContractType
Apabila menukar pasangan dagangan semasa objek pertukaran, anda perlu memanggilexchange.SetContractType
Untuk kod kontrak pertukaran mata wang digital yang disokong oleh platform, sila rujukexchange.SetContractType
function.
exchange.GetPosition()
mendapatkan maklumat kedudukan semasa. Nilai pulangan:position
struktur array. Jika tidak ada kedudukan, ia mengembalikan array kosong, iaitu[]
.
Position
strukturBiasanya, kontrak niaga hadapan cryptocurrency dibahagikan kepada dua jenis:
Kontrak Penghantaran
Apabila kontrak ditetapkan kepada kontrak penghantaran, memanggilexchange.GetPosition()
fungsi, dan semua kedudukan dalam kontrak penghantaran di bawah pasangan dagangan semasa akan dikembalikan.
Kontrak kekal
Apabila kontrak ditetapkan kepada kontrak kekal, memanggilexchange.GetPosition()
fungsi, dan semua kedudukan dalam kontrak kekal di bawah pasangan dagangan semasa akan dikembalikan.
/*
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)
menetapkan saiz leverage. Nilai parameter: jenis nombor.
Tetapkan saiz leverage untuk meletakkan pesanan niaga hadapan mata wang kripto, contohnya:
function main() {
exchange.SetMarginLevel(10)
}
def main():
exchange.SetMarginLevel(10)
void main() {
exchange.SetMarginLevel(10);
}
Untuk niaga hadapan mata wang kripto, mekanisme leverage bursa niaga hadapan mata wang kripto tidak seragam. Pada beberapa bursa, nilai leverage niaga hadapan adalah parameter dalam antara muka pesanan penempatan.SetMarginLevel
fungsi tidak boleh menjana permintaan rangkaian, tetapi hanya menetapkan pembolehubah leverage di lapisan bawah (digunakan untuk lulus parameter dalam antara muka pesanan penempatan). Leverage niaga hadapan beberapa bursa adalah tetapan bursa, yang perlu ditetapkan di halaman laman web bursa atau dengan menggunakan antara muka API.SetMarginLevel
fungsi akan menjana permintaan rangkaian, dan ia mungkin gagal untuk menetapkan leverage untuk pelbagai sebab. sebagai contoh: jika terdapat kedudukan semasa dan pesanan yang menunggu, nilai leverage mungkin tidak ditetapkan untuk pasangan dagangan ini dan objek asas.
Nota untuk menetapkan leverage dalam reka bentuk strategi:
exchange.SetDirection(Direction)
setexchange.Buy
atauexchange.Sell
Untuk membuat arahan untuk meletakkan pesanan niaga hadapan.
PeraturanSetDirection
Fungsi menetapkan persamaan antara arah dagangan niaga hadapan dan fungsi penempatan pesanan:
Fungsi Penempatan Perintah | Arahan Tetapan Parameter untuk |
Catatan |
---|---|---|
exchange.Buy | membeli kedudukan panjang terbuka | |
exchange.Buy | membeli kedudukan pendek yang ditutup | |
exchange.Sell | menjual kedudukan pendek terbuka | |
exchange.Sell | menjual kedudukan panjang |
ParameterDirection
boleh mengambil empat parameter, termasukbuy
, closebuy
, sell
danclosesell
.
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)
menetapkan jenis kontrak. Nilai parameter: jenis rentetan. Dalam strategi cryptocurrency, ambil exchange.SetCurrency("BTC_USDT")
atauexchange.IO("currency", "BTC_USDT")
, anda perlu menggunakanexchange.SetContractType
Sistem ini menentukan sama ada ia adalah satu pasangan dagangan baru atau tidak.currency-based contract
atau aU-based contract
berdasarkanPasangan dagangan. Sebagai contoh, apabila pasangan dagangan ditetapkan untukBTC_ USDT
, menggunakan fungsiexchange.SetContractType
untuk menetapkan kod kontrakswap
, yang ditetapkan sebagai kontrak kekal berasaskan USDT BTC.BTC_ USD
, menggunakan fungsiexchange.SetContractType
untuk menetapkan kod kontrakswap
, yang ditetapkan sebagai kontrak kekal berasaskan mata wang BTC.
Kecuali dinyatakan sebaliknya,kontrak penghantaranKod dalam kontrak niaga hadapan mata wang kripto umumnya merangkumi:
this_week
: kontrak mingguannext_week
: kontrak minggu depanquarter
: kontrak suku tahunannext_quarter
: kontrak suku berikutnyaKecuali dinyatakan sebaliknya,kontrak kekalKod dalam kontrak niaga hadapan mata wang kripto umumnya merangkumi:
swap
: kontrak kekalTetapkan kontrak semasa kepada kontrak mingguan:
function main() {
// Set to weekly contract
exchange.SetContractType("this_week")
}
def main():
exchange.SetContractType("this_week")
void main() {
exchange.SetContractType("this_week");
}
Penerangan terperinci mengenai penamaan kontrak setiap pertukaran cryptocurrency yang disokong ditunjukkan sebagai berikut:
OKX
Tetapkan kontrak kekal:exchange.SetContractType("swap")
Set untuk minggu ini kontrak:exchange.SetContractType("this_week")
Kontrak minggu depan:exchange.SetContractType("next_week")
Tetapkan kontrak suku tahunan:exchange.SetContractType("quarter")
Set untuk kontrak suku berikutnya:exchange.SetContractType("next_quarter")
OKX USDT-margined kontrak boleh ditukar kepada kontrak menggunakan USDT penyelesaian yang sepadan dengan kontrak semasa dengan menukartrading pair
(atau tetapkannya secara langsung apabila menambah objek pertukaran).
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());
}
Futures_HuobiDM
Set untuk minggu ini kontrak:exchange.SetContractType("this_week")
Kontrak minggu depan:exchange.SetContractType("next_week")
Tetapkan kontrak suku tahunan:exchange.SetContractType("quarter")
Set untuk kontrak suku berikutnya:exchange.SetContractType("next_quarter")
Tetapkan kontrak kekal:exchange.SetContractType("swap")
Platform ini menyokong kontrak margin USDT. Ambil kontrak BTC sebagai contoh. Anda boleh beralih ke kontrak margin USDT hanya dengan menggunakanexchange.SetCurrency("BTC_USDT")
, atau dengan menetapkan pasangan dagangan semasa kepadaBTC_USDT
langsung apabila anda mengkonfigurasi parameter bot dan menambah objek pertukaran.exchange.SetContractType
fungsi lagi untuk menetapkan kontrak.
Futures_BitMEX
Tetapkan kontrak kekal:exchange.SetContractType("XBTUSD")
, exchange.SetContractType("APTUSDT")
.
Kontrak diselesaikan pada masa tertentu, dan log masuk ke laman web rasmi BitMEX untuk memeriksa setiap kod kontrak untuk maklumat lanjut.exchange.SetContractType("XBTM19")
.
Futures_GateIO
Set untuk minggu ini kontrak:exchange.SetContractType("this_week")
.
Kontrak minggu depan:exchange.SetContractType("next_week")
.
Tetapkan kontrak suku tahunan:exchange.SetContractType("quarter")
.
Set untuk kontrak suku berikutnya:exchange.SetContractType("next_quarter")
.
Tetapkan kontrak kekal:exchange.SetContractType("swap")
.
Pertukaran menyokong kontrak margin USDT. Ambil kontrak BTC sebagai contoh. Anda boleh beralih ke kontrak margin USDT hanya dengan menggunakanexchange.SetCurrency("BTC_USDT")
, atau dengan menetapkan pasangan dagangan semasa kepadaBTC_USDT
langsung apabila anda mengkonfigurasi parameter perdagangan langsung dan menambah objek pertukaran.exchange.SetContractType
fungsi lagi untuk menetapkan kontrak.
Futures_Deribit
Tetapkan kontrak kekal:exchange.SetContractType("BTC-PERPETUAL")
Menyokong kontrak Deribit USDC; panggilanexchange.SetContractType("ADA_USDC-PERPETUAL")
untuk menetapkan kontrak kekal dengan margin ADA USDC.
Kontrak diselesaikan pada masa tertentu, dan log masuk ke laman web rasmi Deribit untuk memeriksa setiap kod kontrak untuk maklumat lanjut, seperti:exchange.SetContractType("BTC-27APR18")
.
Futures_KuCoin
BTC_USD
, dan kemudian menetapkan kod kontrak, yang dipanggil kontrak margin crypto.
Tetapkan kontrak kekal:exchange.SetContractType("swap")
Tetapkan kontrak suku tahunan:exchange.SetContractType("quarter")
Set untuk kontrak suku berikutnya:exchange.SetContractType("next_quarter")
BTC_USDT
, dan kemudian menetapkan kod kontrak, yang merupakan kontrak margin USDT.
Tetapkan kontrak kekal:exchange.SetContractType("swap")
.Futures_Binance
Binance Futures lalai untuk tidak menetapkan status kontrak, jadi anda perlu menetapkan kontrak terlebih dahulu.
Tetapkan kontrak kekal:exchange.SetContractType("swap")
Kontrak kekal Binance Futures boleh menjadi kontrak margin USDT.BTC
Kontrak dengan margin USDT, pasangan dagangan ditetapkan kepadaBTC_USDT
. Kontrak kekal Binance Futures juga termasuk kontrak margin kripto. Sebagai contoh, dalam kontrak margin kripto, tetapkan pasangan dagangan kepadaBTC_USD
.
Tetapkan kontrak suku tahunan:exchange.SetContractType("quarter")
Kontrak penghantaran termasuk kontrak crypto-margined (iaitu mengambil mata wang yang digunakan sebagai margin).BTC
, pasangan dagangan ditetapkan kepadaBTC_USD
, dan kemudian menetapkan kod kontrakexchange.SetContractType("quarter")
, yang menetapkan kontrak triwulanan BTC crypto-margined.
Set untuk kontrak suku berikutnya:exchange.SetContractType("next_quarter")
Sebagai contoh, dalam kontrak crypto-margined suku tahunanBTC
, pasangan dagangan ditetapkan kepadaBTC_USD
, dan kemudian menetapkan kod kontrakexchange.SetContractType("next_quarter)
. Binance menyokong sebahagian daripada kontrak penghantaran dengan margin USDT, seperti menetapkan pasangan dagangan BTC kepadaBTC_USDT
, dan kemudian menetapkan kod kontrak.
Futures_Bibox
Bibox kod kontrak kekal:swap
.
Tetapkan kontrak kekal:exchange.SetContractType("swap")
.
Futures_AOFEX
Kod kontrak kekal AOFEX:swap
.
Tetapkan kontrak kekal:exchange.SetContractType("swap")
.
Futures_BFX
Kod kontrak kekal BFX:swap
.
Tetapkan kontrak kekal:exchange.SetContractType("swap")
.
Futures_Bybit
Bybit lalai untuk kontrak kekal pasangan dagangan semasa.swap
.
Kod kontrak suku tahunan:quarter
.
Kod kontrak suku berikutnya:next_quarter
.
Masa hadapan_Kraken
Kraken lalai untuk tidak menetapkan status kontrak, jadi anda perlu menetapkan kod kontrak.swap
Kontrak kekal.month
: kontrak bulanan.quarter
: kontrak suku tahun.next_quarter
Kontrak suku berikutnya.
Futures_Bitfinex
Bitfinex lalai untuk kontrak kekal pasangan dagangan semasa.swap
.
Futures_Bitget
Bitget lalai untuk kontrak kekal pasangan dagangan semasa.swap
. Pasangan dagangan ditetapkan untukBTC_USD
, menunjukkan kontrak margin kripto; pasangan dagangan ditetapkan kepadaBTC_USDT
, menunjukkan kontrak dengan margin USDT. Kontrak yang disimulasikan boleh menetapkan pasangan dagangan ke dalam:SBTC_USD
danBTC_SUSDT
.
Futures_dYdX
Kod kontrak kontrak kekal dYdX:swap
.
Tetapkan kontrak kekal:exchange.SetContractType("swap")
. dYdX hanya mempunyai kontrak dengan margin USDT.
Futures_MEXC
Kod kontrak kontrak kekal MEXC:swap
.
Tetapkan kontrak kekal:exchange.SetContractType("swap")
. Pasangan dagangan ditetapkan untukBTC_USD
, menunjukkan kontrak margin kripto; pasangan dagangan ditetapkan kepadaBTC_USDT
, menunjukkan kontrak dengan margin USDT.
Apabila menulis strategi cryptocurrency, hubungiexchange.SetContractType(ContractType)
fungsi dan maklumat kontrak terperinci yang ditetapkan oleh parameter kontrakContractType
akan dikembalikan.
Sebagai contoh, menjalankan kod strategi kontrak OKX yang ditetapkan sebagai objek pertukaran:
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);
}
Jalankan strategi dalamJavaScript
bahasa, dan cetakret
data, iaitu maklumat terperinci mengenaithis_week
kontrak:
{
"instrument":"BTC-USD-191101",
"InstrumentID":"BTC-USD-191101"
}
exchange.GetContractType()
mengembalikan kod kontrak yang ditetapkan pada masa ini objek pertukaran (exchange
), nilai pulangan: rentetan.
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());
}
Jadual berikut menerangkan maklumat ralat yang berkaitan dengan objek pertukaran kontrak niaga hadapan mata wang kripto:
Nilai | Kesalahan paparan fungsi | Fungsi pencetus | Penerangan |
---|---|---|---|
0 | Futures_OP 0 | exchange.SetMarginLevel | Kesilapan memanggil fungsi leverage |
1 | Futures_OP 1 | exchange.SetDirection | Kesilapan menetapkan fungsi arah dagangan niaga hadapan |
2 | Futures_OP 2 | exchange.SetContractType | Kesilapan menetapkan fungsi kontrak |
3 | Futures_OP 3 | exchange.GetPosition | Kesilapan mendapatkan fungsi kedudukan |
4 | Futures_OP 4 | exchange.IO | Kesilapan memanggil fungsi IO |
Penggunaanexchange.SetContractType
fungsi untuk menetapkan kontrak; Bursa yang berbeza mempunyai kod kontrak pilihan yang berbeza.
Bursa opsyen cryptocurrency yang disokong oleh platform FMZ Quant Trading
Deribit
Untuk pertukaran Deribit, ia hanya perlu untuk memanggilexchange.SetContractType
fungsi untuk menetapkan kontrak sebagai kontrak opsyen. selepas menetapkan kontrak opsyen, apabila memanggil antara muka pasaran sepertiGetTicker
, semua data pasaran kontrak opsyen diperoleh.exchange.Sell
danexchange.Buy
fungsi untuk meletakkan pesanan, dan memberi perhatian kepada arah perdagangan apabila meletakkan pesanan, dan menetapkan arah perdagangan denganexchange.SetDirection
. Gunakanexchange.Cancel
fungsi untuk membatalkan pesanan; gunakanexchange.GetPosition
fungsi untuk menyoal kedudukan.
Kod strategi untuk rujukan:Strategi Ujian Pilihan Deribit
OKX
Menetapkan kontrak, meletakkan pesanan, membatalkan pesanan, meminta pesanan, dan mendapatkan sebut harga pasaran, dll adalah operasi yang sama denganDeribit
, dan format kod kontrak adalahBTC-USD-200626-4500-C
. Anda boleh menyoal maklumat yang berkaitan dengan kontrak melalui antara mukahttps://www.okx.com/api/v5/public/instruments
.
Sebagai contoh, untuk menyoal maklumat kontrak opsyen 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"));
}
Futures_HuobiDM
Sebagai contoh, kod kontrak opsyen Huobi:BTC-USDT-201225-P-13000
; kontrak adalahBTC
kontrak; tarikh pelaksanaan adalah 25 Disember 2020; pilihan adalah Put Options (PUT); harga mogok adalah $ 13,000.
Untuk Pilihan Beli, premium yang dibayar oleh pembeli adalah USDT, menunjukkan USDT dalam aset akaun digunakan; margin penjual adalah mata wang, yang dijamin oleh mata wang dalam aset.
Untuk Pilihan Jual, premium yang dibayar oleh pembeli adalah USDT, menunjukkan USDT dalam aset akaun digunakan; margin penjual adalah USDT, yang dijamin oleh USDT dalam aset.
Futures_Bybit
Ia menyokong pilihan USDC pertukaran Bybit, dan menetapkan pasangan dagangan untukETH_USDC
, fungsi panggilanexchange.SetContractType
untuk menetapkan kontrak sebagai kontrak pilihan. Contoh kod kontrak pilihan:ETH-25NOV22-1375-P
.
Peraturanexchange.SetBase(Base)
fungsi digunakan untuk menukar alamat asas API yang direkodkan dalam objek pertukaran; Sebagai contoh, beralih keOKX
nama domainhttps://aws.okx.com
, serasi denganexchange.IO("base","https://aws.okx.com")
sistem backtest tidak menyokong menukar alamat asas API pertukaran (sistem backtest adalah persekitaran sandbox, bukan antara muka sebenar untuk mengakses pertukaran).
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(...)
Fungsi ini tidak mempunyai nilai pulangan (di perolehi oleh pembolehubah, dan apa yang anda perolehi adalahundefined
Jika tetapan proksi gagal, nilai null akan dikembalikan apabila antara muka dipanggil, hanya untukberehatSetiap objek pertukaranexchanges[n]
Selepas menyediakan proksi, antara muka pertukaran akan diakses melalui proksi.
Ambil objek pertukaran pertama yang ditambahexchange
, iaitu:exchanges[0]
, sebagai contoh:
exchange.SetProxy("socks5://127.0.0.1:8889")
exchange.SetProxy("socks5://username:password@127.0.0.1:8889")
(username
adalah nama pengguna,password
adalah kata laluan.)exchange.SetProxy("")
Menyokong untuk menetapkan alamat IP yang diminta oleh objek pertukaran.
windows
versi antara muka sistem boleh ditetapkan secara langsung, yang ditunjukkan sebagai imej berikut:Pelabuhan lain yang dikendalikan oleh parameter penggunaan perintah segera-I
untuk menentukan alamat IP:
Berdasarkan pertukaran untuk menentukan:
function main(){
exchange.SetProxy("ip://10.0.3.15")
exchange.GetTicker() // The reque