ایجاد کنندہ کیوٹیفکیشن API دستاویزات

مصنف:چھوٹا سا خواب, تخلیق: 2017-11-27 09:05:08، تازہ کاری: 2023-07-12 16:47:31

void main() {
    Mail("smtp.163.com", "asdf@163.com", "password", "111@163.com", "title", "body");
}
  • Mailفنکشن کا غیر مطابقت پذیر ورژنMail_Goفنکشن: استعمال اورexchange.Goفنکشن اسی طرح کا ہے۔

    function main() {
        var r1 = Mail_Go("smtp.163.com", "asdf@163.com", "password", "111@163.com", "title", "body")
        var r2 = Mail_Go("smtp.163.com", "asdf@163.com", "password", "111@163.com", "title", "body")
        
        var ret1 = r1.wait()
        var ret2 = r2.wait()
        
        Log("ret1:", ret1)
        Log("ret2:", ret2)
    }
    
    # 不支持
    
    // 不支持
    

نوٹ: علی کلاؤڈ سرور کچھ بندرگاہوں کو بند کر سکتا ہے، جس کی وجہ سے ای میلز بھیجنے کے قابل نہیں ہوسکتے ہیں۔ اگر بندرگاہ کو تبدیل کرنے کی ضرورت ہو تو، براہ راست پہلی پیرامیٹر میں بندرگاہ کا نام شامل کیا جاسکتا ہے، مثال کے طور پر:smtp.qq.com:587یہ پورٹ ٹیسٹ دستیاب ہے۔ اگر کوئی غلطی ہو تو:unencryped connectionتبدیلی کی ضرورت ہےMailفنکشن کیsmtpServerآپ کے لئے یہ ایک بہت اچھا طریقہ ہے.ssl://xxx.com:xxxمثال کے طور پر، QQ ای میلSMTPایس ایس ایل کا طریقہ:ssl://smtp.qq.com:465یاsmtp://xxx.com:xxx

SetErrorFilter(...)

SetErrorFilter(RegEx)، فلٹرنگ غلطی لاگت۔؛ متبادل قدر: سٹرنگ کی قسم۔؛ اس باقاعدہ اظہار سے ملنے والے غلطی والے نوشتہ جات کو نوشتہ جات کے نظام میں اپ لوڈ نہیں کیا جائے گا ، اور متعدد فلٹرنگ کی شرائط کو کئی بار بلایا جاسکتا ہے (جس میں فلٹر شدہ نوشتہ جات کو میزبان ڈائریکٹری میں ڈیجیٹل ڈسک ID کے مطابق ڈیٹا بیس فائلوں میں نہیں لکھا جاتا ہے ، تاکہ کثرت سے غلطیوں کو روکنے سے ڈیٹا بیس فائلوں میں اضافہ نہ ہو) ۔

function main() {
    SetErrorFilter("502:|503:|tcp|character|unexpected|network|timeout|WSARecv|Connect|GetAddr|no such|reset|http|received|EOF|reused")
}
def main():
    SetErrorFilter("502:|503:|tcp|character|unexpected|network|timeout|WSARecv|Connect|GetAddr|no such|reset|http|received|EOF|reused")
void main() {
    SetErrorFilter("502:|503:|tcp|character|unexpected|network|timeout|WSARecv|Connect|GetAddr|no such|reset|http|received|EOF|reused");
}

ایک انٹرفیس غلطی کے پیغام کو فلٹر کرنے کے لئے:

function main() {
    // 随便查询一个不存在的订单,id为123,故意让接口报错
    var order = exchange.GetOrder("123")
    Log(order)
    // 过滤http502错误、GetOrder接口错误,设置错误过滤之后,第二次调用GetOrder不再报错
    SetErrorFilter("502:|GetOrder")
    order = exchange.GetOrder("123")
    Log(order)
}
def main():
    order = exchange.GetOrder("123")
    Log(order)
    SetErrorFilter("502:|GetOrder")
    order = exchange.GetOrder("123")
    Log(order)
void main() {
    TId orderId;
    Order order = exchange.GetOrder(orderId);
    Log(order);
    SetErrorFilter("502:|GetOrder");
    order = exchange.GetOrder(orderId);
    Log(order);
}

