ملٹی تھریڈڈ غیر متزلزل سپورٹ افعال تمام معاون افعال کے آپریشنز کو غیر متزلزل بیک وقت عمل میں تبدیل کرسکتے ہیں۔
کےexchange.Go()
تقریب فوری طور پر ایک متوازی اعتراض واپس، اور آپ کو استعمال کر سکتے ہیںwait()
متوازی درخواست کا نتیجہ حاصل کرنے کے لئے اس متوازی اعتراض کا طریقہ.
چیز
تبادلہ.Go (میتھڈ) تبادلہ.Go ((طریقہ،...args)
کےmethod
پیرامیٹر متوازی فنکشن کا نام بتانے کے لئے استعمال کیا جاتا ہے۔ نوٹ کریں کہ پیرامیٹر فنکشن کا نام سٹرنگ ہے ، نہ کہ فنکشن کا حوالہ۔
طریقہ کار
سچ
سٹرنگ
پیرامیٹرزبیک وقت انجام دینے والے افعال، ایک سے زیادہ پیرامیٹر ہو سکتا ہےarg
. پیرامیٹر کی قسم اور تعدادarg
کے پیرامیٹرز پر منحصربیک وقت عملدرآمد کی تقریب.
ارگ
غلط
string, number, bool, object, array, function, null, and all other types supported by the system string, number, bool, object, array, function, null, and all other types supported by the system string, number, bool, object, array, function, null, and all other types supported by the system string, number, bool, object, array, function, function, null, and all other types supported by the system
function main(){
// The following four operations are concurrently executed asynchronously by multiple threads and do not take time and return immediately
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 ticker results asynchronously
var ticker = a.wait()
// Returns the depth, or null if it fails
var depth = b.wait()
// return order number, limited to 1 second timeout, if timeout, returns undefined, the object can continue to call wait if the last wait 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);
}
Exchange.Go()
فنکشن استعمال مثال، کا تعین کرنے کے لئےundefined
استعمال کرناtypeof(xx) === "undefined"
، کیونکہnull == undefined
جاوا اسکرپٹ میں درست ہے۔
function main() {
var d = exchange.Go("GetRecords", PERIOD_H1)
// Waiting for K-line results
var records = d.wait()
// Here waits an asynchronous operation that has been waited and finished, it will return null, and log the error message
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);
}
بلاتا ہےwait()
ایک متوازی اعتراض پر طریقہ ہے کہ جاری کیا گیا ہے ایک غلطی کی اطلاع دے گا:
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: "ticker",
cols: ["index", "name", "latest-deal-price"],
rows: []
}
for(var i = 0; i < arrTicker.length; i++) {
tbl.rows.push([i, arrName[i], arrTicker[i].Last])
}
LogStatus(_D(), "Total time taken to obtain tickers from multiple exchanges concurrently:", 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": "ticker",
"cols": ["index", "name", "latest-deal-price"],
"rows": []
}
for i in range(len(arrTicker)):
tbl["rows"].append([i, arrName[i], arrTicker[i]["Last"]])
LogStatus(_D(), "Total time taken to obtain tickers from multiple exchanges concurrently:", 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 several exchange objects, several exchanges[n].Go functions have to be executed here, this example is to add four exchange objects, the details can be modified
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": "ticker",
"cols": ["index", "name", "latest-deal-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(), "Total time taken to obtain tickers from multiple exchanges concurrently:", format("%d", endTS - beginTS), "millisecond", "\n", "`" + tbl.dump() + "`");
Sleep(500);
}
}
متعدد ایکسچینج ٹکرز تک بیک وقت رسائی:
function main() {
/*
Testing with OKX futures order interface
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("Concurrent order placement time consumption:", 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("Concurrent order placement time consumption:", 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("Concurrent order placement time consumption:", endTS - beginTS, "millisecond");
}
متوازی کالز کے لئےexchange.IO("api", ...)
فنکشن:
یہ فنکشن صرف حقیقی تجارت میں چلانے پر ملٹی تھریڈڈ ایگزیکشن ٹاسکس تخلیق کرتا ہے ، بیک ٹسٹنگ ملٹی تھریڈڈ بیک وقت ٹاسک ایگزیکشن کی حمایت نہیں کرتا ہے (بیک ٹسٹنگ دستیاب ہے ، لیکن پھر بھی ترتیب سے عملدرآمد ہوتا ہے) ۔
کے بعدexchange.Go()
تقریب ایک اعتراض، اس کی واپسیwait()
فنکشن اس موضوع کے ذریعے بلایا جاتا ہے تھریڈ کی طرف سے واپس اعداد و شمار حاصل کرنے کے لئے.wait()
تقریب کو خود کار طریقے سے جاری کیا جائے گا اس سے پہلے ڈیٹا حاصل کرنے کے لئے بلایا جانا چاہئے.wait()
اگر آپ کے پاس ایک مخصوص تھریڈ ہے تو ، تھریڈ کو خود بخود جاری نہیں کیا جائے گا یہاں تک کہ اگر ٹائم آؤٹ واقع ہو۔ تھریڈ کا نتیجہ خود بخود جاری ہونے سے پہلے حاصل کیا جانا چاہئے (ایک ہی وقت میں رسائی کے لئے انٹرفیس کال کی کامیابی یا ناکامی سے قطع نظر) ۔ آسان الفاظ میں ، مطلوبہ تھریڈ کوwait()
تقریب چاہے عملدرآمد کامیابی یا ناکامی، اور موضوع کی درخواست کی ہے کہ وسائل کی طرف سےexchange.Go()
فنکشن ڈوکر کی طرف سے خود کار طریقے سے جاری کیا جانا چاہئے.
کےwait()
طریقہ ایک ٹائم آؤٹ پیرامیٹر کی حمایت:
بغیر کسی ٹائم آؤٹ پیرامیٹر کے، یعنی،wait()
، یا 0 کی ایک ٹائم آؤٹ پیرامیٹر کے ساتھ، یعنی،wait(0)
.wait()
فنکشن بلاک کرتا ہے اور انتظار کرتا ہے جب تک کہ ہم آہنگ تھریڈ چلانے کا کام ختم نہ ہو جائے ، جو ہم آہنگ تھریڈ کے عملدرآمد کا نتیجہ واپس کرتا ہے۔
مقرر کریں ٹائم آؤٹ پیرامیٹر - 1، یعنیwait(-1)
.wait()
فنکشن فوری طور پر لوٹتا ہے، مختلف پروگرامنگ زبانوں کے لئے مختلف واپسی کی قیمتوں کے ساتھ، ایک مثال کال کے لئے اس ذیلی سیکشن کو دیکھیں.
مخصوص ٹائم آؤٹ پیرامیٹر مقرر کریں،wait(300)
، اورwait()
فنکشن واپس آنے سے پہلے زیادہ سے زیادہ 300 ملی سیکنڈ انتظار کرے گا.
اگر واپسی کا نتیجہwait()
فنکشن حاصل نہیں کیا جاتا ہے، موضوع کے وسائل کو خود بخود جاری نہیں کیا جائے گا، جس کی وجہ سے مطلوبہ موضوعات جمع ہو جائیں گے، اور 2000 سے زائد غلطی کی اطلاع دیں گے:"too many routine wait, max is 2000"
.
معاون افعال:GetTicker
, GetDepth
, GetTrades
, GetRecords
, GetAccount
, GetOrders
, GetOrder
, CancelOrder
, Buy
, Sell
, GetPositions
, IO
. یہ تمام افعال موجودہ {@var/EXCHANGE تبادلہ} تبادلے اعتراض کی بنیاد پر چلایا جاتا ہے جب بیک وقت بلایا جاتا ہے.
پائیتھون زبان اور جاوا اسکرپٹ زبان کے درمیان فرق یہ ہے کہwait()
پائیتھون زبان میں متوازی اشیاء کی تقریب دو پیرامیٹرز لوٹاتی ہے۔ پہلا پیرامیٹر ایک غیر متزلزل API کال کے ذریعہ واپس آنے والا نتیجہ ہے ، اور دوسرا پیرامیٹر اس بات کی نشاندہی کرتا ہے کہ آیا غیر متزلزل کال مکمل ہوگئی ہے۔
def main():
d = exchange.Go("GetRecords", PERIOD_D1)
# ok will return True definitely, unless the strategy is stopped
ret, ok = d.wait()
# If the wait times out, or if it waits for an instance that has already ended, ok returns False
ret, ok = d.wait(100)
{@fun/Global/Mail_Go Mail_Go}، {@fun/Global/HttpQuery_Go HttpQuery_Go}، {@fun/Global/EventLoop ایونٹ لوپ}
exchange.Encode اکاؤنٹ