oparameter is set to
نشانor
signTx, the
key``` پیرامیٹر کی ضرورت ہے.
function main(){
Log(Encode("md5", "raw", "hex", "hello"))
Log(Encode("sha512", "raw", "base64", "hello"))
Log(Encode("keccak256", "raw", "hex", "unwrapWETH9(uint256,address)"))
Log(Encode("raw", "string", "hex", "example")) // 6578616d706c65
Log(Encode("raw", "hex", "string", "6578616d706c65")) // example
}
def main():
Log(Encode("md5", "raw", "hex", "hello", "", ""))
Log(Encode("sha512", "raw", "base64", "hello", "", ""))
Log(Encode("keccak256", "raw", "hex", "unwrapWETH9(uint256,address)", "", ""))
Log(Encode("raw", "string", "hex", "example", "", ""))
Log(Encode("raw", "hex", "string", "6578616d706c65", "", ""))
void main(){
Log(Encode("md5", "raw", "hex", "hello"));
Log(Encode("sha512", "raw", "base64", "hello"));
Log(Encode("keccak256", "raw", "hex", "unwrapWETH9(uint256,address)"));
Log(Encode("raw", "string", "hex", "example")); // 6578616d706c65
Log(Encode("raw", "hex", "string", "6578616d706c65")); // example
}
پیرامیٹرalgo
اس کے علاوہ اسکرینز کی انکوڈنگ اور ڈیکوڈنگ کی حمایت کرتا ہے، جیسےtext.encoder.utf8
, text.decoder.utf8
, text.encoder.gbk
اورtext.decoder.gbk
.
function main(){
var ret1 = Encode("text.encoder.utf8", "raw", "hex", "hello") // e4bda0e5a5bd
Log(ret1)
var ret2 = Encode("text.decoder.utf8", "hex", "string", ret1)
Log(ret2)
var ret3 = Encode("text.encoder.gbk", "raw", "hex", "hello") // c4e3bac3
Log(ret3)
var ret4 = Encode("text.decoder.gbk", "hex", "string", ret3)
Log(ret4)
}
def main():
ret1 = Encode("text.encoder.utf8", "raw", "hex", "hello", "", "") # e4bda0e5a5bd
Log(ret1)
ret2 = Encode("text.decoder.utf8", "hex", "string", ret1, "", "")
Log(ret2)
ret3 = Encode("text.encoder.gbk", "raw", "hex", "hello", "", "") # c4e3bac3
Log(ret3)
ret4 = Encode("text.decoder.gbk", "hex", "string", ret3, "", "")
Log(ret4)
void main(){
auto ret1 = Encode("text.encoder.utf8", "raw", "hex", "hello"); // e4bda0e5a5bd
Log(ret1);
auto ret2 = Encode("text.decoder.utf8", "hex", "string", ret1);
Log(ret2);
auto ret3 = Encode("text.encoder.gbk", "raw", "hex", "hello"); // c4e3bac3
Log(ret3);
auto ret4 = Encode("text.decoder.gbk", "hex", "string", ret3);
Log(ret4);
}
UnixNano()
نینو سیکنڈ کی سطح کا ٹائم اسٹیمپ لوٹاتا ہے۔ اگر آپ کو ملی سیکنڈ کی سطح کا ٹائم اسٹیمپ حاصل کرنے کی ضرورت ہو تو ، آپ مندرجہ ذیل کوڈ استعمال کرسکتے ہیں۔
function main() {
var time = UnixNano() / 1000000
Log(_N(time, 0))
}
def main():
time = UnixNano()
Log(time)
void main() {
auto time = UnixNano();
Log(time);
}
Unix()
سیکنڈ میں ٹائم اسٹیمپ لوٹاتا ہے۔
function main() {
var t = Unix()
Log(t)
}
def main():
t = Unix()
Log(t)
void main() {
auto t = Unix();
Log(t);
}
GetOS()
نظام کے بارے میں معلومات واپس کرتا ہے جہاں ڈاکر واقع ہے.
function main() {
Log("GetOS:", GetOS())
}
def main():
Log("GetOS:", GetOS())
void main() {
Log("GetOS:", GetOS());
}
کی طرف سے چلایا ڈوکر کی لاگ آؤٹ پٹMac OS
ایپل کمپیوٹر کا:
GetOS:ڈارون/amd64
darwin
کا نام ہےMac OS
system.
MD5(String)
; پیرامیٹر کی قدر: تار کی قسم.
function main() {
Log("MD5", MD5("hello world"))
}
def main():
Log("MD5", MD5("hello world"))
void main() {
Log("MD5", MD5("hello world"));
}
لاگ آؤٹ پٹ:
MD5 5eb63bbbe01eeed093cb22bb8f5acdc3
DBExec()
، اس کی پیرامیٹر ویلیو سٹرنگ ، نمبر یا بولین ، نل اور دیگر اقسام ہوسکتی ہے۔ واپسی کی قیمت: SQLite زبان میں عملدرآمد کے نتائج کے ساتھ آبجیکٹ۔DBExec()
، ڈیٹا بیس کا انٹرفیس فنکشن ، پیرامیٹرز کو منتقل کرنے کے ذریعے ، بوٹ کے ڈیٹا بیس (SQLite ڈیٹا بیس) کو چلا سکتا ہے۔ یہ بوٹ ڈیٹا بیس پر شامل کرنے ، حذف کرنے ، استفسار کرنے اور ترمیم کرنے کے آپریشنوں کا احساس کرتا ہے ، جس کی حمایت کرتا ہےSQLite
نظام میں بوٹ ڈیٹا بیس میں میزیں محفوظ کریں جن میں شامل ہیں:kvdb
, cfg
, log
, profit
اورchart
مندرجہ بالا جدولوں میں سے کسی کو کام نہ کریں.DBExec()
صرف حقیقی روبوٹ کی حمایت کرتا ہے.
میموری ڈیٹا بیس کی حمایت کرتا ہے
فنکشن کے پیرامیٹرز کے لئےDBExec
، اگرمربعبیان کے ساتھ شروع ہوتا ہے:
، میموری ڈیٹا بیس میں آپریشن فائلوں کو لکھنے کے بغیر تیز ہو جائے گا ۔ یہ طویل مدتی اسٹوریج کی ضرورت کے بغیر ڈیٹا بیس کے آپریشن کے لئے موزوں ہے ، مثال کے طور پر:
function main() {
var strSql = [
":CREATE TABLE TEST_TABLE(",
"TS INT PRIMARY KEY NOT NULL,",
"HIGH REAL NOT NULL,",
"OPEN REAL NOT NULL,",
"LOW REAL NOT NULL,",
"CLOSE REAL NOT NULL,",
"VOLUME REAL NOT NULL)"
].join("")
var ret = DBExec(strSql)
Log(ret)
// Add a piece of data
Log(DBExec(":INSERT INTO TEST_TABLE (TS, HIGH, OPEN, LOW, CLOSE, VOLUME) VALUES (1518970320000, 100, 99.1, 90, 100, 12345.6);"))
// Query the data
Log(DBExec(":SELECT * FROM TEST_TABLE;"))
}
def main():
arr = [
":CREATE TABLE TEST_TABLE(",
"TS INT PRIMARY KEY NOT NULL,",
"HIGH REAL NOT NULL,",
"OPEN REAL NOT NULL,",
"LOW REAL NOT NULL,",
"CLOSE REAL NOT NULL,",
"VOLUME REAL NOT NULL)"
]
strSql = ""
for i in range(len(arr)):
strSql += arr[i]
ret = DBExec(strSql)
Log(ret)
# Add a piece of data
Log(DBExec(":INSERT INTO TEST_TABLE (TS, HIGH, OPEN, LOW, CLOSE, VOLUME) VALUES (1518970320000, 100, 99.1, 90, 100, 12345.6);"))
# Query the data
Log(DBExec(":SELECT * FROM TEST_TABLE;"))
void main() {
string strSql = ":CREATE TABLE TEST_TABLE(\
TS INT PRIMARY KEY NOT NULL,\
HIGH REAL NOT NULL,\
OPEN REAL NOT NULL,\
LOW REAL NOT NULL,\
CLOSE REAL NOT NULL,\
VOLUME REAL NOT NULL)";
auto ret = DBExec(strSql);
Log(ret);
// Add a piece of data
Log(DBExec(":INSERT INTO TEST_TABLE (TS, HIGH, OPEN, LOW, CLOSE, VOLUME) VALUES (1518970320000, 100, 99.1, 90, 100, 12345.6);"));
// Query the data
Log(DBExec(":SELECT * FROM TEST_TABLE;"));
}
ٹیبل بنائیں
function main() {
var strSql = [
"CREATE TABLE TEST_TABLE(",
"TS INT PRIMARY KEY NOT NULL,",
"HIGH REAL NOT NULL,",
"OPEN REAL NOT NULL,",
"LOW REAL NOT NULL,",
"CLOSE REAL NOT NULL,",
"VOLUME REAL NOT NULL)"
].join("")
var ret = DBExec(strSql)
Log(ret)
}
def main():
arr = [
"CREATE TABLE TEST_TABLE(",
"TS INT PRIMARY KEY NOT NULL,",
"HIGH REAL NOT NULL,",
"OPEN REAL NOT NULL,",
"LOW REAL NOT NULL,",
"CLOSE REAL NOT NULL,",
"VOLUME REAL NOT NULL)"
]
strSql = ""
for i in range(len(arr)):
strSql += arr[i]
ret = DBExec(strSql)
Log(ret)
void main() {
string strSql = "CREATE TABLE TEST_TABLE(\
TS INT PRIMARY KEY NOT NULL,\
HIGH REAL NOT NULL,\
OPEN REAL NOT NULL,\
LOW REAL NOT NULL,\
CLOSE REAL NOT NULL,\
VOLUME REAL NOT NULL)";
auto ret = DBExec(strSql);
Log(ret);
}
function main() {
var strSql = [
"CREATE TABLE TEST_TABLE(",
"TS INT PRIMARY KEY NOT NULL,",
"HIGH REAL NOT NULL,",
"OPEN REAL NOT NULL,",
"LOW REAL NOT NULL,",
"CLOSE REAL NOT NULL,",
"VOLUME REAL NOT NULL)"
].join("")
Log(DBExec(strSql))
// Add a piece of data
Log(DBExec("INSERT INTO TEST_TABLE (TS, HIGH, OPEN, LOW, CLOSE, VOLUME) VALUES (1518970320000, 100, 99.1, 90, 100, 12345.6);"))
// Query the data
Log(DBExec("SELECT * FROM TEST_TABLE;"))
// Modify the data
Log(DBExec("UPDATE TEST_TABLE SET HIGH=? WHERE TS=?", 110, 1518970320000))
// Delete the data
Log(DBExec("DELETE FROM TEST_TABLE WHERE HIGH=?", 110))
}
def main():
arr = [
"CREATE TABLE TEST_TABLE(",
"TS INT PRIMARY KEY NOT NULL,",
"HIGH REAL NOT NULL,",
"OPEN REAL NOT NULL,",
"LOW REAL NOT NULL,",
"CLOSE REAL NOT NULL,",
"VOLUME REAL NOT NULL)"
]
strSql = ""
for i in range(len(arr)):
strSql += arr[i]
Log(DBExec(strSql))
# Add a piece of data
Log(DBExec("INSERT INTO TEST_TABLE (TS, HIGH, OPEN, LOW, CLOSE, VOLUME) VALUES (1518970320000, 100, 99.1, 90, 100, 12345.6);"))
# Query the data
Log(DBExec("SELECT * FROM TEST_TABLE;"))
# Modify the data
Log(DBExec("UPDATE TEST_TABLE SET HIGH=? WHERE TS=?", 110, 1518970320000))
# Delete the data
Log(DBExec("DELETE FROM TEST_TABLE WHERE HIGH=?", 110))
void main() {
string strSql = "CREATE TABLE TEST_TABLE(\
TS INT PRIMARY KEY NOT NULL,\
HIGH REAL NOT NULL,\
OPEN REAL NOT NULL,\
LOW REAL NOT NULL,\
CLOSE REAL NOT NULL,\
VOLUME REAL NOT NULL)";
Log(DBExec(strSql));
// Add a piece of data
Log(DBExec("INSERT INTO TEST_TABLE (TS, HIGH, OPEN, LOW, CLOSE, VOLUME) VALUES (1518970320000, 100, 99.1, 90, 100, 12345.6);"));
// Query the data
Log(DBExec("SELECT * FROM TEST_TABLE;"));
// Modify the data
Log(DBExec("UPDATE TEST_TABLE SET HIGH=? WHERE TS=?", 110, 1518970320000));
// Delete the data
Log(DBExec("DELETE FROM TEST_TABLE WHERE HIGH=?", 110));
}
UUID()
، ایک 32 بٹ منفرد UUID لوٹاتا ہے، یہ فنکشن صرف حقیقی بوٹس کے لئے دستیاب ہے.
function main() {
var uuid1 = UUID()
var uuid2 = UUID()
Log(uuid1, uuid2)
}
def main():
uuid1 = UUID()
uuid2 = UUID()
Log(uuid1, uuid2)
void main() {
auto uuid1 = UUID();
auto uuid2 = UUID();
Log(uuid1, uuid2);
}
EventLoop(timeout)
، کوئی بھی ہے کے بعد واپس آتا ہےwebsocket
پڑھنے کے قابل یاexchange.Go
, HttpQuery_Go
اور دیگر متوازی کاموں کو مکمل کر رہے ہیں.timeout
0 پر مقرر کیا گیا ہے، واپسی سے پہلے کسی واقعہ کے واقع ہونے کا انتظار کریں۔ اگر یہ 0 سے زیادہ ہے تو، ایونٹ انتظار ٹائم آؤٹ مقرر کریں۔ اگر یہ 0 سے کم ہے تو، فوری طور پر تازہ ترین واقعہ واپس کریں۔ اگر واپس کردہ آبجیکٹ نہیں ہےnull
،Event
واپسی کے مواد میں موجود ٹرگر ایونٹ کی قسم ہے۔ یہ فنکشن صرف حقیقی بوٹ ٹریڈنگ کے لئے دستیاب ہے۔
کی پہلی کالEventLoop
کوڈ میں واقعہ کی سماعت کے میکانزم کو شروع کرے گا.EventLoop
ایونٹ کال بیک کے بعد شروع کیا جاتا ہے تو ، پچھلا واقعہ غائب ہوجاتا ہے۔ بنیادی نظام کے ذریعہ احاطہ کردہ قطار کا ڈھانچہ 500 ایونٹ کال بیک تک کیش کرے گا۔EventLoop
پروگرام کے عملدرآمد کے دوران ہٹانے کے لئے وقت میں بلایا نہیں ہے، 500 کیشے سے باہر بعد میں واقعہ کال بیک کھو جائے گا.EventLoop
تقریب کیشے قطار کو متاثر نہیں کرے گاwebsocket
بنیادی نظام، نہ ہی کیش پرexchange.Go
اور دیگر متوازی افعال. ان کیشوں کے لئے، آپ کو اب بھی اعداد و شمار کی وصولی کے لئے ان کے اپنے طریقوں کا استعمال کرنے کی ضرورت ہے.EventLoop
تقریب لوٹتا ہے، کوئی واپسی واقعہ میں پیدا کیا جائے گاEventLoop
function.
مرکزی مقصدEventLoop
تقریب حکمت عملی کی پرت کو مطلع کرنا ہے کہ بنیادی نظام کو نئے نیٹ ورک کے اعداد و شمار موصول ہوئے ہیں. واقعات کے ساتھ پوری حکمت عملی کو چلائیں.EventLoop
تقریب ایک واقعہ واپس کرتا ہے، آپ کو صرف تمام ڈیٹا ذرائع کو پار کرنے کی ضرورت ہے. مثال کے طور پر، کی طرف سے پیدا اشیاءwebsocket
کنکشن اور اشیاء کی طرف سے پیداexchange.Go
اعداد و شمار حاصل کرنے کی کوشش کریں. آپ کو ایک اوپن سورس کلاس لائبریری ڈیزائن کا حوالہ دے سکتے ہیں:کلاس لائبریری لنک.
function main() {
var routine_getTicker = exchange.Go("GetTicker")
var routine_getDepth = exchange.Go("GetDepth")
var routine_getTrades = exchange.Go("GetTrades")
// Sleep(2000), if the Sleep statement is used here, the subsequent EventLoop function will miss the previous events, because after waiting for 2 seconds, the concurrent function has received the data, and the EventLoop monitoring mechanism will start later, and these events will be missed
// Unless you start calling EventLoop(-1) on the first line of code, first initialize the listening mechanism of EventLoop, you will not miss these events
// Log("GetDepth:", routine_getDepth.wait()) If the wait function is called in advance to get the result of the concurrent call of the GetDepth function, the event that the GetDepth function receives the request result will not be returned in the EventLoop function
var ts1 = new Date().getTime()
var ret1 = EventLoop(0)
var ts2 = new Date().getTime()
var ret2 = EventLoop(0)
var ts3 = new Date().getTime()
var ret3 = EventLoop(0)
Log("The first concurrent task completed was:", _D(ts1), ret1)
Log("The second concurrent task completed was:", _D(ts2), ret2)
Log("The third concurrent task completed was:", _D(ts3), ret3)
Log("GetTicker:", routine_getTicker.wait())
Log("GetDepth:", routine_getDepth.wait())
Log("GetTrades:", routine_getTrades.wait())
}
import time
def main():
routine_getTicker = exchange.Go("GetTicker")
routine_getDepth = exchange.Go("GetDepth")
routine_getTrades = exchange.Go("GetTrades")
ts1 = time.time()
ret1 = EventLoop(0)
ts2 = time.time()
ret2 = EventLoop(0)
ts3 = time.time()
ret3 = EventLoop(0)
Log("The first concurrent task completed was:", _D(ts1), ret1)
Log("The second concurrent task completed was:", _D(ts2), ret2)
Log("The third concurrent task completed was:", _D(ts3), ret3)
Log("GetTicker:", routine_getTicker.wait())
Log("GetDepth:", routine_getDepth.wait())
Log("GetTrades:", routine_getTrades.wait())
void main() {
auto routine_getTicker = exchange.Go("GetTicker");
auto routine_getDepth = exchange.Go("GetDepth");
auto routine_getTrades = exchange.Go("GetTrades");
auto ts1 = Unix() * 1000;
auto ret1 = EventLoop(0);
auto ts2 = Unix() * 1000;
auto ret2 = EventLoop(0);
auto ts3 = Unix() * 1000;
auto ret3 = EventLoop(0);
Log("The first concurrent task completed was:", _D(ts1), ret1);
Log("The second concurrent task completed was:", _D(ts2), ret2);
Log("The third concurrent task completed was:", _D(ts3), ret3);
Ticker ticker;
Depth depth;
Trades trades;
routine_getTicker.wait(ticker);
routine_getDepth.wait(depth);
routine_getTrades.wait(trades);
Log("GetTicker:", ticker);
Log("GetDepth:", depth);
Log("GetTrades:", trades);
}
_G(K, V)
، ایک عالمی لغت کے فنکشن کے ساتھ جو محفوظ کیا جاسکتا ہے ، بیک ٹیسٹ اور بوٹ دونوں کی حمایت کرتا ہے۔ بیک ٹیسٹ کے بعد ، محفوظ کردہ ڈیٹا کو صاف کردیا جائے گا۔
اعداد و شمار کا ڈھانچہ ہےKV
ٹیبل ، مستقل طور پر ایک مقامی فائل میں محفوظ ہے۔ ہر بوٹ کا ایک الگ ڈیٹا بیس ہوتا ہے۔ یہ دوبارہ شروع کرنے کے بعد یا جب ڈوکر باہر نکلتا ہے تو ہمیشہ موجود رہتا ہے۔K
ایک سٹرنگ ہونا ضروری ہے، جو بڑے اور چھوٹے حرفوں سے حساس نہیں ہے۔V
کوئی بھی ہو سکتا ہےJSON
serializable مواد. جب تقریب_G()
بلایا جاتا ہے اور کوئی پیرامیٹرز بوٹ آپریشن میں منتقل کر رہے ہیں، تقریب_G()
لوٹاتا ہےID
موجودہ بوٹ کی.
function main(){
// Set a global variable num with a value of 1
_G("num", 1)
// Change a global variable num with the value "ok"
_G("num", "ok")
// Delete global variable num
_G("num", null)
// Return the value of the global variable num
Log(_G("num"))
// Delete all global variables
_G(null)
// Return bot ID
var robotId = _G()
}
def main():
_G("num", 1)
_G("num", "ok")
_G("num", None)
Log(_G("num"))
_G(None)
robotId = _G()
void main() {
_G("num", 1);
_G("num", "ok");
_G("num", NULL);
Log(_G("num"));
_G(NULL);
// does not support auto robotId = _G();
}
نوٹ:
استعمال کرتے وقت_G
اعداد و شمار کو محفوظ کرنے کا کام ، اسے ہارڈ ویئر ڈیوائس کی میموری اور ہارڈ ڈسک کی جگہ کے مطابق معقول حد تک استعمال کیا جانا چاہئے ، اور اس کا غلط استعمال نہیں کیا جانا چاہئے۔ بصورت دیگر ، اس سےمیموری اوور فلو problem.
_D(Timestamp, Fmt)
، مقررہ ٹائم اسٹیمپ کے متعلقہ وقت کی تاروں کو لوٹاتا ہے۔ پیرامیٹر ویلیو:Timestamp
ایک عددی قسم ہے، ملی سیکنڈ میں.Fmt
ایک تار کی قسم ہے؛Fmt
ڈیفالٹ:yyyy-MM-dd hh:mm:ss
; واپسی کی قیمت: تار کی قسم.
یہ مخصوص ٹائم اسٹیمپ ((ms) سٹرنگ لوٹاتا ہے ، اور کسی بھی پیرامیٹر کو پاس کیے بغیر موجودہ وقت لوٹاتا ہے۔ مثال کے طور پر:_D()
یا_D(1478570053241)
، جس کی ڈیفالٹ شکل ہےyyyy-MM-dd hh:mm:ss
.
function main(){
var time = _D()
Log(time)
}
def main():
strTime = _D()
Log(strTime)
void main() {
auto strTime = _D();
Log(strTime);
}
نوٹ:
استعمال کے وقت_D()
میںPython
حکمت عملی، ہم میں منتقل پیرامیٹرز سیکنڈ میں ٹائم اسٹیمپ ہیں کہ توجہ دینا ضروری ہے (ملسی سیکنڈ کی سطح ٹائم اسٹیمپ میںJavaScript
اورC ++
حکمت عملی، اور 1 سیکنڈ = 1000 ملی سیکنڈ).
روبوٹ میں، جب فنکشن کا استعمال کرتے ہوئے_D()
پڑھنے کے قابل ٹائم اسٹیمپ کے ساتھ ایک وقت کی تار تجزیہ کرنے کے لئے، آپ کو ڈوکر پروگرام کے آپریٹنگ سسٹم میں ٹائم زون پر توجہ دینے کی ضرورت ہے._D()
ایک ٹائم اسٹیمپ کو ڈاکر سسٹم کے وقت کی بنیاد پر پڑھنے کے قابل ٹائم سٹرنگ کے طور پر تجزیہ کرتا ہے۔
مثال کے طور پر، کی ایک ٹائم اسٹیمپ تجزیہ1574993606000
کوڈ کے ساتھ:
function main() {
Log(_D(1574993606000))
}
def main():
# Beijing time server runs: 2019-11-29 10:13:26, and the docker on another server in another region runs this code will get the results: 2019-11-29 02:13:26
Log(_D(1574993606))
void main() {
Log(_D(1574993606000));
}
_N(Num, Precision)
، ایک فارمیٹ شدہ فلوٹنگ کمان نمبر۔ پیرامیٹر ویلیو:Num
عددی نوعیت کا ہو۔Precision
عدد کی قسم ہے۔ واپسی کی قدر: عددی قسم۔
مثلاً:_N(3.1415, 2)
کی دو اعشاریہ کے بعد قدر کو خارج کر دیں گے3.1415
اور واپس3.14
.
function main(){
var i = 3.1415
Log(i)
var ii = _N(i, 2)
Log(ii)
}
def main():
i = 3.1415
Log(i)
ii = _N(i, 2)
Log(ii)
void main() {
auto i = 3.1415;
Log(i);
auto ii = _N(i, 2);
Log(ii);
}
اگر آپ کو اعشاریہ کے بائیں طرف N ہندسوں کو 0 میں تبدیل کرنے کی ضرورت ہے تو، آپ لکھ سکتے ہیں:
function main(){
var i = 1300
Log(i)
var ii = _N(i, -3)
// Checking the log shows that it is 1000
Log(ii)
}
def main():
i = 1300
Log(i)
ii = _N(i, -3)
Log(ii)
void main() {
auto i = 1300;
Log(i);
auto ii = _N(i, -3);
Log(ii);
}
_C(function, args…)
ایک دوبارہ کوشش کی تقریب ہے، جو مارکیٹ کی معلومات حاصل کرنے اور نامکمل احکامات وغیرہ حاصل کرنے کے بارے میں انٹرفیس کے غلطی برداشت کے لئے استعمال کیا جاتا ہے.
انٹرفیس مسلسل جب تک یہ کامیابی کے ساتھ واپس بلایا جائے گا مخصوص تقریب (پیرامیٹرfunction
ریفرنسڈ فنکشن کو کال کرتے وقت null قدر لوٹاتا ہے یاfalse
کال دوبارہ کوشش کریں گے). مثال کے طور پر،_ C(exchange. GetTicker)
، ڈیفالٹ دوبارہ کوشش کے وقفے 3 سیکنڈ ہے، جس میں فنکشن کال کر سکتے ہیں_CDelay (...)
دوبارہ کوشش کے وقفے کو مقرر کرنے کے لئے، جیسے_CDelay (1000)
مطلب تبدیلی کی تقریب_C
ایک سیکنڈ تک دوبارہ کوشش کریں۔
مندرجہ ذیل افعال کے لئے:
exchange.GetTicker()
exchange.GetDepth()
exchange.GetTrades()
exchange.GetRecords()
exchange.GetAccount()
exchange.GetOrders()
exchange.GetOrder()
exchange.GetPosition()
وہ سب کو فنکشن کی طرف سے غلطی رواداری کرنے کے لئے بلایا جا سکتا ہے_C(...)
فنکشن_C(function, args...)
مندرجہ بالا درج افعال کی غلطی برداشت تک محدود نہیں ہے. پیرامیٹرfunction
کہا جاتا ہے نہیں بلایا، اور اس پر توجہ دینا ہے کہ یہ ہے_C(exchange.GetTicker)
نہیں_C(exchange.GetTicker())
.
function main(){
var ticker = _C(exchange.GetTicker)
// Adjust _C() function's retry interval to 2 seconds
_CDelay(2000)
var depth = _C(exchange.GetDepth)
Log(ticker)
Log(depth)
}
def main():
ticker = _C(exchange.GetTicker)
_CDelay(2000)
depth = _C(exchange.GetDepth)
Log(ticker)
Log(depth)
void main() {
auto ticker = _C(exchange.GetTicker);
_CDelay(2000);
auto depth = _C(exchange.GetDepth);
Log(ticker);
Log(depth);
}
پیرامیٹرز کے ساتھ افعال کے لئے، جب استعمال کیا جاتا ہے_C(...)
غلطی رواداری کرنے کے لئے:
function main(){
var records = _C(exchange.GetRecords, PERIOD_D1)
Log(records)
}
def main():
records = _C(exchange.GetRecords, PERIOD_D1)
Log(records)
void main() {
auto records = _C(exchange.GetRecords, PERIOD_D1);
Log(records);
}
یہ اپنی مرضی کے مطابق تقریب غلطی رواداری ہینڈلنگ کے لئے بھی استعمال کیا جا سکتا ہے:
var test = function(a, b){
var time = new Date().getTime() / 1000
if(time % b == 3){
Log("Meet the criteria! ", "#FF0000")
return true
}
Log("Retry!", "#FF0000")
return false
}
function main(){
var ret = _C(test, 1, 5)
Log(ret)
}
import time
def test(a, b):
ts = time.time()
if ts % b == 3:
Log("Meet the criteria!", "#FF0000")
return True
Log("Retry!", "#FF0000")
return False
def main():
ret = _C(test, 1, 5)
Log(ret)
// C++ does not support this method for fault tolerance of custom functions.
_Cross(Arr1, Arr2)
صفوں کے کراسنگ ادوار کی تعداد لوٹاتا ہےارر1اورarr2ایک مثبت نمبر عروج کا دورانیہ ہے ، اور منفی نمبر زوال کا دورانیہ ہے ، اور 0 کا مطلب موجودہ قیمت کے برابر ہے۔ پیرامیٹر ویلیو: نمبر کی قسم کی صف۔
آپ کی تقریب کی جانچ کرنے کے لئے اعداد و شمار کا ایک سیٹ کی نقالی کر سکتے ہیں_Cross(Arr1, Arr2)
:
// Fast line indicator
var arr1 = [1,2,3,4,5,6,8,8,9]
// Slow line indicator
var arr2 = [2,3,4,5,6,7,7,7,7]
function main(){
Log("_Cross(arr1, arr2) : ", _Cross(arr1, arr2))
Log("_Cross(arr2, arr1) : ", _Cross(arr2, arr1))
}
arr1 = [1,2,3,4,5,6,8,8,9]
arr2 = [2,3,4,5,6,7,7,7,7]
def main():
Log("_Cross(arr1, arr2) : ", _Cross(arr1, arr2))
Log("_Cross(arr2, arr1) : ", _Cross(arr2, arr1))
void main() {
vector<double> arr1 = {1,2,3,4,5,6,8,8,9};
vector<double> arr2 = {2,3,4,5,6,7,7,7,7};
Log("_Cross(arr1, arr2) : ", _Cross(arr1, arr2));
Log("_Cross(arr2, arr1) : ", _Cross(arr2, arr1));
}
مشاہدے کے لئے نمونہ کردہ اعداد و شمار کو دیکھنے کے لئے
مخصوص ہدایات:بلٹ ان فنکشن _کراس تجزیہ اور ہدایات
JSONParse(strJson)
، اس فنکشن کو JSON سٹرنگز کو تجزیہ کرنے کے لئے استعمال کیا جاتا ہے۔ بڑی تعداد پر مشتمل JSON سٹرنگز کو صحیح طریقے سے تجزیہ کیا جاسکتا ہے ، اور بڑی تعداد کو سٹرنگ کی اقسام میں تجزیہ کیا جائے گا۔ بیک ٹیسٹنگ سسٹم اس فنکشن کی حمایت نہیں کرتا ہے۔
function main() {
let s1 = '{"num": 8754613216564987646512354656874651651358}'
Log("JSON.parse:", JSON.parse(s1)) // JSON.parse: {"num":8.754613216564988e+39}
Log("JSONParse:", JSONParse(s1)) // JSONParse: {"num":"8754613216564987646512354656874651651358"}
let s2 = '{"num": 123}'
Log("JSON.parse:", JSON.parse(s2)) // JSON.parse: {"num":123}
Log("JSONParse:", JSONParse(s2)) // JSONParse: {"num":123}
}
import json
def main():
s1 = '{"num": 8754613216564987646512354656874651651358}'
Log("json.loads:", json.loads(s1)) # json.loads: map[num:8.754613216564987e+39]
Log("JSONParse:", JSONParse(s1)) # JSONParse: map[num:8754613216564987646512354656874651651358]
s2 = '{"num": 123}'
Log("json.loads:", json.loads(s2)) # json.loads: map[num:123]
Log("JSONParse:", JSONParse(s2)) # JSONParse: map[num:123]
void main() {
auto s1 = "{\"num\":8754613216564987646512354656874651651358}";
Log("json::parse:", json::parse(s1));
// Log("JSONParse:", JSONParse(s1)); // The function is not supported
auto s2 = "{\"num\":123}";
Log("json::parse:", json::parse(s2));
// Log("JSONParse:", JSONParse(s2)); // The function is not supported
}
ہر پیغام تار ایک RGB قدر کے ساتھ ختم ہو سکتا ہے جیسے:#ff0000
، جو ظاہر کرنے کے لئے فرنٹ گراؤنڈ رنگ کی نمائندگی کرتا ہے.#ff0000112233
، آخری چھ پچھلے پس منظر پس منظر کا رنگ نمائندگی کرتے ہیں.
function main() {
Log("Red", "#FF0000")
}
def main():
Log("Red", "#FF0000")
void main() {
Log("Red", "#FF0000");
}
جب بوٹ چل رہا ہے تو، لاگ ان کی معلومات بوٹ کے ڈیٹا بیس میں ریکارڈ کی جاتی ہے، جوsqlite3
ڈیٹا بیس کی فائلیں ڈوکر پروگرام کے ساتھ آلہ میں واقع ہیں ، اور فائلوں کا عین مطابق مقام ڈوکر پروگرام کے لغت میں ہے (robot
مثال کے طور پر: ID کے ساتھ بوٹ ڈیٹا بیس فائل130350
ڈائرکٹری میں ہے../logs/storage/130350
(..
ڈکشنری ہے جہاں ڈوکر کےrobot
واقع ہے) ، اور ڈیٹا بیس فائل کا نام ہے130350.db3
.
بیک ٹسٹ سسٹم میں نوشتہ جات کو [ڈاؤن لوڈ لاگ] بٹن بیک ٹیسٹ ختم ہونے کے بعد بیک ٹیسٹ کے صفحے کے نیچے دائیں کونے میں.
جب آپ کو بوٹ کو کسی دوسرے سرور پر ڈوکر میں منتقل کرنے کی ضرورت ہو تو ، آپ بوٹ کی ڈیٹا بیس فائلوں (توسیع
Log(message)
کا مطلب ہے لاگ لسٹ میں پیغام محفوظ کرنا۔ پیرامیٹر ویلیو:message
کسی بھی قسم کی ہو سکتی ہے.
اگر آپ کو کردار شامل@
سٹرنگ کے بعد ، پیغام پش قطار میں داخل ہوگا اور ایف ایم زیڈ کوانٹ ٹریڈنگ پلیٹ فارم کے موجودہ وی چیٹ اکاؤنٹ میں دھکیل دیا جائے گا ، اور
نوٹ:
function main() {
Log("Hello FMZ Quant!@")
Sleep(1000 * 5)
// Add the string to #ff0000, print the log in red, and push the message
Log("Hello, #ff0000@")
}
def main():
Log("Hello FMZ Quant!@")
Sleep(1000 * 5)
Log("Hello, #ff0000@")
void main() {
Log("Hello FMZ Quant!@");
Sleep(1000 * 5);
Log("Hello, #ff0000@");
}
ویب ہکدباؤ:
میں لکھا سروس پروگرام ڈیمو استعمال کریںGolang
:
package main
import (
"fmt"
"net/http"
)
func Handle (w http.ResponseWriter, r *http.Request) {
defer func() {
fmt.Println("req:", *r)
}()
}
func main () {
fmt.Println("listen http://localhost:9090")
http.HandleFunc("/data", Handle)
http.ListenAndServe(":9090", nil)
}
سیٹWebHook
: http://XXX.XX.XXX.XX:9090/data?data=Hello_FMZ
سروس پروگرام چلانے کے بعد، حکمت عملی کو انجام دیں اور معلومات کو دبائیں:
function main() {
Log("msg", "@")
}
def main():
Log("msg", "@")
void main() {
Log("msg", "@");
}
دھکا معلومات موصول، اور سروس پروگرام کی معلومات پرنٹ:
listen http://localhost:9090
req: {GET /data?data=Hello_FMZ HTTP/1.1 1 1 map[User-Agent:[Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/xx.x.xxxx.xxx Safari/537.36] Accept-Encoding:[gzip]] {} <nil> 0 [] false 1XX.XX.X.XX:9090 map[] map[] <nil> map[] XXX.XX.XXX.XX:4xxx2 /data?data=Hello_FMZ <nil> <nil> <nil> 0xc420056300}
پرنٹ کریںbase64
انکوڈ شدہ تصویرفنکشنLog
میں کوڈت تصاویر کی پرنٹنگ کی حمایت کرتاbase64
، ان کے ساتھ شروع ہوتا ہے`
، اور اس کے ساتھ ختم`
مثال کے طور پر:
function main() {
Log("`data:image/png;base64,AAAA`")
}
def main():
Log("`data:image/png;base64,AAAA`")
void main() {
Log("`data:image/png;base64,AAAA`");
}
Log
پرنٹنگ کی حمایت کرتا ہےmatplotlib.pyplot
اشیاءPython
براہ راست، یعنی، جب تک اشیاء پر مشتمل ہےsavefig
طریقہ، آپ استعمال کر سکتے ہیںLog
براہ راست پرنٹ کرنے کے لئے، مثال کے طور پر:
import matplotlib.pyplot as plt
def main():
plt.plot([3,6,2,4,7,1])
Log(plt)
طباعت شدہ نوشتہ جات کی زبانوں کا خودکار تبادلہفنکشنLog
زبان سوئچنگ کی حمایت کرتا ہے۔ جب فنکشن متن آؤٹ پٹ کرتا ہے تو ، یہ پلیٹ فارم کے صفحے پر زبان کی ترتیب کے مطابق خود بخود اسی زبان میں تبدیل ہوجائے گا۔ مثال کے طور پر:
function main() {
Log("[trans]Chinese|abc[/trans]")
}
def main():
Log("[trans]Chinese|abc[/trans]")
void main() {
Log("[trans]Chinese|abc[/trans]");
}
LogProfit(Profit)
منافع کی قیمت ریکارڈ کرتا ہے، منافع کی قیمت پرنٹ کرتا ہے، اور منافع کی قیمت کے مطابق منافع کے منحنی خطوط تیار کرتا ہے۔ پیرامیٹر کی قیمت:منافععددی ٹائپ ہے۔
اگر فنکشن حروف کے ساتھ ختم ہوتا ہے&
، یہ صرف منافع چارٹ ڈرائنگ کا احساس کر سکتے ہیں، اور منافع لاگ پرنٹنگ نہیں، جیسے:LogProfit(10, '&')
.
LogProfitReset()
تمام منافع لاگ کو صاف کرتا ہے؛ آپ کو مخصوص اشیاء کی تعداد کی وضاحت کرنے کے لئے ایک عدد قدر پیرامیٹر لے سکتے ہیں.
function main() {
// Print 30 points on the income chart, then reset, and only retain the last 10 points
for(var i = 0; i < 30; i++) {
LogProfit(i)
Sleep(500)
}
LogProfitReset(10)
}
def main():
for i in range(30):
LogProfit(i)
Sleep(500)
LogProfitReset(10)
void main() {
for(int i = 0; i < 30; i++) {
LogProfit(i);
Sleep(500);
}
LogProfitReset(10);
}
LogStatus(Msg)
، معلومات لاگ لسٹ میں محفوظ نہیں کی جاتی ہیں ، صرف بوٹ کی موجودہ حیثیت کی معلومات کو اپ ڈیٹ کیا جاتا ہے۔ یہ لاگ کے اوپر دکھایا جاتا ہے اور حیثیت کو اپ ڈیٹ کرنے کے لئے متعدد بار بلایا جاسکتا ہے۔ پیرامیٹر ویلیو:Msg
کسی بھی قسم کی ہو سکتی ہے.
function main() {
LogStatus('This is a normal status prompt')
LogStatus('This is a status prompt in red font # ff0000')
LogStatus('This is a multi-line status message \n I am the second line')
}
def main():
LogStatus('This is a normal status prompt')
LogStatus('This is a status prompt in red font # ff0000')
LogStatus('This is a multi-line status message \nI am the second line')
void main() {
LogStatus("This is a normal status prompt");
LogStatus("This is a status prompt in red font # ff0000");
LogStatus("This is a multi-line status message \nI am the second line");
}
LogStatus(Msg)
پرنٹنگ کی حمایت کرتا ہےbase64
کوڈ شدہ تصاویر، کے ساتھ شروع`
اور آخر میں`
، جیسے:LogStatus("`data:image/png;base64,AAAA`")
.
LogStatus(Msg)
کی براہ راست درآمد کی حمایت کرتا ہےPython
ہےmatplotlib.pyplot
شے، جب تک کہ شے پر مشتمل ہےsavefig
طریقہ کار، آپ کو تقریب میں منتقل کر سکتے ہیںLogStatus(Msg)
، جیسے:
import matplotlib.pyplot as plt
def main():
plt.plot([3,6,2,4,7,1])
LogStatus(plt)
حالت بار میں ڈیٹا آؤٹ پٹ مثال:
function main() {
var table = {type: 'table', title: 'Position Information', cols: ['Column1', 'Column2'], rows: [ ['abc', 'def'], ['ABC', 'support color #ff0000']]}
// After the JSON order is serialized, add the character "`" on both sides, which is regarded as a complex message format (currently supporting tables)
LogStatus('`' + JSON.stringify(table) + '`')
// Table information can also appear in multiple lines
LogStatus('First line message\n`' + JSON.stringify(table) + '`\nThird line message')
// That supports multiple tables displayed at the same time, and that will be displayed in a group with TAB
LogStatus('`' + JSON.stringify([table, table]) + '`')
// You can also construct a button in the table, and the strategy uses "GetCommand" to receive the content of the cmd attribute
var table = {
type: 'table',
title: 'Position operation',
cols: ['Column1', 'Column2', 'Action'],
rows: [
['abc', 'def', {'type':'button', 'cmd': 'coverAll', 'name': 'close position'}]
]
}
LogStatus('`' + JSON.stringify(table) + '`')
// Or create a separate button
LogStatus('`' + JSON.stringify({'type':'button', 'cmd': 'coverAll', 'name': 'close position'}) + '`')
// You can customize the button style (button attribute of bootstrap)
LogStatus('`' + JSON.stringify({'type':'button', 'class': 'btn btn-xs btn-danger', 'cmd': 'coverAll', 'name': 'close position'}) + '`')
}
import json
def main():
table = {"type": "table", "title": "Position Information", "cols": ["Column1", "Column2"], "rows": [["abc", "def"], ["ABC", "support color #ff0000"]]}
LogStatus('`' + json.dumps(table) + '`')
LogStatus('First line message\n`' + json.dumps(table) + '`\nThird line message')
LogStatus('`' + json.dumps([table, table]) + '`')
table = {
"type" : "table",
"title" : "Position operation",
"cols" : ["Column1", "Column2", "Action"],
"rows" : [
["abc", "def", {"type": "button", "cmd": "coverAll", "name": "close position"}]
]
}
LogStatus('`' + json.dumps(table) + '`')
LogStatus('`' + json.dumps({"type": "button", "cmd": "coverAll", "name": "close position"}) + '`')
LogStatus('`' + json.dumps({"type": "button", "class": "btn btn-xs btn-danger", "cmd": "coverAll", "name": "close position"}) + '`')
void main() {
json table = R"({"type": "table", "title": "Position Information", "cols": ["Column1", "Column2"], "rows": [["abc", "def"], ["ABC", "support color #ff0000"]]})"_json;
LogStatus("`" + table.dump() + "`");
LogStatus("First line message\n`" + table.dump() + "`\nThird line message");
json arr = R"([])"_json;
arr.push_back(table);
arr.push_back(table);
LogStatus("`" + arr.dump() + "`");
table = R"({
"type" : "table",
"title" : "Position operation",
"cols" : ["Column1", "Column2", "Action"],
"rows" : [
["abc", "def", {"type": "button", "cmd": "coverAll", "name": "close position"}]
]
})"_json;
LogStatus("`" + table.dump() + "`");
LogStatus("`" + R"({"type": "button", "cmd": "coverAll", "name": "close position"})"_json.dump() + "`");
LogStatus("`" + R"({"type": "button", "class": "btn btn-xs btn-danger", "cmd": "coverAll", "name": "close position"})"_json.dump() + "`");
}
حالت بار کے بٹنوں کے غیر فعال اور وضاحت کے افعال مقرر کریں:
function main() {
var table = {
type: "table",
title: "Test the disable and description functions of status bar buttons",
cols: ["Column1", "Column2", "Column3"],
rows: []
}
var button1 = {"type": "button", "name": "button1", "cmd": "button1", "description": "This is the first button"}
var button2 = {"type": "button", "name": "button2", "cmd": "button2", "description": "This is the second button, set to disabled", "disabled": true}
var button3 = {"type": "button", "name": "button3", "cmd": "button3", "description": "This is the third button, set to enabled", "disabled": false}
table.rows.push([button1, button2, button3])
LogStatus("`" + JSON.stringify(table) + "`")
}
import json
def main():
table = {
"type": "table",
"title": "Test the disable and description functions of status bar buttons",
"cols": ["Column1", "Column2", "Column3"],
"rows": []
}
button1 = {"type": "button", "name": "button1", "cmd": "button1", "description": "This is the first button"}
button2 = {"type": "button", "name": "button2", "cmd": "button2", "description": "This is the second button, set to disabled", "disabled": True}
button3 = {"type": "button", "name": "button3", "cmd": "button3", "description": "This is the third button, set to enabled", "disabled": False}
table["rows"].append([button1, button2, button3])
LogStatus("`" + json.dumps(table) + "`")
void main() {
json table = R"({
"type": "table",
"title": "Test the disable and description functions of status bar buttons",
"cols": ["Column1", "Column2", "Column3"],
"rows": []
})"_json;
json button1 = R"({"type": "button", "name": "button1", "cmd": "button1", "description": "This is the first button"})"_json;
json button2 = R"({"type": "button", "name": "button2", "cmd": "button2", "description": "This is the second button, set to disabled", "disabled": true})"_json;
json button3 = R"({"type": "button", "name": "button3", "cmd": "button3", "description": "This is the third button, set to enabled", "disabled": false})"_json;
json arr = R"([])"_json;
arr.push_back(button1);
arr.push_back(button2);
arr.push_back(button3);
table["rows"].push_back(arr);
LogStatus("`" + table.dump() + "`");
}
حالت بار کے بٹنوں کا انداز مقرر کریں:
function main() {
var table = {
type: "table",
title: "status bar button style",
cols: ["default", "raw", "success", "information", "warning", "danger"],
rows: [
[
{"type":"button", "class": "btn btn-xs btn-default", "name": "default"},
{"type":"button", "class": "btn btn-xs btn-primary", "name": "raw"},
{"type":"button", "class": "btn btn-xs btn-success", "name": "success"},
{"type":"button", "class": "btn btn-xs btn-info", "name": "information"},
{"type":"button", "class": "btn btn-xs btn-warning", "name": "warning"},
{"type":"button", "class": "btn btn-xs btn-danger", "name": "danger"}
]
]
}
LogStatus("`" + JSON.stringify(table) + "`")
}
import json
def main():
table = {
"type": "table",
"title": "status bar button style",
"cols": ["default", "raw", "success", "information", "warning", "danger"],
"rows": [
[
{"type":"button", "class": "btn btn-xs btn-default", "name": "default"},
{"type":"button", "class": "btn btn-xs btn-primary", "name": "raw"},
{"type":"button", "class": "btn btn-xs btn-success", "name": "success"},
{"type":"button", "class": "btn btn-xs btn-info", "name": "information"},
{"type":"button", "class": "btn btn-xs btn-warning", "name": "warning"},
{"type":"button", "class": "btn btn-xs btn-danger", "name": "danger"}
]
]
}
LogStatus("`" + json.dumps(table) + "`")
void main() {
json table = R"({
"type": "table",
"title": "status bar button style",
"cols": ["default", "raw", "success", "information", "warning", "danger"],
"rows": [
[
{"type":"button", "class": "btn btn-xs btn-default", "name": "default"},
{"type":"button", "class": "btn btn-xs btn-primary", "name": "raw"},
{"type":"button", "class": "btn btn-xs btn-success", "name": "success"},
{"type":"button", "class": "btn btn-xs btn-info", "name": "information"},
{"type":"button", "class": "btn btn-xs btn-warning", "name": "warning"},
{"type":"button", "class": "btn btn-xs btn-danger", "name": "danger"}
]
]
})"_json;
LogStatus("`" + table.dump() + "`");
}
فنکشن کو یکجا کریںGetCommand()
اسٹیٹس بار بٹنوں کے انٹرایکٹو فنکشن کی تعمیر کے لئے:
function test1() {
Log("Call a custom function")
}
function main() {
while (true) {
var table = {
type: 'table',
title: 'operation',
cols: ['Column1', 'Column2', 'Action'],
rows: [
['a', '1', {
'type': 'button',
'cmd': "CoverAll",
'name': 'close position'
}],
['b', '1', {
'type': 'button',
'cmd': 10,
'name': 'Send value'
}],
['c', '1', {
'type': 'button',
'cmd': _D(),
'name': 'Call a function'
}],
['d', '1', {
'type': 'button',
'cmd': 'test1',
'name': 'Call a custom function'
}]
]
}
LogStatus(_D(), "\n", '`' + JSON.stringify(table) + '`')
var str_cmd = GetCommand()
if (str_cmd) {
Log("Received interactive data str_cmd:", "Types of:", typeof(str_cmd), "Value:", str_cmd)
if(str_cmd == "test1") {
test1()
}
}
Sleep(500)
}
}
import json
def test1():
Log("Call a custom function")
def main():
while True:
table = {
"type": "table",
"title": "Operation",
"cols": ["Column1", "Column2", "Action"],
"rows": [
["a", "1", {
"type": "button",
"cmd": "CoverAll",
"name": "close position"
}],
["b", "1", {
"type": "button",
"cmd": 10,
"name": "Send value"
}],
["c", "1", {
"type": "button",
"cmd": _D(),
"name": "Call a function"
}],
["d", "1", {
"type": "button",
"cmd": "test1",
"name": "Call a custom function"
}]
]
}
LogStatus(_D(), "\n", "`" + json.dumps(table) + "`")
str_cmd = GetCommand()
if str_cmd:
Log("Received interactive data str_cmd", "Types:", type(str_cmd), "Value:", str_cmd)
if str_cmd == "test1":
test1()
Sleep(500)
void test1() {
Log("Call a custom function");
}
void main() {
while(true) {
json table = R"({
"type": "table",
"title": "Operation",
"cols": ["Column1", "Column2", "Action"],
"rows": [
["a", "1", {
"type": "button",
"cmd": "CoverAll",
"name": "close position"
}],
["b", "1", {
"type": "button",
"cmd": 10,
"name": "Send value"
}],
["c", "1", {
"type": "button",
"cmd": "",
"name": "Call a function"
}],
["d", "1", {
"type": "button",
"cmd": "test1",
"name": "Call a custom function"
}]
]
})"_json;
table["rows"][2][2]["cmd"] = _D();
LogStatus(_D(), "\n", "`" + table.dump() + "`");
auto str_cmd = GetCommand();
if(str_cmd != "") {
Log("Received interactive data str_cmd", "Type:", typeid(str_cmd).name(), "Value:", str_cmd);
if(str_cmd == "test1") {
test1();
}
}
Sleep(500);
}
}
جب انٹرایکشن کے لئے ایک حالت بار بٹن کی تعمیر، ان پٹ کے اعداد و شمار بھی حمایت کی جاتی ہے، اور انٹرایکٹو کمانڈ بالآخر کی طرف سے قبضہ کر لیا جاتا ہےGetCommand()
فنکشن.
شامل کرنے کے لئے ایکinput
حالت بار میں ایک بٹن کنٹرول کے اعداد و شمار کی ساخت کے لئے آئٹم، مثال کے طور پر، شامل کریں"input": {"name": "Number of opening orders", "type": "number", "defValue": 1}
کرنے کے لئے{"type": "button", "cmd": "open", "name": "open position"}
، آپ بٹن پر کلک کرنے پر ان پٹ باکس کنٹرول کے ساتھ ایک ڈائیلاگ باکس پاپ اپ کر سکتے ہیں (ان پٹ باکس میں ڈیفالٹ ویلیو 1 ہے ، جو 111
ان پٹ باکس میں اور GetCommand
فنکشن پیغام کو پکڑ لے گا:open:111
.
function main() {
var tbl = {
type: "table",
title: "operation",
cols: ["column 1", "column2"],
rows: [
["Open position operation", {"type": "button", "cmd": "open", "name": "open position", "input": {"name": "number of opening positions", "type": "number", "defValue": 1}}],
["Close position operation", {"type": "button", "cmd": "coverAll", "name": "close all positions"}]
]
}
LogStatus(_D(), "\n", "`" + JSON.stringify(tbl) + "`")
while (true) {
var cmd = GetCommand()
if (cmd) {
Log("cmd:", cmd)
}
Sleep(1000)
}
}
import json
def main():
tbl = {
"type": "table",
"title": "operation",
"cols": ["column 1", "column 2"],
"rows": [
["Open position operation", {"type": "button", "cmd": "open", "name": "open position", "input": {"name": "number of opening positions", "type": "number", "defValue": 1}}],
["Close position operation", {"type": "button", "cmd": "coverAll", "name": "close all positions"}]
]
}
LogStatus(_D(), "\n", "`" + json.dumps(tbl) + "`")
while True:
cmd = GetCommand()
if cmd:
Log("cmd:", cmd)
Sleep(1000)
void main() {
json tbl = R"({
"type": "table",
"title": "operation",
"cols": ["column 1", "column 2"],
"rows": [
["Open position operation", {"type": "button", "cmd": "open", "name": "open position", "input": {"name": "number of opening positions", "type": "number", "defValue": 1}}],
["Close position operation", {"type": "button", "cmd": "coverAll", "name": "close all positions"}]
]
})"_json;
LogStatus(_D(), "\n", "`" + tbl.dump() + "`");
while(true) {
auto cmd = GetCommand();
if(cmd != "") {
Log("cmd:", cmd);
}
Sleep(1000);
}
}
کی طرف سے تیار ٹیبل میں خلیات کو یکجا کریںLogStatus(Msg)
فنکشن:
افقی ضم
function main() {
var table = {
type: 'table',
title: 'position operation',
cols: ['Column1', 'Column2', 'Action'],
rows: [
['abc', 'def', {'type':'button', 'cmd': 'coverAll', 'name': 'close position'}]
]
}
var ticker = exchange.GetTicker()
// Add a row of data, merge the first and second cells, and output the ticker variable in the merged cell
table.rows.push([{body : JSON.stringify(ticker), colspan : 2}, "abc"])
LogStatus('`' + JSON.stringify(table) + '`')
}
import json
def main():
table = {
"type" : "table",
"title" : "position operation",
"cols" : ["Column1", "Column2", "Action"],
"rows" : [
["abc", "def", {"type": "button", "cmd": "coverAll", "name": "close position"}]
]
}
ticker = exchange.GetTicker()
table["rows"].append([{"body": json.dumps(ticker), "colspan": 2}, "abc"])
LogStatus("`" + json.dumps(table) + "`")
void main() {
json table = R"({
"type" : "table",
"title" : "position operation",
"cols" : ["Column1", "Column2", "Action"],
"rows" : [