GetPid ((()

GetPid()، ریئل ڈسک کے عمل کی شناخت لوٹاتا ہے۔؛ واپسی کی قیمت: سٹرنگ کی قسم۔؛

function main(){
    var id = GetPid()
    Log(id)
}
def main():
    id = GetPid()
    Log(id)
void main() {
    auto id = GetPid();
    Log(id);
}

GetLastError()

GetLastError()، تازہ ترین غلطی کی معلومات حاصل کرتا ہے۔ عام طور پر اس کا استعمال کرنے کی ضرورت نہیں ہے کیونکہ پروگرام غلطی کی معلومات کو خود بخود لاگ سسٹم میں اپ لوڈ کرتا ہے۔GetLastError()اس کے بعد فنکشن کیشے کو صاف کرتا ہے اور جب اسے دوبارہ بلایا جاتا ہے تو وہ پچھلے ریکارڈ کی غلط معلومات واپس نہیں کرتا ہے۔

function main(){
    // 因为不存在编号为123的订单,所以会出错
    exchange.GetOrder("123")
    var error = GetLastError()
    Log(error)
}
def main():
    exchange.GetOrder("123")
    error = GetLastError()
    Log(error)
void main() {
    // 订单ID类型:TId,所以不能传入字符串,我们下一个不符合交易所规范的订单来触发
    exchange.GetOrder(exchange.Buy(1, 1));
    auto error = GetLastError();
    Log(error);
}

کمانڈ حاصل کریں

GetCommand()، انٹرایکٹو کمانڈ سٹرنگ ((utf-8) حاصل کریں۔ پالیسی انٹرایکٹو انٹرفیس سے بھیجے گئے کمانڈ کو حاصل کریں اور خالی کیشے کو خالی کریں ، کوئی کمانڈ خالی سٹرنگ واپس نہیں آتی ہے۔ واپس آنے والے کمانڈ کی شکل یہ ہے按钮名称:参数اگر انٹرایکٹو کنٹرولر میں کوئی پیرامیٹر نہیں ہے (مثال کے طور پر ایک بٹن کنٹرولر جس میں ان پٹ باکس نہیں ہے) تو کمانڈ بٹن کا نام ہے۔

function main(){
    while(true) { 
        var cmd = GetCommand()
        if (cmd) { 
            Log(cmd)
        }
        Sleep(1000) 
    }
}
def main():
    while True:
        cmd = GetCommand()
        if cmd:
            Log(cmd)
        Sleep(1000)
void main() {
    while(true) {
        auto cmd = GetCommand();
        if(cmd != "") {
            Log(cmd);
        }
        Sleep(1000);
    }
}

بنیادی نظام میں ایک قطار کی ساخت ہے جو تعامل کے احکامات کو ریکارڈ کرتی ہے، جبGetCommand()جب فنکشن کو بلایا جاتا ہے تو ، یہ قطار میں سب سے پہلے داخل ہونے والے انٹرایکٹو کمانڈ کو نکالتا ہے ((اگر کوئی انٹرایکٹو کمانڈ نہیں ہے تو خالی سٹرنگ واپس کرتا ہے) ؛)

انٹرایکٹو کنٹرولز کے استعمال کی مثالیں، حکمت عملی ایڈیٹر انٹرفیس انٹرایکٹو کنٹرولز قائم کرنے کے لئے.

img

اس کی حکمت عملی میں انٹرایکٹو کوڈ ڈیزائن کرنا شامل ہے:

function main() {
    while (true) {
        LogStatus(_D())
        var cmd = GetCommand()
        if (cmd) {
            Log("cmd:", cmd)    
            var arr = cmd.split(":")
            if (arr[0] == "buy") {
                Log("买入,该控件不带数量")
            } else if (arr[0] == "sell") {
                Log("卖出,该控件带数量:", arr[1])
            } else {
                Log("其它控件触发:", arr)
            }
        }
        Sleep(1000)
    } 
}
def main():
    while True:
        LogStatus(_D())
        cmd = GetCommand()
        if cmd:
            Log("cmd:", cmd)
            arr = cmd.split(":")
            if arr[0] == "buy":
                Log("买入,该控件不带数量")
            elif arr[0] == "sell":
                Log("卖出,该控件带数量:", arr[1])
            else:
                Log("其它控件触发:", arr)
        Sleep(1000)
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
void split(const string& s,vector<string>& sv,const char flag = ' ') {
    sv.clear();
    istringstream iss(s);
    string temp;

    while (getline(iss, temp, flag)) {
        sv.push_back(temp);
    }
    return;
}

void main() {
    while(true) {
        LogStatus(_D());
        auto cmd = GetCommand();
        if (cmd != "") {
            vector<string> arr;
            split(cmd, arr, ':');
            if(arr[0] == "buy") {
                Log("买入,该控件不带数量");
            } else if (arr[0] == "sell") {
                Log("卖出,该控件带数量:", arr[1]);
            } else {
                Log("其它控件触发:", arr);
            }
        }
        Sleep(1000);
    }
}

GetMeta()

GetMeta()فنکشن رجسٹری کوڈ کو جنریٹر کی پالیسی میں لکھے گئے کو واپس کرتا ہےMetaاس کے بعد، آپ کو اس کے بعد اس کے بعد اس کے بعد اس کے بعد اس کے بعد اس کے بعد اس کے بعد اس کے بعد اس کے بعد اس کے بعد اس کے بعد اس کے بعد اس کے بعد اس کے بعد اس کے بعد اس کے بعد اس کے بعد اس کے بعد اس کے بعد اس کے بعد اس کے بعد اس کے بعد اس کے بعد اس کے بعد اس کے بعد اس کے بعد اس کے بعد اس کے بعد اس کے بعد اس کے بعد اس کے بعد اس کے بعد اس کے بعد اس کے بعد اس کے بعد درخواست کے منظرنامے ، جیسے حکمت عملی جس میں مختلف کرایہ داروں کے لئے فنڈز کی پابندی کی ضرورت ہے۔ نوٹ: رجسٹریشن کوڈ بنانے کے لئےMetaیہ فنکشن صرف ورچوئل ڈسک کے لئے ہے اور تازہ ترین میزبان کی ضرورت ہے۔ اگر پالیسی رجسٹری کوڈ تیار کرتے وقت میٹا ڈیٹا مقرر نہیں کیا گیا ہےGetMeta()خالی قدر لوٹاتا ہے۔

منظر نامے کا استعمال

function main() {
    // 策略允许的计价币最大资产数值
    var maxBaseCurrency = null
    
    // 获取创建注册码时的元数据
    var level = GetMeta()
    
    // 检测Meta对应的条件
    if (level == "level1") {
        // -1为不限制
        maxBaseCurrency = -1       
    } else if (level == "level2") {
        maxBaseCurrency = 10     
    } else if (level == "level3") {
        maxBaseCurrency = 1
    } else {
        maxBaseCurrency = 0.5
    }
    
    while(1) {
        Sleep(1000)
        var ticker = exchange.GetTicker()
        
        // 检测资产数值
        var acc = exchange.GetAccount()
        if (maxBaseCurrency != -1 && maxBaseCurrency < acc.Stocks + acc.FrozenStocks) {
            // 停止执行策略交易逻辑
            LogStatus(_D(), "level:", level, "持仓超过注册码的使用限定,不再执行策略交易逻辑!")
            continue
        }
        
        // 其它交易逻辑
        
        // 正常输出状态栏信息
        LogStatus(_D(), "level:", level, "策略正常运行!ticker数据:\n", ticker)
    }
}
def main():
    maxBaseCurrency = null
    level = GetMeta()
    
    if level == "level1":
        maxBaseCurrency = -1       
    elif level == "level2":
        maxBaseCurrency = 10     
    elif level == "level3":
        maxBaseCurrency = 1
    else:
        maxBaseCurrency = 0.5
    
    while True:
        Sleep(1000)
        ticker = exchange.GetTicker()        
        acc = exchange.GetAccount()
        if maxBaseCurrency != -1 and maxBaseCurrency < acc["Stocks"] + acc["FrozenStocks"]:
            LogStatus(_D(), "level:", level, "持仓超过注册码的使用限定,不再执行策略交易逻辑!")
            continue        
        
        # 其它交易逻辑
        
        # 正常输出状态栏信息
        LogStatus(_D(), "level:", level, "策略正常运行!ticker数据:\n", ticker)
void main() {
    auto maxBaseCurrency = 0.0;
    auto level = GetMeta();
    
    if (level == "level1") {
        maxBaseCurrency = -1;  
    } else if (level == "level2") {
        maxBaseCurrency = 10;
    } else if (level == "level3") {
        maxBaseCurrency = 1;
    } else {
        maxBaseCurrency = 0.5;
    }
    
    while(1) {
        Sleep(1000);
        auto ticker = exchange.GetTicker();  
        auto acc = exchange.GetAccount();
        if (maxBaseCurrency != -1 && maxBaseCurrency < acc.Stocks + acc.FrozenStocks) {
            // 停止执行策略交易逻辑
            LogStatus(_D(), "level:", level, "持仓超过注册码的使用限定,不再执行策略交易逻辑!");
            continue;
        }
        
        // 其它交易逻辑
        
        // 正常输出状态栏信息
        LogStatus(_D(), "level:", level, "策略正常运行!ticker数据:\n", ticker);
    }
}

ڈائل کریں

Dial(Address, Timeout)،پرائمریSocketرسائی، حمایتtcpudptlsunixپروٹوکول۔ پیرامیٹر کی قدر:Addressاسکرین شاٹ کے لئے،TimeOutعددی قسم کے لئے، عددی یونٹ سیکنڈ ہے، اگر وقت سے زیادہ ہےDial(...)فنکشن خالی قدر واپس کرتا ہے۔

Addressپیرامیٹرز کی تفصیلات:

پیرامیٹرز کی وضاحت
سیٹنگDialفنکشن کے پیرامیٹرز اس کے علاوہ، آپ کو اس کے بارے میں مزید جاننے کی ضرورت ہے:wss://ws.okx.com:8443/ws/v5/publicبعد میں|علامت الگ، اگر آپ کے پاس ایک عدد کی تار ہے|حروف،||الگ الگ علامت کے طور پر استعمال کیا جاتا ہے۔&حروف کا تعلق۔ مثال کے طور پر ، ss5 ایجنٹ اور کمپریشن پیرامیٹرز ایک ساتھ ترتیب دیئے گئے ہیں:Dial("wss://ws.okx.com:8443/ws/v5/public|proxy=socks5://xxx:9999&compress=gzip_raw&mode=recv")
ڈبلیو ایس پروٹوکول میں استعمال ہونے پر ، ڈیٹا کمپریشن سے متعلق پیرامیٹرز:compress=参数值 compress کمپریشن موڈ، کمپریس پیرامیٹرز، اختیاریgzip_rawgzipمثال کے طور پر؛ اگر gzip طریقہ غیر معیاری gzip ہے تو ، توسیع کا طریقہ استعمال کیا جاسکتا ہے۔gzip_rawاور یہ ایک الگ علامت ہے|بعد میں شامل کریںcompress=gzip_raw، استعمال کریں&علامت اور اگلے موڈ پیرامیٹر کو الگ کریں۔
ڈبلیو ایس پروٹوکول میں استعمال ہونے پر ، ڈیٹا کمپریشن سے متعلق پیرامیٹرز:mode=参数值 موڈ کے لئے موڈ، اختیاریdualsendrecvتین قسمیں ہیں۔dualدو طرفہ ، کمپریشن ڈیٹا بھیجنے اور کمپریشن ڈیٹا وصول کرنے کے لئے۔sendاس کا مطلب یہ ہے کہ آپ کو اس کا استعمال کرنے کی ضرورت نہیں ہے.recvکمپریشن کے اعداد و شمار کو حاصل کرنے کے لئے مقامی طور پر کمپریشن کو ختم کریں۔
socks5 ایجنٹ کو ترتیب دینے کے لئے متعلقہ پیرامیٹر:proxy=参数值 پروسیسی ایس ایس 5 ایجنٹ کے لئے مقرر کیا گیا ہے، پیرامیٹر کی قدر کی شکل:socks5://name:pwd@192.168.0.1:1080، نام ایس ایس 5 سرور ٹرم صارف نام ہے ، پی ڈبلیو ڈی ایس ایس 5 سرور ٹرم لاگ ان پاس ورڈ ہے ، اور 1080 ایس ایس 5 سروس پورٹ ہے۔
ڈبلیو ایس پروٹوکول کے ساتھ استعمال کرتے وقت ، بنیادی طور پر خود کار طریقے سے دوبارہ جوڑنے سے متعلق پیرامیٹرز مرتب کریں:reconnect=参数值 reconnect کا مطلب ہے کہ دوبارہ رابطہ قائم کیا گیا ہے یا نہیں۔reconnect=trueدوبارہ جوڑنے کو چالو کرنے کے لئے. جب یہ پیرامیٹر مقرر نہیں کیا گیا ہے تو ، ڈیفالٹ کے ذریعہ دوبارہ جوڑ نہ کریں۔
ڈبلیو ایس پروٹوکول کے ساتھ استعمال کرتے وقت ، بنیادی طور پر خود کار طریقے سے دوبارہ جوڑنے سے متعلق پیرامیٹرز مرتب کریں:interval=参数值 interval دوبارہ جانچ کے وقت کے وقفے کے لئے، یونٹ ملی سیکنڈ،interval=1000010 سیکنڈ کے وقفے پر دوبارہ کوشش کرنے کے لئے ، پہلے سے طے شدہ 1 سیکنڈ کو نہیں ، یعنیinterval=1000
ڈبلیو ایس پروٹوکول کے ساتھ استعمال کرتے وقت ، بنیادی طور پر خود کار طریقے سے دوبارہ جوڑنے سے متعلق پیرامیٹرز مرتب کریں:payload=参数值 جب payloads کو دوبارہ لنک کیا جاتا ہے تو سبسکرپشن کے پیغامات بھیجنے کی ضرورت ہوتی ہے ، جیسے:payload=okok
function main(){
    // Dial支持tcp://,udp://,tls://,unix://协议,可加一个参数指定超时的秒数
    var client = Dial("tls://www.baidu.com:443")  
    if (client) {
        // write可再跟一个数字参数指定超时,write返回成功发送的字节数
        client.write("GET / HTTP/1.1\nConnection: Closed\n\n")
        while (true) {
            // read可再跟一个数字参数指定超时,单位:毫秒。返回null指出错或者超时或者socket已经关闭
            var buf = client.read()
            if (!buf) {
                 break
            }
            Log(buf)
        }
        client.close()
    }
}
def main():
    client = Dial("tls://www.baidu.com:443")
    if client:
        client.write("GET / HTTP/1.1\nConnection: Closed\n\n")
        while True:
            buf = client.read()
            if not buf:
                break
            Log(buf)
        client.close()
void main() {
    auto client = Dial("tls://www.baidu.com:443");
    if(client.Valid) {
        client.write("GET / HTTP/1.1\nConnection: Closed\n\n");
        while(true) {
            auto buf = client.read();
            if(buf == "") {
                break;
            }
            Log(buf);
        }
        client.close();
    }
}

readفنکشن مندرجہ ذیل پیرامیٹرز کی حمایت کرتا ہے:

  • جب کوئی پیرامیٹر منتقل نہیں ہوتا ہے تو ، جب تک کوئی پیغام موجود نہیں ہوتا ہے تب تک بلاک ہوجاتا ہے۔ مثال کے طور پر:ws.read()
  • جب پیرامیٹرز کو منتقل کیا جاتا ہے تو ، یونٹ ملی سیکنڈ میں ہوتا ہے ، پیغام کا انتظار کرنے کا وقت مقرر کرتا ہے۔ مثال کے طور پر:ws.read(2000)مقررہ ٹائم آؤٹ وقت دو سیکنڈ ((2000 ملی سیکنڈ) ہے.
  • مندرجہ ذیل دو پیرامیٹرز صرف درست ہیںwebsocketمؤثر: ان پٹ پیرامیٹرز-1اس کا مطلب یہ ہے کہ اگر کوئی پیغام موجود ہے یا نہیں تو ، فنکشن فوری طور پر واپس آجاتا ہے۔ مثال کے طور پر:ws.read(-1)◄ ان پٹ پیرامیٹرز-2اس کا مطلب یہ ہے کہ اگر کوئی پیغام نہیں ہے تو ، فنکشن فوری طور پر واپس آجاتا ہے ، لیکن صرف تازہ ترین پیغام واپس کرتا ہے ، اور بفر والے پیغام کو چھوڑ دیا جاتا ہے۔ مثال کے طور پر:ws.read(-2)

read()فنکشن کی بُفنگ کی وضاحت: ws پروٹوکول کی طرف سے آگے بڑھا دیا گیا ہے کہ اعداد و شمار، اگر پالیسی میںread()فنکشن کالز کے درمیان وقت کا وقفہ بہت لمبا ہو سکتا ہے، جس سے ڈیٹا کی جمع ہوسکتی ہے۔ یہ ڈیٹا ایک بفر زون میں ذخیرہ کیا جاتا ہے، جس میں بفر زون ڈیٹا کی ساخت قطار کی شکل میں ہوتی ہے، جس میں 2000 کی حد ہوتی ہے۔ 2000 سے زیادہ ہونے کے بعد، تازہ ترین ڈیٹا بفر زون میں داخل ہوتا ہے، اور پرانے ڈیٹا کو صاف کیا جاتا ہے۔

مناظرreadفنکشن کے پیرامیٹرز کوئی پیرامیٹر نہیں پیرامیٹرز: -1 پیرامیٹر: -2 پیرامیٹر: 2000، یونٹ ملی سیکنڈ ہے
بُفر زون کے اعداد و شمار دستیاب ہیں تازہ ترین اعداد و شمار کو فوری طور پر واپس تازہ ترین اعداد و شمار کو فوری طور پر واپس فوری طور پر تازہ ترین اعداد و شمار واپس تازہ ترین اعداد و شمار کو فوری طور پر واپس
کوئی ڈیٹا نہیں جب تک کوئی ڈیٹا موجود نہ ہو واپس آنے کے لیے بلاک کریں۔ فوری طور پر خالی لوٹاتا ہے فوری طور پر خالی لوٹاتا ہے 2000 ملی سیکنڈ انتظار کریں، کوئی ڈیٹا واپس نہیں آئے گا، کچھ ڈیٹا واپس آئے گا
ws کنکشن ٹوٹ جاتا ہے یا نیچے دوبارہ منسلک ہوتا ہے read (() فنکشن خالی سٹرنگ لوٹاتا ہے ، یعنی:"، "write (() فنکشن 0 لوٹاتا ہے ، اس صورت حال کا پتہ چلتا ہے۔ آپ بند کرنے کے لئے بند کر سکتے ہیں close (() فنکشن ، اگر خود کار طریقے سے دوبارہ رابطہ قائم کیا گیا ہے تو بند کرنے کی ضرورت نہیں ہے ، نظام کی بنیاد خود کار طریقے سے دوبارہ رابطہ قائم کرے گی۔
  • حمایت wss ((WebSocket) پروٹوکول بائننس کے ویب ساکٹ مارکیٹ انٹرفیس پر جائیں:

    function main() {
        LogStatus("正在连接...")
        // 访问币安的websocket接口
        var client = Dial("wss://stream.binance.com:9443/ws/!ticker@arr")
        if (!client) {
            Log("连接失败, 程序退出")
            return
        }
        
        while (true) {
            // read只返回调用read之后获取的数据
            var buf = client.read()      
            if (!buf) {
                break
            }
            var table = {
                type: 'table',
                title: '行情图表',
                cols: ['币种', '最高', '最低', '买一', '卖一', '最后成交价', '成交量', '更新时间'],
                rows: []
            }
            var obj = JSON.parse(buf)
            _.each(obj, function(ticker) {
                table.rows.push([ticker.s, ticker.h, ticker.l, ticker.b, ticker.a, ticker.c, ticker.q, _D(ticker.E)])
            })
            LogStatus('`' + JSON.stringify(table) + '`')
        }
        client.close()
    }
    
    import json
    def main():
        LogStatus("正在连接...")
        client = Dial("wss://stream.binance.com:9443/ws/!ticker@arr")
        if not client:
            Log("连接失败, 程序退出")
            return 
        
        while True:
            buf = client.read()
            if not buf:
                break
            table = {
                "type" : "table", 
                "title" : "行情图表", 
                "cols" : ["币种", "最高", "最低", "买一", "卖一", "最后成交价", "成交量", "更新时间"], 
                "rows" : [] 
            }
            obj = json.loads(buf)
            for i in range(len(obj)):
                table["rows"].append([obj[i]["s"], obj[i]["h"], obj[i]["l"], obj[i]["b"], obj[i]["a"], obj[i]["c"], obj[i]["q"], _D(int(obj[i]["E"]))])
            LogStatus('`' + json.dumps(table) + '`')
        client.close()
    
    void main() {
        LogStatus("正在连接...");
        auto client = Dial("wss://stream.binance.com:9443/ws/!ticker@arr");
        if(!client.Valid) {
            Log("连接失败, 程序退出");
            return;
        }
        
        while(true) {
            auto buf = client.read();
            if(buf == "") {
                break;
            }
            json table = R"({
                "type" : "table", 
                "title" : "行情图表", 
                "cols" : ["币种", "最高", "最低", "买一", "卖一", "最后成交价", "成交量", "更新时间"], 
                "rows" : []
            })"_json;
            json obj = json::parse(buf);
            for(auto& ele : obj.items()) {
                table["rows"].push_back({ele.value()["s"], ele.value()["h"], ele.value()["l"], ele.value()["b"], ele.value()["a"], ele.value()["c"], 
                    ele.value()["q"], _D(ele.value()["E"])});
            }
            LogStatus("`" + table.dump() + "`");
        }
        client.close();
    }
    

    او کے ایکس کے ویب ساکٹ مارکیٹ انٹرفیس تک رسائی حاصل کریں:

    var ws = null 
    function main(){
        var param = {
            "op": "subscribe",
            "args": [{
                "channel": "tickers",
                "instId": "BTC-USDT"
            }]
        }
        // 在调用Dial函数时,指定reconnect=true即设置为重连模式,指定payload即为重连时发送的消息。在websocket连接断开后,会自动重连,自动发送消息
        ws = Dial("wss://ws.okx.com:8443/ws/v5/public|compress=gzip_raw&mode=recv&reconnect=true&payload="+ JSON.stringify(param))
        if(ws){
            var pingCyc = 1000 * 20
            var lastPingTime = new Date().getTime()
            while(true){
                var nowTime = new Date().getTime()
                var ret = ws.read()
                Log("ret:", ret)
                if(nowTime - lastPingTime > pingCyc){
                    var retPing = ws.write("ping")
                    lastPingTime = nowTime
                    Log("发送 :ping", "#FF0000")
                }
                LogStatus("当前时间:", _D())
                Sleep(1000)
            }
        }
    }  
    
    function onexit() {
        ws.close() 
        Log("退出")
    }
    
    import json
    import time  
    
    ws = None
    def main():
        global ws 
        param = {
            "op": "subscribe",
            "args": [{
                "channel": "tickers",
                "instId": "BTC-USDT"
            }]
        }
        ws = Dial("wss://ws.okx.com:8443/ws/v5/public|compress=gzip_raw&mode=recv&reconnect=true&payload=" + json.dumps(param))
        if ws:
            pingCyc = 1000 * 20
            lastPingTime = time.time() * 1000
            while True:
                nowTime = time.time() * 1000
                ret = ws.read()
                Log("ret:", ret)
                if nowTime - lastPingTime > pingCyc:
                    retPing = ws.write("ping")
                    lastPingTime = nowTime
                    Log("发送:ping", "#FF0000")
                LogStatus("当前时间:", _D())
                Sleep(1000)  
    
    def onexit():
        ws.close()
        Log("退出")
    
    auto objWS = Dial("wss://ws.okx.com:8443/ws/v5/public|compress=gzip_raw&mode=recv&reconnect=true");  
    
    void main() {
        json param = R"({
            "op": "subscribe",
            "args": [{
                "channel": "tickers",
                "instId": "BTC-USDT"
            }]
        })"_json;
        
        objWS.write(param.dump());
        if(objWS.Valid) {
            uint64_t pingCyc = 1000 * 20;
            uint64_t lastPingTime = Unix() * 1000;
            while(true) {
                uint64_t nowTime = Unix() * 1000;
                auto ret = objWS.read();
                Log("ret:", ret);
                if(nowTime - lastPingTime > pingCyc) {
                    auto retPing = objWS.write("ping");
                    lastPingTime = nowTime;
                    Log("发送:ping", "#FF0000");
                }
                LogStatus("当前时间:", _D());
                Sleep(1000);
            }
        }
    }  
    
    void onexit() {
        objWS.close();
        Log("退出");
    }
    

    ٹوکن تک رسائی کے لئے ویب ساکٹ مارکیٹ انٹرفیس:

    var ws = null   
    
    function main(){
        var param = {"sub": "market.btcusdt.detail", "id": "id1"}
        ws = Dial("wss://api.huobi.pro/ws|compress=gzip&mode=recv&reconnect=true&payload="+ JSON.stringify(param))
        if(ws){
            while(1){
                var ret = ws.read()
                Log("ret:", ret)
                // 响应心跳包操作
                try {
                    var jsonRet = JSON.parse(ret)
                    if(typeof(jsonRet.ping) == "number") {
                        var strPong = JSON.stringify({"pong" : jsonRet.ping})
                        ws.write(strPong)
                        Log("响应ping,发送pong:", strPong, "#FF0000")
                    }
                } catch(e) {
                    Log("e.name:", e.name, "e.stack:", e.stack, "e.message:", e.message)
                }
                
                LogStatus("当前时间:", _D())
                Sleep(1000)
            }
        }
    }  
    
    function onexit() {
        ws.close() 
        Log("执行ws.close()函数")
    }
    
    import json
    ws = None  
    
    def main():
        global ws
        param = {"sub" : "market.btcusdt.detail", "id" : "id1"}
        ws = Dial("wss://api.huobi.pro/ws|compress=gzip&mode=recv&reconnect=true&payload=" + json.dumps(param))
        if ws:
            while True:
                ret = ws.read()
                Log("ret:", ret)              
                # 响应心跳包操作
                try:
                    jsonRet = json.loads(ret)
                    if "ping" in jsonRet and type(jsonRet["ping"]) == int:
                        strPong = json.dumps({"pong" : jsonRet["ping"]})
                        ws.write(strPong)
                        Log("响应ping,发送pong:", strPong, "#FF0000")
                except Exception as e:
                    Log("e:", e)
                    
                LogStatus("当前时间:", _D())
                Sleep(1000)
        
    def onexit():
        ws.close()
        Log("执行ws.close()函数")  
    
    using namespace std;
    void main() {
        json param = R"({"sub" : "market.btcusdt.detail", "id" : "id1"})"_json;
        auto ws = Dial("wss://api.huobi.pro/ws|compress=gzip&mode=recv&reconnect=true&payload=" + param.dump());
        if(ws.Valid) {
            while(true) {
                auto ret = ws.read();
                Log("ret:", ret);              
                // 响应心跳包操作
                try 
                {
                    auto jsonRet = json::parse(ret);
                    if(jsonRet["ping"].is_number()) {
                        json pong = R"({"pong" : 0})"_json;
                        pong["pong"] = jsonRet["ping"];
                        auto strPong = pong.dump();
                        ws.write(strPong);
                        Log("响应ping,发送pong:", strPong, "#FF0000");
                    }
                } catch(exception &e) 
                {
                    Log("e:", e.what());
                }
                
                LogStatus("当前时间:", _D());
                Sleep(1000);
            }
        }
    }  
    
    void onexit() {
        // ws.close();
        Log("执行ws.close()函数");
    }
    

    OKX کے لئے ویب ساکٹ کی توثیق انٹرفیس تک رسائی:

    function getLogin(pAccessKey, pSecretKey, pPassphrase) {
        // 签名函数,用于登录
        var ts = (new Date().getTime() / 1000).toString()
        var login = {
            "op": "login",
            "args":[{
                "apiKey"    : pAccessKey,
                "passphrase" : pPassphrase,
                "timestamp" : ts,
                "sign" : exchange.HMAC("sha256", "base64", ts + "GET" + "/users/self/verify", pSecretKey)
            }]
        }    
        return login
    }    
    
    var client_private = null 
    function main() {
        // 因为read函数使用了超时设置,过滤超时的报错,否则会有冗余错误输出
        SetErrorFilter("timeout")
        
        // 持仓频道订阅信息
        var posSubscribe = {
            "op": "subscribe",
            "args": [{
                "channel": "positions",
                "instType": "ANY"
            }]
        }    
    
        var accessKey = "xxx"
        var secretKey = "xxx"
        var passphrase = "xxx"
    
        client_private = Dial("wss://ws.okx.com:8443/ws/v5/private")
        client_private.write(JSON.stringify(getLogin(accessKey, secretKey, passphrase)))
        Sleep(3000)  // 登录时,不能立即订阅私有频道,需要等待服务器反应
        client_private.write(JSON.stringify(posSubscribe))
        if (client_private) {
            var lastPingTS = new Date().getTime()
            while (true) {
                var buf = client_private.read(-1)
                if (buf) {
                    Log(buf)
                }
                
                // 检测断开,重连
                if (buf == "" && client_private.write(JSON.stringify(posSubscribe)) == 0) {
                    Log("检测到断开,关闭连接,重连")
                    client_private.close()
                    client_private = Dial("wss://ws.okx.com:8443/ws/v5/private")
                    client_private.write(JSON.stringify(getLogin(accessKey, secretKey, passphrase)))
                    Sleep(3000)
                    client_private.write(JSON.stringify(posSubscribe))
                }
                
                // 发送心跳包
                var nowPingTS = new Date().getTime()
                if (nowPingTS - lastPingTS > 10 * 1000) {
                    client_private.write("ping")
                    lastPingTS = nowPingTS
                }            
            }        
        }
    }    
    
    function onexit() {    
        var ret = client_private.close()
        Log("关闭连接!", ret)
    }
    
    import json
    import time
      
    def getLogin(pAccessKey, pSecretKey, pPassphrase):
        ts = str(time.time())
        login = {
            "op": "login",
            "args":[{
                "apiKey"    : pAccessKey,
                "passphrase" : pPassphrase,
                "timestamp" : ts,
                "sign" : exchange.HMAC("sha256", "base64", ts + "GET" + "/users/self/verify", pSecretKey)
            }]
        }
        return login     
    
    client_private = None 
    def main():
        global client_private
        SetErrorFilter("timeout")
        
        posSubscribe = {
            "op": "subscribe",
            "args": [{
                "channel": "positions",
                "instType": "ANY"
            }]
        }      
    
        accessKey = "xxx"
        secretKey = "xxx"
        passphrase = "xxx"
        
        client_private = Dial("wss://ws.okx.com:8443/ws/v5/private")
        client_private.write(json.dumps(getLogin(accessKey, secretKey, passphrase)))
        Sleep(3000)
        client_private.write(json.dumps(posSubscribe))
        if client_private:
            lastPingTS = time.time() * 1000
            while True:
                buf = client_private.read(-1)
                if buf:
                    Log(buf)
                
                if buf == "" and client_private.write(json.dumps(posSubscribe)) == 0:
                    Log("检测到断开,关闭连接,重连")
                    ret = client_private.close()
                    client_private = Dial("wss://ws.okx.com:8443/ws/v5/private")
                    client_private.write(json.dumps(getLogin(accessKey, secretKey, passphrase)))
                    Sleep(3000)
                    client_private.write(json.dumps(posSubscribe))
                
                nowPingTS = time.time() * 1000
                if nowPingTS - lastPingTS > 10 * 1000:
                    client_private.write("ping")
                    lastPingTS = nowPingTS    
    
    def onexit():
        ret = client_private.close()
        Log("关闭连接!", ret)
    
    auto client_private = Dial("wss://ws.okx.com:8443/ws/v5/private");      
    
    json getLogin(string pAccessKey, string pSecretKey, string pPassphrase) {
        auto ts = std::to_string(Unix());
        json login = R"({
            "op": "login",
            "args": [{
                "apiKey": "",
                "passphrase": "",
                "timestamp": "",
                "sign": ""
            }]
        })"_json;
        login["args"][0]["apiKey"] = pAccessKey;
        login["args"][0]["passphrase"] = pPassphrase;
        login["args"][0]["timestamp"] = ts;
        login["args"][0]["sign"] = exchange.HMAC("sha256", "base64", ts + "GET" + "/users/self/verify", pSecretKey);
        return login;
    }      
    
    void main() {
        SetErrorFilter("timeout");
        json posSubscribe = R"({
            "op": "subscribe",
            "args": [{
                "channel": "positions",
                "instType": "ANY"
            }]
        })"_json;
        
        auto accessKey = "xxx";
        auto secretKey = "xxx";
        auto passphrase = "xxx";
        
        client_private.write(getLogin(accessKey, secretKey, passphrase).dump());
        Sleep(3000);
        client_private.write(posSubscribe.dump());    
    
        if (client_private.Valid) {
            uint64_t lastPingTS = Unix() * 1000;      
    
            while (true) {
                auto buf = client_private.read(-1);
                if (buf != "") {
                    Log(buf);
                }
                if (buf == "") {
                    if (client_private.write(posSubscribe.dump()) == 0) {
                        Log("检测到断开,关闭连接,重连");
                        client_private.close();
                        client_private = Dial("wss://ws.okx.com:8443/ws/v5/private");
                        client_private.write(getLogin(accessKey, secretKey, passphrase).dump());
                        Sleep(3000);
                        client_private.write(posSubscribe.dump());
                    }
                }
                
                uint64_t nowPingTS = Unix() * 1000;
                if (nowPingTS - lastPingTS > 10 * 1000) {
                    client_private.write("ping");
                    lastPingTS = nowPingTS;
                }
            }
        }
    }      
    
    void onexit() {
        client_private.close();
        Log("退出");
    }
    

HttpQuery(...)

HttpQuery(Url, PostData, Cookies, Headers, IsReturnHeader)، نیٹ ورک یو آر ایل تک رسائی حاصل کریں۔ پیرامیٹر ویلیو: تمام سٹرنگ کی قسم کے لئے۔

نوٹ:

  • HttpQuery(...)صرف فنکشن کی حمایت کرتا ہےJavaScriptزبانوں کا استعمال۔
  • Pythonزبان استعمال کی جا سکتی ہےurllibاس کے علاوہ، آپ کو ایک ویب سائٹ بنانا ہے جو آپ کو ایک ویب سائٹ بناتا ہے.

HttpQuery(...)بنیادی طور پر تبادلے کے انٹرفیس تک رسائی کے لئے استعمال کیا جاتا ہے جس میں دستخط کی ضرورت نہیں ہوتی ہے ، جیسے مارکیٹنگ کی معلومات جیسے عوامی انٹرفیس۔

OKX تک رسائی حاصل کرنے کے لئے API انٹرفیس کا ایک مثال جس میں دستخط کی ضرورت نہیں ہے، جس کی قدر واپس آتی ہےJSONاس کے علاوہ، آپ کو اس کے بارے میں کیا سوچنا چاہئے؟JavaScriptزبان کی حکمت عملی میں استعمال کیا جا سکتا ہےJSON.parse()فنکشن تجزیہ۔

function main(){
    // 一个GET访问不带参数的例子
    var info = JSON.parse(HttpQuery("https://www.okx.com/api/v5/public/time"))
    Log(info)
    // 一个GET访问带参数的例子
    var ticker = JSON.parse(HttpQuery("https://www.okx.com/api/v5/market/books?instId=BTC-USDT"))
    Log(ticker)
}
import json
import urllib.request
def main():
    # HttpQuery不支持Python,可以使用urllib/urllib2库代替
    info = json.loads(urllib.request.urlopen("https://www.okx.com/api/v5/public/time").read().decode('utf-8'))
    Log(info)
    ticker = json.loads(urllib.request.urlopen("https://www.okx.com/api/v5/market/books?instId=BTC-USDT").read().decode('utf-8'))
    Log(ticker)
void main() {
    auto info = json::parse(HttpQuery("https://www.okx.com/api/v5/public/time"));
    Log(info);
    auto ticker = json::parse(HttpQuery("https://www.okx.com/api/v5/market/books?instId=BTC-USDT"));
    Log(ticker);
}

ایک URL کا مواد واپس کرنے کے لئے حاصل کریں، اگر دوسری شرطPostDataسٹرنگ کے لئےa=1&b=2&c=abcشکل میں،POSTجمع کرانے کا طریقہ۔ دیگر مثالیںPUTاس کے بعد آپ نے کیا کیا؟PostDataپیرامیٹر:{method:'PUT', data:'a=1&b=2&c=abc'}PostDataاور آپ یہ بھی کر سکتے ہیںJSONسٹرنگ۔

Cookiesاس کی شکل یہ ہے:a=10; b=20، ہر پیرامیٹرز کے لئے ایک نمبر ہے;میں نے اس کے بارے میں کیا سوچا؟Headersاس کی شکل یہ ہے:User-Agent: Mobile\nContent-Type: text/htmlپیرامیٹرز کے لئے نشان تبدیل کریں\nمیں نے اس کے بارے میں کیا سوچا؟

دوسرا پیرامیٹرPostDataآپ اپنی مرضی کے مطابق طریقے استعمال کر سکتے ہیں:HttpQuery("http://www.abc.com", {method:'PUT', data:'a=1&b=2&c=abc'})نوٹ: اگر ضرورت ہو توHttpQueryفنکشن سیٹ ٹائم ٹائم، میں کر سکتے ہیں{method:'PUT', data:'a=1&b=2&c=abc'}شمولیتtimeoutخاصیت ((پیش وضاحتی 60 سیکنڈ) ).

ایک سیکنڈ کی تاخیر:HttpQuery("http://www.abc.com", {method:'PUT', data:'a=1&b=2&c=abc', timeout:1000})

منتقل کرناCookieسٹرنگ کو تیسری شرط کی ضرورت ہے، لیکن اس کی ضرورت نہیں ہےPOSTبراہ کرم دوسرا پیرامیٹر خالی رکھیں۔ جب ہم آہنگی کی جانچ پڑتال کی جاتی ہے تو ، فنکشن ایک فکسڈ سٹرنگ واپس کرتا ہے کیونکہ ہم آہنگی یو آر ایل تک رسائی حاصل نہیں کرسکتی ہے۔Dummy Dataآپ اس انٹرفیس سے ٹیکسٹ پیغامات بھیج سکتے ہیں یا دوسرے API انٹرفیس کے ساتھ بات چیت کرسکتے ہیں۔

GETطریقہ کار کال کی مثالیں:HttpQuery("http://www.baidu.com")POSTطریقہ کار کال کی مثالیں:HttpQuery("http://www.163.com", "a=1&b=2&c=abc")

واپسHeaderاس کا استعمال کرتے ہوئے:

HttpQuery("http://www.baidu.com", null, "a=10; b=20", "User-Agent: Mobile\nContent-Type: text/html", true)  // will return {Header: HTTP Header, Body: HTML}
  • HttpQueryفنکشن کا استعمال کرتے ہوئے ایجنٹ کی ترتیبات:

    function main() {
        // 本次设置代理并发送http请求,无用户名,无密码,此次http请求会通过代理发送
        HttpQuery("socks5://127.0.0.1:8889/http://www.baidu.com/")
    
        // 本次设置代理并发送http请求,输入用户名和密码,仅HttpQuery当前调用生效,之后再次调用HttpQuery("http://www.baidu.com")这样不会使用代理
        HttpQuery("socks5://username:password@127.0.0.1:8889/http://www.baidu.com/")
    }
    
    # HttpQuery不支持Python,可以使用Python的urllib2库
    
    void main() {
        HttpQuery("socks5://127.0.0.1:8889/http://www.baidu.com/");
        HttpQuery("socks5://username:password@127.0.0.1:8889/http://www.baidu.com/");
    }
    
  • HttpQueryفنکشن کا غیر مطابقت پذیر ورژنHttpQuery_Goکیا آپ جانتے ہیں؟ استعمال اورexchange.Goافعال اسی طرح ہیں ، جیسے کہ غیر ہم آہنگ رسائی کے ساتھ تبادلہ کے عوامی انٹرفیس کو مجموعی طور پر مارکیٹ کے اعداد و شمار تک رسائی حاصل کرنا۔

    function main() {
        // 创建第一个异步线程
        var r1 = HttpQuery_Go("https://www.okx.com/api/v5/market/tickers?instType=SPOT")
        // 创建第二个异步线程
        var r2 = HttpQuery_Go("https://api.huobi.pro/market/tickers")
        
        // 获取第一个异步线程调用的返回值
        var tickers1 = r1.wait()
        // 获取第二个异步线程调用的返回值
        var tickers2 = r2.wait()
        
        // 打印结果
        Log("tickers1:", tickers1)
        Log("tickers2:", tickers2)
    }
    
    # 不支持
    
    // 不支持
    
  • ریویو سسٹم میں استعمالHttpQuery(...)فنکشن: ریویو سسٹم میں استعمال کیا جا سکتا ہےHttpQuery(...)درخواست بھیجیں ((صرف معاونت)GETدرخواست) ڈیٹا حاصل کریں۔ 20 بار مختلف یو آر ایل تک رسائی کی حد کو دوبارہ چیک کریں اورHttpQuery(...)ایک ہی یو آر ایل کا دوسرا دورہ کرتے وقت ڈیٹا کیش کیا جاتا ہےHttpQuery(...)فنکشن کیشے ڈیٹا واپس کرتا ہے ((اب کوئی حقیقی نیٹ ورک کی درخواست نہیں ہوتی ہے) ؛)

    ہم کسی سرور یا آلہ پر ایک سروس پروگرام چلا سکتے ہیں جو پالیسی پروگرام کے جواب میں استعمال ہوتا ہے۔HttpQuery(...)درخواستوں کو بھیجنے کے لئے ، گو زبان کی خدمت کے پروگراموں کو ٹیسٹ کرنے کے لئے استعمال کیا جاتا ہے:

    package main
    import (
        "fmt"
        "net/http"
        "encoding/json"
    )
    
    func Handle (w http.ResponseWriter, r *http.Request) {
        defer func() {
            fmt.Println("req:", *r)
            ret := map[string]interface{}{
                "schema" : []string{"time","open","high","low","close","vol"},
                "data" : []interface{}{
                    []int64{1564315200000,9531300,9531300,9497060,9497060,787},
                    []int64{1564316100000,9495160,9495160,9474260,9489460,338},
                },
            }
            b, _ := json.Marshal(ret)
            w.Write(b)
        }()
    }
    
    func main () {
        fmt.Println("listen http://localhost:9090")
        http.HandleFunc("/data", Handle)
        http.ListenAndServe(":9090", nil)
    }
    

    حکمت عملی کی جانچ پڑتال کے لئے استعمال کیا جاتا ہےHttpQuery(...)فنکشن بھیجنے کی درخواست:

    function main() {
        // 可以写自己运行服务程序所在设备的IP地址
        Log(HttpQuery("http://xxx.xx.x.xxx:9090/data?msg=hello"));
        Log(exchange.GetAccount());
    }
    
    # HttpQuery不支持Python,可以使用Python的urllib2库
    
    void main() {
        // 可以写自己运行服务程序所在设备的IP地址
        Log(HttpQuery("http://xxx.xx.x.xxx:9090/data?msg=hello"));
        Log(exchange.GetAccount());
    }
    

    img

  • درخواستوں کے جوابات کے اعداد و شمار کو ری کوڈ کرنے کی حمایت کرتا ہے ، عام طور پر استعمال ہونے والی کوڈنگ کی حمایت کرتا ہے۔ مخصوص کریںPostDataپیرامیٹرز:{method: "GET",charset:"GB18030"}اس کے علاوہ ، یہ بھی ممکن ہے کہ جواب دینے والے ڈیٹا ٹرانسمیشن کوڈ (GB18030) کو بھی لاگو کیا جاسکے۔

انکوڈنگ ((...)

Encode(algo, inputFormat, outputFormat, data, keyFormat, key string)، یہ فنکشن ڈیٹا کو ان پٹ کردہ پیرامیٹرز کے مطابق کوڈ کرتا ہے۔

پیرامیٹرزalgoکوڈ کے حساب کے لئے استعمال ہونے والے الگورتھم کی حمایت کی گئی ہے ، جو اس طرح کی ترتیبات کی حمایت کرتی ہے: جڑنا جڑنا (غیر استعمال شدہ الگورتھم) ، جڑنا جڑنا ، جڑنا جڑنا Tx جڑنا ، جڑنا md4 جڑنا ، جڑنا md5 جڑنا ، جڑنا 256 جڑنا ، جڑنا sha512 جڑنا ، جڑنا sha1 جڑنا ، جڑنا keccak256 جڑنا ، جڑنا sha3.224 جڑنا ، جڑنا sha3.256 جڑنا ، جڑنا sha3.384 جڑنا ، جڑنا sha3.keccak256 جڑنا ، جڑنا sha3.keccak512 جڑنا ، جڑنا sha512.384 جڑنا ، جڑنا sha512.256 جڑنا ، جڑنا sha512.224 جڑنا ، جڑنا shemdrip160 جڑنا ، جڑنا blake2b.256 جڑنا ، جڑنا blake2b.512 جڑdataاس کے لئے ڈیٹا کا استعمال کیا جاتا ہے۔inputFormat/outputFormat/keyFormatپیرامیٹرز کی حمایتrawhexbase64stringاس کے علاوہ، آپ کو اس کے بارے میں مزید جاننے کی ضرورت ہے. اگرkeyFormatخالی نہیں ہے تو، آپ کو ایک پیرامیٹر استعمال کرتے ہیںkeyخفیہ کاری (HMAC) ، دوسری صورت میں ڈیفالٹ استعمال کریںkeyپیرامیٹرزalgoسیٹ کریں"sign"یا"signTx"جب پیرامیٹرز کی ضرورت ہوتی ہے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.utf8text.decoder.utf8text.encoder.gbktext.decoder.gbk، اسٹرنگ کوڈ، ڈیکوڈ۔

function main(){
    var ret1 = Encode("text.encoder.utf8", "raw", "hex", "你好")     // e4bda0e5a5bd
    Log(ret1)    
    var ret2 = Encode("text.decoder.utf8", "hex", "string", ret1)   
    Log(ret2)

    var ret3 = Encode("text.encoder.gbk", "raw", "hex", "你好")      // c4e3bac3
    Log(ret3)
    var ret4 = Encode("text.decoder.gbk", "hex", "string", ret3)
    Log(ret4)
}
def main():
    ret1 = Encode("text.encoder.utf8", "raw", "hex", "你好", "", "")     # e4bda0e5a5bd
    Log(ret1)    
    ret2 = Encode("text.decoder.utf8", "hex", "string", ret1, "", "")   
    Log(ret2)

    ret3 = Encode("text.encoder.gbk", "raw", "hex", "你好", "", "")      # c4e3bac3
    Log(ret3)
    ret4 = Encode("text.decoder.gbk", "hex", "string", ret3, "", "")
    Log(ret4)
void main(){
    auto ret1 = Encode("text.encoder.utf8", "raw", "hex", "你好");     // e4bda0e5a5bd
    Log(ret1);    
    auto ret2 = Encode("text.decoder.utf8", "hex", "string", ret1);   
    Log(ret2);

    auto ret3 = Encode("text.encoder.gbk", "raw", "hex", "你好");      // 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()

GetOS()اس کے بعد ، آپ کو اپنے کمپیوٹر پر اپنے کمپیوٹر کو دوبارہ ترتیب دینے کی ضرورت ہے۔

function main() {
    Log("GetOS:", GetOS())
}
def main():
    Log("GetOS:", GetOS())
void main() {
    Log("GetOS:", GetOS());
}

ایپل کمپیوٹر پرMac OSآپریٹنگ سسٹم پر چلنے والے منتظمین کی لاگ ان آؤٹ پٹ:

GetOS:ڈارون/amd64

darwinیعنیMac OSنظام کا نام۔

MD5 ((سٹرنگ)

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 ((...)

DBExec()، پیرامیٹر ویلیو: اس کی قسم سٹرنگ ، عددی قدر ، بل قدر ، خالی قدر وغیرہ ہوسکتی ہے۔ واپسی کی قیمت: SQLite بیان کے عملدرآمد کے نتائج پر مشتمل اشیاء۔ ڈیٹا بیس انٹرفیس افعالDBExec()آپریٹنگ ڈیسک ڈیٹا بیس (SQLite ڈیٹا بیس) کی طرف سے پیرامیٹرز کی منتقلی کی طرف سے آپریشن کیا جا سکتا ہے؛ ڈیسک ڈیٹا بیس میں اعداد و شمار کو شامل کرنے، حذف کرنے، چیک کرنے، تبدیل کرنے، وغیرہ کی حمایت.SQLiteسیمنٹ.سسٹم میں محفوظ کردہ جدولیں:kvdbcfglogprofitchartاس صفحے پر کچھ بھی کام نہ کریں.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)
        
        // 增加一条数据
        Log(DBExec(":INSERT INTO TEST_TABLE (TS, HIGH, OPEN, LOW, CLOSE, VOLUME) VALUES (1518970320000, 100, 99.1, 90, 100, 12345.6);"))
        
        // 查询数据
        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)
        
        # 增加一条数据
        Log(DBExec(":INSERT INTO TEST_TABLE (TS, HIGH, OPEN, LOW, CLOSE, VOLUME) VALUES (1518970320000, 100, 99.1, 90, 100, 12345.6);"))
        
        # 查询数据
        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);
        
        // 增加一条数据
        Log(DBExec(":INSERT INTO TEST_TABLE (TS, HIGH, OPEN, LOW, CLOSE, VOLUME) VALUES (1518970320000, 100, 99.1, 90, 100, 12345.6);"));
        
        // 查询数据
        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))
    
    // 增加一条数据
    Log(DBExec("INSERT INTO TEST_TABLE (TS, HIGH, OPEN, LOW, CLOSE, VOLUME) VALUES (1518970320000, 100, 99.1, 90, 100, 12345.6);"))
    
    // 查询数据
    Log(DBExec("SELECT * FROM TEST_TABLE;"))
    
    // 修改数据
    Log(DBExec("UPDATE TEST_TABLE SET HIGH=? WHERE TS=?", 110, 1518970320000))    
    
    // 删除数据
    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))
    
    # 增加一条数据
    Log(DBExec("INSERT INTO TEST_TABLE (TS, HIGH, OPEN, LOW, CLOSE, VOLUME) VALUES (1518970320000, 100, 99.1, 90, 100, 12345.6);"))
    
    # 查询数据
    Log(DBExec("SELECT * FROM TEST_TABLE;"))
    
    # 修改数据
    Log(DBExec("UPDATE TEST_TABLE SET HIGH=? WHERE TS=?", 110, 1518970320000))
    
    # 删除数据
    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));

    // 增加一条数据
    Log(DBExec("INSERT INTO TEST_TABLE (TS, HIGH, OPEN, LOW, CLOSE, VOLUME) VALUES (1518970320000, 100, 99.1, 90, 100, 12345.6);"));
    
    // 查询数据
    Log(DBExec("SELECT * FROM TEST_TABLE;"));
    
    // 修改数据
    Log(DBExec("UPDATE TEST_TABLE SET HIGH=? WHERE TS=?", 110, 1518970320000));
    
    // 删除数据
    Log(DBExec("DELETE FROM TEST_TABLE WHERE HIGH=?", 110));
}

UUID (()

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.GoHttpQuery_Goمتوازی کاموں کو ختم کرنے کے بعد واپسی کا انتظار کریں۔timeoutاگر 0 مقرر کیا گیا ہے تو کسی واقعہ کے ہونے تک انتظار کریں ، اگر 0 سے زیادہ ہے تو واقعہ کا انتظار کرنے کا وقت ختم ہوجاتا ہے ، اور 0 سے کم ہے تو فوری طور پر حالیہ واقعہ واپس آجاتا ہے۔null، مواد میں شامل کیا جاتا ہےEventواقعہ ٹرگر ٹائپ کریں۔ یہ فنکشن صرف ڈسک پر لاگو ہوتا ہے۔

کوڈ میں پہلی بار کال کریںEventLoopاگر آپ کو یہ معلوم نہیں ہے کہ آپ کو کیا کرنا ہے تو ، آپ کو یہ بھی معلوم ہونا چاہئے کہ آپ کو کیا کرنا ہے ، اور آپ کو یہ بھی معلوم ہونا چاہئے کہ آپ کو کیا کرنا ہے۔EventLoopکال کریں ، پچھلے واقعات کو یاد کریں گے۔ بنیادی نظام میں لپیٹ کی قطار کی ساخت 500 تک واقعات کو کال کرنے کے لئے کیش کرتی ہے ، اگر پروگرام کے عملدرآمد کے دوران بروقت کال نہیں کی جاتی ہے۔EventLoopاگر آپ اس کو ہٹا دیتے ہیں تو ، آپ 500 کیشے سے زیادہ کے بعد ہونے والے واقعات کو کال کریں گے۔EventLoopفنکشن کو کال کرنے سے نظام کی بنیاد پر کوئی اثر نہیں پڑتاwebsocketکیشے کی قطار، اور یہ بھی متاثرexchange.Goمثال کے طور پر متوازی افعال کیشے، ان کیشوں کے لئے اب بھی ان کے اپنے طریقے کا استعمال کرتے ہوئے ڈیٹا نکالنے کے لئے کی ضرورت ہے.EventLoopاس کے بعد، آپ کو آپ کے ڈیٹا کو واپس کرنے کی ضرورت نہیں ہے.EventLoopفنکشن میں واپسی کا واقعہ پیدا ہوتا ہے۔

EventLoopاس فنکشن کا بنیادی استعمال پالیسی کی پرت کو مطلع کرنا ہے ، جب نظام کے نچلے حصے میں نیا نیٹ ورک ڈیٹا موصول ہوتا ہے۔EventLoopجب فنکشن ایونٹ واپس کرتا ہے تو ، اسے صرف تمام ڈیٹا ذرائع پر جانا پڑتا ہے۔ مثال کے طور پر:websocketہم آپ کو بتاتے ہیں کہ ہم کیا کر رہے ہیں۔exchange.Goآپ کے پاس ایک ایسی ویب سائٹ ہے جس میں آپ کو ڈیٹا حاصل کرنے کی کوشش کر رہے ہیں۔ آپ کو ایک اوپن سورس کلاس لائبریری ڈیزائن کا حوالہ دے سکتے ہیں ، اور آپ کو اس کے بارے میں مزید جاننے کی ضرورت ہے۔کلاس لائبریری لنکس

بنیادی افعال میںmain()مڈل کال کے دوران ، مرکزی تھریڈ کے واقعات کی نگرانی کریں۔JavaScriptاس کے علاوہ، ہم نے اس کے بارے میں مزید معلومات حاصل کرنے کے لئے اس ویب سائٹ کو استعمال کیا ہے.__Thread()فنکشن کے ذریعہ بنائے گئے تھریڈز کو اس تھریڈ کے ایگزیکٹو فنکشن میں بھی بلایا جاسکتا ہے اور موجودہ تھریڈ کے واقعات کی نگرانی کی جاسکتی ہے۔

function main() {
    var routine_getTicker = exchange.Go("GetTicker")
    var routine_getDepth = exchange.Go("GetDepth")
    var routine_getTrades = exchange.Go("GetTrades")
    
    // Sleep(2000),如果这里使用Sleep语句,会导致之后的EventLoop函数错过之前的事件,因为等待了2秒,并发的函数

مزید

qq89520ایک مسئلہ یہ ہے کہ C_function ہمیشہ دوبارہ کوشش کرتا ہے یا صرف ایک بار

ہائے ہائے_C ((function, args...) کیا یہ ڈیفالٹ 3s ہے؟ کیا ڈیفالٹ کو تبدیل کرنے کے لئے براہ راست _CDelay ((1000) کو _C ((function, args...) سے پہلے ڈالنا ممکن ہے؟ کیا ایک بار سیٹ کرنا ممکن ہے؟

کھانے والاکلسٹر: اگر آپ ایک ہزار روبوٹ بیک وقت تخلیق کرتے ہیں اور آپ کو کوئی دباؤ نہیں ہے، تو آپ کئی منتظمین بنا سکتے ہیں جو آپ کے کام کو تقسیم کرتے ہیں۔ کیا کلکٹر بنانے کے لئے کوڈ کی مثالیں ہیں؟ کس طرح متعدد منتظمین کو کام کو تقسیم کرنے کے لئے تعمیر کرنے کے لئے؟

واںگی1log ((talib.help (('MACD')); صرف js میں استعمال کیا جا سکتا ہے، python میں کوئی talib.help صفات نہیں ہیں...

cjz140_C ((function, args...) اور Sleep کے درمیان کیا فرق ہے؟ مجھے لگتا ہے کہ اس کا مطلب یہ ہے کہ دوبارہ کوشش کریں

3263243ySetErrorFilter کے بعد ErrorFilter کو کیسے خالی کریں؟ غلطی کی معلومات کو فلٹر کیے بغیر۔

qq47898077اگر آپ تیسری پارٹی کی لائبریری استعمال کرنا چاہتے ہیں تو کیا آپ کے پاس کوئی حل ہے؟

qq47898077اگر آپ ایکسچینج آبجیکٹ کی نئی کلاس کی تعریف کرنا چاہتے ہیں تو ، والدین کو کیا بھرنا چاہئے؟

ایتھنووکیا مقامی ڈیبگنگ ٹولز موجود ہیں؟

پینگلیہینگکیا یہ exange.IO (("status") ہے؟

پینگلیہینگاگر آپ کے پاس کوئی آپشن نہیں ہے تو ، آپ اسے کیسے بیچ سکتے ہیں؟

پینگلیہینگاگر آپ کے پاس کوئی آپشن نہیں ہے تو ، آپ اسے کیسے بیچ سکتے ہیں؟

پینگلیہینگمیں نے اس کے بارے میں کچھ نہیں سیکھا ہے.

پینگلیہینگمیں نے اس کے بارے میں کچھ نہیں سیکھا ہے.

Don.حجم کی اوسط لکیر کو کیسے لکھا جائے؟

زٹورتھاگر آپ نے ایکسپریس پر 1000 خریدے ہیں تو آپ کو کیا ملے گا؟

ننگ ڈکیہ نیا فونٹ اچھا لگ رہا ہے۔

ہپپوBitmex کے ٹیسٹنگ نیٹ ورک ((testnet.bitmex.com) کے لئے بھی API انٹرفیس موجود ہے ، لیکن اس وقت تبادلے صرف Bitmex ہوم سٹیشن کا انتخاب کرسکتے ہیں ، API دستاویزات کا پتہ https://testnet.bitmex.com/app/apiOverview ہے کیا آپ کی مدد کی ضرورت ہے؟

چججنvar ret1 = exchanges[0].IO (("api"، "future_estimated_price"، "symbol=btc_usd"); Log (('ok مستقبل کی پیش گوئی کی ترسیل کی قیمت، ret1) ؛ https://dn-filebox.qbox.me/d1ed268c1e75753c5d289447d279aa9d81e41b5f.png اگر آپ کو یہ معلوم نہیں ہے کہ آپ کو کیا کرنا چاہئے ، تو آپ کو یہ معلوم ہونا چاہئے کہ آپ کو کیا کرنا چاہئے۔

ایلن فراسٹ لائنکیا آپ واقعی ٹکر اور ٹکر کے درمیان فرق جاننا چاہتے ہیں؟ حال ہی میں ، ایک ہی وقت میں ، ٹکر کی حکمت عملی کو دوبارہ لکھنے کے لئے ، دونوں میں سے کچھ بھی ظاہر ہوتا ہے ، لیکن ایسا لگتا ہے کہ پہلے API میں اس کا ذکر نہیں کیا گیا ہے۔

نظارےہیلو، ایک پائیتھون ڈویلپر کے طور پر، آپ کو کیا لگتا ہے کہ آپ کی اے پی آئی دستاویزات کیا لکھ رہے ہیں؟ کچھ فیلڈ فنکشن انٹرفیس عجیب نظر آتے ہیں، کیا آپ ایک دستاویز لکھ سکتے ہیں جیسے کہ githubpage اور readdocs؟

ایلن فراسٹ لائنGetAccount: [EAPI:Rate limit exceeded] کیا آپ پوچھنا چاہتے ہیں کہ اس کا حل کیا ہے؟ اور کیا میرے پاس کوئی ویکیپیڈیا گروپ ہے؟ شکریہ

zhjx2314اسٹوک آر ایس آئی کی حمایت نہیں کرتا ، کیا اسے جلد شامل کیا جاسکتا ہے؟

یھفگکیا آپ کو معلوم ہے کہ آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ پر آپ کی ویب سائٹ

یھفگآپ python کا کون سا ورژن استعمال کرتے ہیں؟

بظاہرGetFee کی تشریح یہ ہونی چاہئے کہ ایک فی ساختہ ٹائپ واپس آئے ، ایک کم ساختہ لفظ۔

زکواپکیا آپ جے ایس کا استعمال کرتے ہوئے طالب کو کال کرنے کا طریقہ جانتے ہیں؟

یھفگpython دستاویزات کی تلاش

wmjbs123حکمت عملی کے ایڈیٹر کے لئے کوڈ کے پس منظر کو سیاہ میں تبدیل کر سکتے ہیں؟ سفید آنکھوں، رات کو کوڈ لکھنے، قریبی نقطہ نظر کے لئے آسان

Don.روبوٹ ویکی میسج میں خلاصہ کیسے ترتیب دیا جائے؟

نمبر: پاگلکیا آرڈر ڈھانچے میں ایک برابر قیمت والے فیلڈ کو شامل کیا جاسکتا ہے؟

چھوٹی چھوٹی باتیںGetOrders: تمام غیر مکمل شدہ آرڈرز حاصل کریں، ایک آرڈر صف کا ڈھانچہ واپس کریں، چین میں بٹ کوائن ٹریڈنگ ETH، صرف حالیہ 10 items واپس کریں، کیا یہاں چین میں بٹ کوائن ETH کے تمام غیر مکمل شدہ آرڈرز کو واپس کرنے کا فنکشن ہے، جس کا مطلب یہ ہے کہ دوسرے پلیٹ فارمز GetOrders کے ساتھ سب کچھ واپس کرسکتے ہیں، صرف یہ گھوٹالہ چینی بٹ کوائن 10 items واپس کرتا ہے،

یھفگاور یہ ریاضی کے افعال ہیں جن کے لئے اعداد و شمار کے امکانات کا استعمال کیا جاتا ہے، اور یہ کہاں سے آتا ہے؟

جے بینگ.Cross ((x, y) کی واپسی کی قدر کیا ہے؟

میری ماں کا نامیہ لاگ ری سیٹ تمام نوشتہ جات کو خالی کرتا ہے اور ایک عددی پیرامیٹر کے ساتھ محفوظ کردہ نوشتہ جات کی وضاحت کرسکتا ہے کیا آپ کو معلوم ہے کہ یہ کیسے ہوتا ہے؟

ایڈورڈ گیوکیا آپ کو لگتا ہے کہ talib میں CORRE فنکشن کو منتقل نہیں کیا گیا تھا یا اسے کھو دیا گیا تھا؟

فقیہ پہاڑکیا آپ کو معلوم ہے کہ آپ کے اکاؤنٹ میں کون سے اشارے ہیں؟

چھوٹاپڑھنے کے لئے k لائن وقت کس طرح میں ترجمہ کیا جاتا ہے موجودہ وقت

چھوٹااعداد کو صفوں سے ہٹانے کا طریقہ، میں records.remove ((records[0]) استعمال کر رہا ہوں

سانپعام طور پر ، آپ کو گھنٹہ کی لائن ملتی ہے۔ آپ دن کی لائن کے ATR کو کیسے کال کرسکتے ہیں؟

سانپعام طور پر ، آپ کو گھنٹہ کی لائن ملتی ہے۔ آپ دن کی لائن کے ATR کو کیسے کال کرسکتے ہیں؟

57278863سیکھیں کہ کس طرح روایتی مستقبل کی قیمتوں کو حاصل کرنے کے لئے اور نیچے کی سفارشات، افسوس، جڑیں پتلی ہیں.

کرینہم نے ایک بار پھر اس پر زور دیا ہے کہ ہم اس کے بارے میں کیا سوچتے ہیں؟

چھوٹاصفر، کیا آپ ایک مثال لکھ سکتے ہیں روایتی فیوچر ٹریڈنگ کے بارے میں؟

چھوٹاجب ایک ہی وقت میں متعدد خالی سیٹیں تھیں۔ کس طرح ہولڈنگ اسٹیٹ پرنٹ کریں ، میرا کس طرح پرنٹ کرنا ہے [object object][object object] ، کس طرح ملٹی سیٹ اور خالی سیٹ ہولڈنگ اسٹیٹ حاصل کریں ، اور گیٹ ٹکر ()) ، اس ہفتے ، اگلے ہفتے ، اور سہ ماہی کو کس طرح حاصل کریں اس ہفتے کی قیمت ، اس ہفتے ، اگلے ہفتے اور سہ ماہی میں میں نے لکھا ہے۔

چججنکیا فیوچر ایکسچینج GetTicker () کے ساتھ تجارت حاصل کرسکتے ہیں؟ کیا اس قسم کے معاہدے کی واپسی ہوتی ہے ((اس ہفتے ، اگلے ہفتے...) ؟

فروختاسٹاک آر ایس آئی میں کیا اضافہ کیا جا سکتا ہے؟

مومیکسCancelOrder ((orderId) آرڈر نمبر کے مطابق آرڈر منسوخ کریں ، true یا false واپس کریں ، true = سیلز کو کامیابی کے ساتھ منسوخ کیا گیا ، ٹھیک ہے؟

مومیکس_G(K, V) محفوظ کردہ گلوبل لغت کی فہرست کیا اس طریقہ کار کے ذریعہ محفوظ کردہ گلوبل متغیرات کو مختلف پالیسیوں کے مابین ڈیٹا شیئر کرنے کے لئے استعمال کیا جاسکتا ہے؟

فلفی 3Dمقبولیت میں اضافہ

صفرآپ لاگپروفیٹ ری سیٹ کے ذریعے انکم لاگ کو دوبارہ ترتیب دے سکتے ہیں۔ انکم چارٹ میں سابقہ تاریخ ختم ہو جائے گی۔

xcyکیا آپ براہ راست ای اے کاپی کر سکتے ہیں؟

شیرون مینیہ پلیٹ فارم بہت اچھا لگتا ہے، بہت اچھا، زیادہ سے زیادہ لوگوں کے ساتھ بات چیت.

چھوٹایہ کونسی زبان ہے؟ کیا اس میں سیکھنے کے لیے کوئی مواد موجود ہے؟

jxhbtcڈیٹا کی خرابی ایک ہفتہ سے روبوٹ سے رابطہ نہیں ہو رہا ہے

ڈھیہکیا ٹی اے صرف اختتامی قیمتوں کا حساب لگانے کے لئے ہے؟

بٹکروبوٹہیلو، دنیا

چھوٹا سا خواب_C فنکشن بغیر سوچے سمجھے دوبارہ کوشش کرے گا جب تک کہ کامیابی حاصل نہ ہو جائے۔

چھوٹا سا خوابpython کے طالب لائبریری کو انسٹال کرنے کی ضرورت ہے۔https://www.botvs.com/bbs-topic/669 اس پوسٹ کو دیکھ سکتے ہیں۔

چھوٹا سا خوابسوتے میں پروگرام کچھ نہیں کرتا ہے اور انتظار کرتا ہے جب تک کہ پیرامیٹر سیٹ نہ ہو جائے۔ ملی سیکنڈ کی تعداد ، _C ایک بار پھر پیرامیٹرز کو کال کرنے کے لئے ایک فنکشن ہے۔

چھوٹا سا خواببغیر وراثت کے ، جے ایس براہ راست آبجیکٹ میں لپیٹ جاتا ہے {name: "نیا آبجیکٹ"، old_exchange: exchange[0،...... }

چھوٹا سا خوابمقامی ایڈیٹر ریموٹ ہم وقت سازی پلگ ان، بنیادی طور پر مقامی ایڈیٹر ریموٹ ڈیبگنگ ہے۔

چھوٹا سا خوابآپ کو QQ گروپ میں آ سکتے ہیں، اور یہ بات چیت کرنے کے لئے آسان ہے.

چھوٹا سا خوابAPI دستاویزات میں گرے رنگ کا مطلب یہ ہے کہ اس فنکشن کی بہت زیادہ وضاحت نہیں کی گئی ہے ، یہ گرے رنگ کی نمائندگی کرتا ہے ، نیلے رنگ کی نمائندگی کرتا ہے ، اس کی مزید وضاحت ہوتی ہے ، اور بس۔

چھوٹا سا خوابES6 فی الحال معاونت نہیں کرتا، ^^

چھوٹا سا خوابکیا آپ گروپ QQ میں جا سکتے ہیں؟ میں نے سوال بیان کیا اور میں نے جواب دیا ^^

چھوٹا سا خواباس کا مطلب یہ ہے کہ آپ کے پاس صرف ایک خرابی ہے اور آپ کو اس کے لئے ادائیگی کرنے کی ضرورت نہیں ہے۔

زٹورتھمثال کے طور پر ، اگر آپ کے پاس ایک ہی کرنسی ہے تو ، آپ کو کیا ملتا ہے؟

چھوٹا سا خواباس کے علاوہ ، میں نے ایک اور آرڈر نمبر واپس کیا ، جس میں میں نے کہا تھا کہ میں کس ایکسچینج پر ہوں ، اور میں نے ایک آرڈر نمبر واپس کیا ہے۔

صفرٹرانزیکشنز کی جوڑی کو تبدیل کرنے کی حمایت کی جاتی ہے، تازہ ترین میزبان کو ڈاؤن لوڈ کرنے کی ضرورت ہوتی ہے۔ Bter/Poloniex کی حمایت کریں API کی تفصیلات دستاویزات ٹرانزیکشن فنکشن ٹب ذیل میں تفصیلات ((بلاؤزر کیشے کو صاف کرنے کے بعد تازہ کاری کریں اگر آپ نہیں دیکھ سکتے ہیں)

چھوٹا سا خوابQQ میں ہوں، میں آپ کی مدد کروں گا. 359706687

پیشہ ورانہ والدینمیں نے اپنے میزبان کا آئی پی سیٹ کیا ہے؟

چھوٹا سا خوابیہ ایک بنیادی لنک ہے جو قائم نہیں کیا گیا ہے۔ سرور نے جواب نہیں دیا ہے۔ کیا API KEY کی درخواست کرتے وقت IP ایڈریس سیٹ کرنا ہے؟

پیشہ ورانہ والدینیہ شرمناک ہے ۔ ۔ ۔ میں اوکے چل سکتا ہے کہ حکمت عملی کو تبدیل کرنے کے لئے بٹ دور میں ناکام رہے ، GetAccount حاصل نہیں کر سکتے ہیں GetAccount: پوسٹ http://api.btc38.com/v1/getMyBalance.php: read tcp 192.168.0.227:58596->211.149.148.144:80: wsarecv: A connection attempt failed because the connected party did not properly respond after a period of time ، or established connection failed because connected host has failed to respond 2017-05-23 21:08:24 بِٹ ایج غلطی گیٹ اکاونٹ: ٹائم آؤٹ 2017-05-23 21:08:02 بِٹ ایج غلطی گیٹ اکاونٹ: ٹائم آؤٹ 2017-05-23 21:07:40 بٹ دورہ غلطی گیٹ اکاؤنٹ: ٹائم آؤٹ 2017-05-23 21:07:20 دوبارہ شروع کریں کیا یہ آئی پی وائٹ لسٹ کا مسئلہ ہے؟

چھوٹا سا خوابایکسپورٹ کے سرورز نے جواب نہیں دیا اور تین بار ہاتھ ملانے کے بعد بھی ٹی سی پی پروٹوکول قائم نہیں ہوا۔

پیشہ ورانہ والدینA connection attempt failed because the connected party did not properly respond after a period of time. ایک کنکشن کی کوشش ناکام ہوگئی کیونکہ منسلک پارٹی نے ایک عرصے کے بعد مناسب طریقے سے جواب نہیں دیا، اور اس کے نتیجے میں ، ایک بار جب آپ نے اس کی کوشش کی تو ، آپ کو ایک غلطی کا سامنا کرنا پڑا۔

چھوٹا سا خوابہیلو! یہ تبادلہ.IO ((api, ApiName, Args) کے بارے میں ہے، اس فنکشن کی حمایت نہیں کی جاتی ہے، ملاحظہ کریں https://www.botvs.com/bbs-topic/812

پیشہ ورانہ والدینایک کنکشن کی کوشش ناکام ہوگئی کیونکہ منسلک پارٹی نے ایک مدت کے بعد مناسب طریقے سے جواب نہیں دیا،

پیشہ ورانہ والدینکیا بٹ ایج کی حمایت نہیں ہے؟

چھوٹا سا خوابhttps://dn-filebox.qbox.me/a709b30c6cc0a3565234b9e0c99b073f7ba8b454.png میں نے اس کے بارے میں سوچا۔

ننگ ڈکمثال کے طور پر، میں پولونیکس کے ساتھ تمام کرنسیوں کا تبادلہ کرنا چاہتا ہوں، لیکن BOTvs صرف چند کرنسیوں کی حمایت کرتا ہے، اور exchange.IO پی نیٹ ورک کی حمایت نہیں کرتا ہے.

چھوٹا سا خوابآپ اس کو exchange.IO پر کال کر سکتے ہیں۔

ننگ ڈککیا آپ کے اکاؤنٹ کی توثیق کے لیے API کی ضرورت ہے؟

چھوٹا سا خواباگر اکاؤنٹ کی توثیق کی ضرورت نہیں ہے تو API httpQuery کا استعمال کرسکتے ہیں (بٹو وی ایس دستاویزات دیکھیں) ، اور اصل لین دین API تک رسائی کی ضرورت ہے۔

چھوٹا سا خوابآپ HttpQuery API کے پیرامیٹرز منتقل کرسکتے ہیں: https://www.okcoin.com/api/v1/future_estimated_price.do؟symbol=btc_usd، یہ کام کرتا ہے۔ اکاؤنٹس کی توثیق کی ضرورت نہیں ہے کہ معاملات کی قسم کے لئے تبادلہ API پلیٹ فارم پر براہ راست HttpQuery فنکشن کا استعمال کرتے ہوئے، اکاؤنٹس کے ساتھ منسلک صرف IO API (IO ان معاملات کی API کی حمایت نہیں کرتا ہے کہ تصدیق کی ضرورت نہیں ہے) کا استعمال کرتے ہوئے. پوسٹ: https://www.botvs.com/bbs-topic/850

نظارےآپ کا شکریہ، اور امید ہے کہ آپ کے پاس بہترین API دستاویزات ہیں۔

چھوٹا سا خوابکیا آپ کو معلوم ہے کہ یہ ای پی آئی کہاں دیکھی گئی؟

چھوٹا سا خوابhttps://dn-filebox.qbox.me/fe1a6f5563ed43a5357f858ecf8a50239619228e.png API دستاویزات جاوا اسکرپٹ زبان میں بیان کی گئی ہیں، python کے ورژن میں بیان کیا گیا ہے، جو کہ پیٹنٹ کمیونٹی پیٹنٹ کے صفحے کے سب سے اوپر پوسٹ کیا گیا ہے۔

صفرہیلو، مشورہ کا شکریہ، API دستاویزات کی تعمیر نو کی جا رہی ہے.

چھوٹا سا خوابہیلو - یہ ظاہر کرتا ہے کہ رسائی کی تعداد حد سے زیادہ ہے۔ https://dn-filebox.qbox.me/a09498920d04cac62624b7438a058d2098d8fb00.png کیا حکمت عملی میں سوتے (1000) فنکشن کا استعمال کیا گیا ہے؟ ، یہ 1000 پروگراموں کو ہر دور میں ایک سیکنڈ کے لئے روکنے کے لئے ہے ، جو خود بخود ترتیب دیا جاسکتا ہے ، مقصد پروگراموں کو کنٹرول کرنا ہے API تک رسائی کی تعدد ، کیونکہ کچھ تبادلے نے زیادہ سے زیادہ رسائی کی حد مقرر کی ہے ، ایک خاص وقت سے زیادہ رسائی سے انکار کیا جائے گا ، جس سے آئی پی ایڈریس کو بلاک کردیا جائے گا۔

چھوٹا سا خوابhttps://dn-filebox.qbox.me/c29ab7fc279e1b758355f137907cf52dc8257df6.png میں نے ذاتی طور پر لکھا ہے کہ اسٹاک آر ایس آئی کے اشارے کے مقابلے میں جو کچھ بھی ٹھیک ہے ، اس میں اتفاق ہے کہ رفتار تھوڑی سست ہے اور اس کے لئے اصلاح کی ضرورت ہے ، یہ عارضی طور پر دستیاب ہے۔

صفرآپ اپنے آپ کو منتخب کر سکتے ہیں کہ کیا botvs کے ذریعہ فراہم کردہ سرور پر دوبارہ جانچ پڑتال کی جائے گی یا اپنے میزبان کے سرور پر دوبارہ جانچ پڑتال کی جائے گی ، ورژن 2.7.5 ہے۔

چھوٹا سا خواباس کے بعد آپ نے اس کا استعمال کیا ہے۔

چھوٹا سا خواباب آپ اپنے پس منظر کے انداز کو اپنی مرضی کے مطابق کرسکتے ہیں۔

چھوٹا سا خوابpython دستاویزات لکھ رہے ہیں۔

چھوٹا سا خوابطالبان کی مدد کے لئے دستیاب ہے۔

hzzgood48 https://www.botvs.com/bbs-topic/276

چھوٹا سا خواباس کی مثال حکمت عملی اسکوائر میں دکھائی دیتی ہے۔ https://www.botvs.com/strategy/15098

صفرآرڈر کی اوسط قیمت کی خصوصیت تک رسائی حاصل کریں، جو کہ تبادلے کی حمایت کرتا ہے، اور جو تبادلے کی حمایت نہیں کرتا وہ ہمیشہ 0 کی خصوصیت رکھتا ہے

یھفگکیا آپ کو معلوم ہے کہ یہ کون سی سائٹ ہے؟

صفراگر mathjs مطمئن نہیں ہے تو ، یہ صرف تیسری پارٹی کے لائبریریوں کو نقل کرنے اور درآمد کرنے کی پالیسیوں کو تلاش کرنے کے لئے کافی نہیں ہے۔ کمپائلنگ کی رفتار کے ل the ، نظام نے صرف چند لائبریریوں کو بنایا ہے۔

چھوٹا سا خوابمیں نے اپنے دوستوں کو بتایا کہ میں ان سے ملنا چاہتا ہوں ، لیکن میں نے ان سے پوچھا کہ کیا وہ مجھے پسند کرتے ہیں؟ میں نے کہا کہ میں ان سے ملنا چاہتا ہوں۔

جے بینگشکریہ

چھوٹا سا خوابکیا آپ گروپ میں ہیں؟ آپ کو تبصرہ ورژن میں دیکھ سکتے ہیں ڈیجیٹل کرنسی کی تجارت کی کلاس کی کوڈ تجزیہ۔ اس میں فنکشن کے تبصرے ہیں۔

صفرآپ تازہ ترین کو حذف نہیں کر سکتے، صرف تازہ ترین کو برقرار رکھ سکتے ہیں۔ پہلے کے تمام پرانے کو حذف کریں۔

کرینپوزیشن [i] کے ساتھ ہر ہولڈنگ حاصل کرنے کے لئے، پوزیشن ایک صف ہے

ننگ ڈکexchange.GetRecords ((PERIOD_D1) ؛

کرینمیرا روایتی فیوچر ہمیشہ یہ ہوتا ہے کہ "GetAccount: not login" "پاس ورڈ غلط نہیں ہے، لاگ ان نہیں ہو سکتا"

صفرپہلے سے طے شدہ ہفتہ ہے، مخصوص SetContractType حاصل کرنے کے لئے پہلے کی ضرورت ہے.

صفرآپ نے ابھی دیکھا ہے کہ یہ درست ہے اور یہ تبادلے کی واپسی کی واپسی کی واپسی کی واپسی کی واپسی کی واپسی کی واپسی کی واپسی کی واپسی کی واپسی کی واپسی کی واپسی کی واپسی کی واپسی کی واپسی کی واپسی کی واپسی کی واپسی کی واپسی کی واپسی کی واپسی کی واپسی کی واپسی کی واپسی کی واپسی کی واپسی کی واپسی ہے.

مومیکس3q

صفرنہیں، یہ الگ ہے

شوان شوانیقینا نہیں، یہ MT4 کے لئے خصوصی ہے.

صفرجاوا اسکرپٹ کے بارے میں معلومات انٹرنیٹ پر ہر جگہ ہیں

فروختکیا آپ کا مسئلہ حل ہو گیا؟

صفرزیادہ تر وقت، ان پٹ اعداد و شمار براہ راست ریکارڈ یا خالص قیمت کے طور پر ہو سکتا ہے.