উদ্ভাবক 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

সেটErrorFilter(...)

SetErrorFilter(RegEx), ফিল্টার ত্রুটি লগিং. ⇒ প্যারামিটার মানঃ স্ট্রিং টাইপ. এই নিয়মিত অভিব্যক্তির সাথে মেলে এমন ত্রুটি লগগুলি লগ সিস্টেমে আপলোড করা হবে না এবং একাধিক ফিল্টার শর্তাদি সেট করতে একাধিক বার কল করা যেতে পারে ((ফিল্টার করা লগগুলি হোস্ট ডিরেক্টরির অধীনে ডেটাবেস ফাইলগুলিতে লিখিত হয় না যা প্রকৃত ডিস্ক আইডির সাথে সম্পর্কিত, যা ডাটাবেস ফাইলের বৃদ্ধির ফলে ঘন ঘন ত্রুটিগুলি প্রতিরোধ করে)) ।

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

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মানের ধরন, মান একক সেকেন্ড, যদি overtime হয়Dial(...)ফাংশনটি একটি শূন্য মান প্রদান করে।

Addressপ্যারামিটার বিস্তারিতঃ

প্যারামিটার বিবরণ
সেটিংDialফাংশন পরামিতি সাধারণ ঠিকানায়ঃwss://ws.okx.com:8443/ws/v5/publicপরবর্তীতে|অক্ষর বিভাজন, যদি অক্ষর সংখ্যা string আছে|অক্ষর,||পৃথকীকরণ চিহ্ন হিসেবে ব্যবহার করা হয়.&অক্ষর সংযুক্তি. উদাহরণস্বরূপ 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,name হল ss5 সার্ভার টার্মিনালের ব্যবহারকারীর নাম,pwd হল ss5 সার্ভার টার্মিনালের লগইন পাসওয়ার্ড,1080 হল ss5 সার্ভারের পোর্ট।
ডাব্লুএস প্রোটোকলের ক্ষেত্রে, নিম্নলিখিত স্বয়ংক্রিয় পুনরায় সংযোগের সাথে সম্পর্কিত পরামিতিগুলি সেট করুনঃreconnect=参数值 reconnect পুনরায় সংযোগ সেট করা হয় কিনা তা দেখায়।reconnect=trueপুনরায় সংযোগ সক্ষম করতে. এই প্যারামিটারটি সেট না করা হলে, ডিফল্টরূপে পুনরায় সংযোগ করবেন না.
ডাব্লুএস প্রোটোকলের ক্ষেত্রে, নিম্নলিখিত স্বয়ংক্রিয় পুনরায় সংযোগের সাথে সম্পর্কিত পরামিতিগুলি সেট করুনঃinterval=参数值 interval হল পুনরায় পরীক্ষা করার সময়, একক মিলিসেকেন্ড,interval=10000পুনরায় চেষ্টা করার জন্য 10 সেকেন্ডের ব্যবধানে, ডিফল্ট 1 সেকেন্ড সেট করবেন না,interval=1000
ডাব্লুএস প্রোটোকলের ক্ষেত্রে, নিম্নলিখিত স্বয়ংক্রিয় পুনরায় সংযোগের সাথে সম্পর্কিত পরামিতিগুলি সেট করুনঃpayload=参数值 payload as ws পুনরায় সংযোগ করার সময় যে সাবস্ক্রিপশন বার্তা পাঠানো প্রয়োজন, যেমনঃ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)সময়সীমা দুই সেকেন্ড (২০০০ মিলিসেকেন্ড) ।
  • নিম্নলিখিত দুটি পরামিতি শুধুমাত্র সঠিকwebsocketকার্যকরঃ ইনপুট প্যারামিটার-1একটি ফাংশন একটি বার্তা আছে কিনা তা অবিলম্বে ফিরে আসে, উদাহরণস্বরূপঃws.read(-1)❖ ইনপুট প্যারামিটার-2এটি নির্দেশ করে যে কোনও বার্তা না থাকলেও ফাংশনটি অবিলম্বে ফিরে আসে, তবে কেবলমাত্র সর্বশেষ বার্তাটি ফিরে আসে, বাফার অঞ্চলের বার্তাগুলি বাদ দেওয়া হয়; উদাহরণস্বরূপঃws.read(-2)

read()ফাংশন বাফারগুলি ব্যাখ্যা করেঃ Ws প্রোটোকল থেকে প্রেরিত তথ্য যদি নীতিগতভাবেread()ফাংশন কলগুলির মধ্যে খুব দীর্ঘ সময় ব্যবধানের ফলে ডেটা জমা হতে পারে। এই ডেটাগুলি একটি বুফারে সংরক্ষণ করা হয়, বুফারের ডেটা কাঠামোটি সারিযুক্ত, সর্বোচ্চ 2000। 2000 ছাড়িয়ে গেলে, সর্বশেষতম ডেটা বুফারে প্রবেশ করে, প্রাচীনতম ডেটা মুছে ফেলা হয়।

দৃশ্যreadফাংশন পরামিতি প্যারামিটারহীন প্যারামিটারঃ -1 প্যারামিটারঃ -২ প্যারামিটারঃ ২০০০, ইউনিট হল মিলিসেকেন্ড
বুফার এলাকা তথ্য আছে তাত্ক্ষণিকভাবে সর্বশেষ তথ্য ফিরে তাত্ক্ষণিকভাবে সর্বশেষ তথ্য ফিরে অবিলম্বে আপডেট করুন তাত্ক্ষণিকভাবে সর্বশেষ তথ্য ফিরে
বুফার জোনের তথ্য নেই ডাটা পাওয়া পর্যন্ত ব্লক করুন অবিলম্বে শূন্য মান ফেরত অবিলম্বে শূন্য মান ফেরত 2000 মিলিসেকেন্ড অপেক্ষা করুন, কোন ডেটা শূন্য ফিরে আসে, কিছু ডেটা ফিরে আসে
ws সংযোগ বিচ্ছিন্ন হয় বা নীচের পুনরায় সংযোগ করা হয় read (()) ফাংশনটি একটি ফাঁকা স্ট্রিং ফেরত দেয়, যেমনঃ:"",write (()) ফাংশনটি 0 ফেরত দেয়, এটি সনাক্ত করা হয়। আপনি বন্ধ করতে পারেন close (()) ফাংশনটি ব্যবহার করে সংযোগ বন্ধ করুন, যদি স্বয়ংক্রিয় পুনরায় সংযোগ সেট করা থাকে তবে বন্ধ করার দরকার নেই, সিস্টেমের নীচে স্বয়ংক্রিয়ভাবে পুনরায় সংযোগ স্থাপন করা হবে।
  • উইএসএস (ওয়েবসকেট) প্রোটোকল সমর্থন করে বিয়ানান্সের ওয়েবসকেট মার্কেট ইন্টারফেসটি দেখুনঃ

    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();
    }
    

    OKX এর ওয়েবসকেট মার্কেট ইন্টারফেস অ্যাক্সেস করুনঃ

    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প্যারামিটারগুলোও হতে পারেJSONstring-এর নাম।

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এই ফাংশনটি overtime সেট করতে পারে{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অনুগ্রহ করে দ্বিতীয় প্যারামিটারটি শূন্য করুন। অ্যালগরিদম পরীক্ষার সময়, ফাংশনটি একটি নির্দিষ্ট স্ট্রিং ফেরত দেয় কারণ এটি URL এ অ্যাক্সেস অ্যালগরিদম করতে পারে না।Dummy Data❖ আপনি এই ইন্টারফেসটি ব্যবহার করে টেক্সট মেসেজ পাঠাতে পারেন, অথবা অন্যান্য এপিআই ইন্টারফেসগুলির সাথে ইন্টারঅ্যাক্ট করতে পারেন।

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 টি পর্যন্ত বিভিন্ন URL এর ব্যবহার সীমাবদ্ধ করুন; এবংHttpQuery(...)অ্যাক্সেসটি একই URL এ দ্বিতীয়বারের মত তথ্য সংরক্ষণ করেHttpQuery(...)ফাংশনটি ক্যাশে ডেটা ফেরত দেয় (এখন আর প্রকৃত নেটওয়ার্ক অনুরোধ হয় না) ।

    আমরা একটি সার্ভার বা ডিভাইসে একটি সার্ভিস প্রোগ্রাম চালাতে পারি যা নীতিগত প্রোগ্রামের প্রতিক্রিয়া জানাতে ব্যবহৃত হয়।HttpQuery(...)অনুরোধটি পাঠানো হয়েছিল এবং পরীক্ষার জন্য ব্যবহৃত Go ভাষা পরিষেবা প্রোগ্রামটি নিম্নরূপঃ

    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কোডিং গণনা করার সময় ব্যবহৃত অ্যালগরিদম, সমর্থিত সেটিংস হলঃ raw ((অ্যালগরিদম ব্যবহার না করা), sign, signTx, md4, md5, sha256, sha512, sha1, keccak256, sha3.224, sha3.256, sha3.384, sha3.512, sha3.keccak256, sha3.keccak512, sha512.384, sha512.256, sha512.224, ripemd160, blake2b.256, blake2b.512, blake2s.128, blake2s.256─ পরামিতি।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:darwin/amd64

darwinঅর্থাৎMac OSসিস্টেমের নাম।

MD5 ((String)

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ফাংশনের পরামিতি যদিsqlএই বাক্যটি:প্রাথমিকভাবে, মেমরিতে ডাটাবেস পরিচালনা করা হয়, ফাইলগুলি লিখতে হয় না, দ্রুততর হয়। এটি এমন ডাটাবেস অপারেশনগুলির জন্য উপযুক্ত যা স্থায়ীভাবে সংরক্ষণের প্রয়োজন হয় না, যেমনঃ

    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যদি ০ সেট করা হয় তবে ইভেন্টের জন্য অপেক্ষা করুন, যদি ০ এর চেয়ে বড় হয় তবে ইভেন্টের জন্য অপেক্ষা করুন, যদি ০ এর চেয়ে কম হয় তবে তাত্ক্ষণিকভাবে সাম্প্রতিক ইভেন্টটি ফিরে আসে।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 ফাংশনটি কি বারবার চেষ্টা করবে অথবা একবারই?

হা হা হা_C ((function, args...) এর ডিফল্ট 3s? ডিফল্ট পরিবর্তন সরাসরি _CDelay ((1000) _C ((function, args...) এর আগে করা যাবে? একবার সেট করা যাবে?

লাঞ্চাইয়েক্লাস্টারঃ আপনি যদি এক হাজার বটকে একসাথে তৈরি করেন, এবং চাপ ছাড়াই, আপনি একাধিক অ্যাডমিনিস্ট্রেটর তৈরি করতে পারেন যাতে আপনি বিভিন্ন কাজ করতে পারেন। ক্লস্টার তৈরির জন্য কোডের উদাহরণ আছে? কিভাবে একাধিক হোস্ট তৈরি করতে হবে যাতে টাস্কগুলি বিভাজিত হয়?

ওয়াংজি১Log ((talib.help (('MACD')); শুধুমাত্র js এ ব্যবহার করা যায়, পাইথনে talib.help বৈশিষ্ট্য নেই...

cjz140_C ((function, args...) এবং Sleep ফাংশনের মধ্যে পার্থক্য কি?

৩২৬৩২৪৩SetErrorFilter এর পরে ErrorFilter কিভাবে খালি করবেন?

qq47898077আপনি যদি তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করতে চান তাহলে কি কোন উপায় আছে?

qq47898077যদি আপনি একটি এক্সচেঞ্জ অবজেক্টের নতুন ক্লাস সংজ্ঞায়িত করার উত্তরাধিকার চান, তাহলে পিতা ক্লাসটি কী পূরণ করবে?

ইথানউস্থানীয় ডিবাগিং সরঞ্জাম আছে কি?

পেংলিহেনগএক্সচেঞ্জ.আইও (exange.IO (("status"))?

পেংলিহেনগকেন sell এর ফাংশনটি ধূসর হয়, এটা কি প্রতিনিধিত্বকারী ফাংশনটি ব্যবহার করা যাবে না?

পেংলিহেনগকেন sell এর ফাংশনটি ধূসর হয়, এটা কি প্রতিনিধিত্বকারী ফাংশনটি ব্যবহার করা যাবে না?

পেংলিহেনগjs ভাষা জানে না, হাহাহাহা, আমি জানতে চাই ES6 সমর্থন করে?

পেংলিহেনগjs ভাষা জানে না, হাহাহাহা, আমি জানতে চাই ES6 সমর্থন করে?

Don.ভলিউম এর গড় রেখা কিভাবে লিখবো?

জুতুর্তিএক্সচেঞ্জ.বায় (১০০০) -এ বাজার মূল্যে কেনাকাটা করুন।

নিং ডেকোনতুন ফন্টটি দেখতে খুব সুন্দর।

হিব্রুবিটমেক্সের টেস্টিং নেটওয়ার্ক ((testnet.bitmex.com) এপিআই ইন্টারফেসও রয়েছে, তবে বর্তমানে এক্সচেঞ্জগুলি কেবল বিটমেক্সের মূল স্টেশনটি বেছে নিতে পারে, এপিআই ডকুমেন্টের ঠিকানাটি 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 আপনি যদি অন্য এক্সচেঞ্জের ফাংশন ইন্টারফেসে কল করেন, তাহলে ভুল রিপোর্ট লিখুন, কেন?

অ্যালেনফ্রস্টলাইনrealTicker এবং Ticker এর মধ্যে পার্থক্য কি জানতে চাই? সাম্প্রতিক সময়ে সুইট কৌশলগুলি পুনর্লিখন করা হচ্ছে এবং উভয়ই একই সাথে উপস্থিত হয়েছে তবে প্রথমটি API তে উল্লেখ করা হয়নি বলে মনে হচ্ছে।

দর্শনহ্যালো, একজন পাইথন ডেভেলপার হিসেবে আপনার মনে হয় আপনার API ডকুমেন্টেশন কি লিখছে? কিছু ফিল্ড ফাংশন ইন্টারফেস অদ্ভুত দেখাচ্ছে, আপনি কি Githubpage এবং readdocs মত একটি ডকুমেন্টেশন লিখতে পারেন?

অ্যালেনফ্রস্টলাইনGetAccount: [EAPI:Rate limit exceeded] আপনি কি জানতে চান কিভাবে এটি সমাধান করা যায়?

zhjx2314স্টোকআরএসআই সমর্থন করে না, যত তাড়াতাড়ি সম্ভব যোগ করা যাবে কিনা

ইহফগpython নীতির বাস্তব সময় স্ক্রিপ্টগুলি তাদের নিজস্ব আলি ক্লাউড সার্ভার বা botvs ক্লাস্টারে?

ইহফগপাইথনের কোন সংস্করণ ব্যবহার করা হয়?

ফকিসলিGetFee এর ব্যাখ্যাটি হল যে এটি একটি ফি স্ট্রাকচারের একটি ট্যাগ ফেরত দেয়, একটি কমপ্যাক্ট শব্দ।

জেকওপJS এর মাধ্যমে তালেবকে কল করার পদ্ধতি কি?

ইহফগপাইথন ডকুমেন্টেশন খুঁজুন

wmjbs123কৌশল সম্পাদক কোড ব্যাকগ্রাউন্ড একটি কালো করতে পারেন? সাদা পিন্ট চোখ, রাতে কোড লেখার, সহজে অদৃশ্য

Don.রোবট উইকএন্ডে সংক্ষিপ্ত বিবরণ কিভাবে সেটআপ করবেন?

গণনাঃ পাগলঅর্ডার কাঠামোর মধ্যে একটি সমান মূল্যের ক্ষেত্র যোগ করা যাবে?

ছোট্ট ছোট্ট জিনিসGetOrders: সমস্ত অসম্পূর্ণ অর্ডার পান, একটি অর্ডার অ্যারে কাঠামো ফিরে আসে, চীনে বিটকয়েন লেনদেন ETH, শুধুমাত্র সাম্প্রতিকতম 10 টি ফিরে আসে। এখানে কি চীনে বিটকয়েন ETH এর সমস্ত অসম্পূর্ণ অর্ডার ফেরত ফাংশন আছে, যার অর্থ অন্যান্য প্ল্যাটফর্মগুলি GetOrders ব্যবহার করে সমস্ত কিছু ফেরত দিতে পারে।

ইহফগযদি আপনি একটি গণিতের ফাংশন ব্যবহার করতে চান যা পরিসংখ্যানগত সম্ভাব্যতা তত্ত্বের সাথে সম্পর্কিত হয়, তাহলে আপনি কোথায় এটি ব্যবহার করবেন?

জিবাং$.Cross ((x, y) ফাংশনের রিটার্ন মান কি?

আমার নানীLogReset সব লগ খালি করে এবং একটি সংখ্যাগত প্যারামিটার দিয়ে সংরক্ষিত রেকর্ডগুলি নির্ধারণ করতে পারে কিভাবে এটি সাম্প্রতিক কয়েকটি লগ মুছে ফেলবে?

এডওয়ার্ড জিউতালেব এর মধ্যে CORRE ফাংশনটি কি এমন মনে হচ্ছে যে এটিকে স্থানান্তরিত করা হয়নি অথবা এটি মিস করা হয়েছে?

দরিদ্র পর্বতমালাআমি মনে করি না যে এটি একটি সূচক রেফারেন্স বৈশিষ্ট্য আছে!

ছোটকিভাবে k-line সময় পড়তে এখন সময় অনুবাদ Ah, বুঝতে পারছি না, খুব দীর্ঘ এক, সমাধান, ধন্যবাদ

ছোটঅ্যারেতে সংখ্যা মুছে ফেলার পদ্ধতি, আমি records.remove ((records[0]) ব্যবহার করি, কিন্তু এটা কাজ করে না।

সাপসাধারণত ঘণ্টার কে লাইন পাওয়া যায়, কিভাবে দিনের কে লাইনের এটিআর কল করা যায়?

সাপসাধারণত ঘণ্টার কে লাইন পাওয়া যায়, কিভাবে দিনের কে লাইনের এটিআর কল করা যায়?

57278863কিভাবে ঐতিহ্যগত ফিউচার মূল্য পেতে এবং অর্ডার, দুঃখিত, পাতলা শিকড় শিখতে

কিরিনএই প্রসঙ্গে, আমি আপনাদেরকে একটি উদাহরণ দেখাতে চাই।

ছোটzero, আপনি কি একটি উদাহরণ লিখতে পারেন ঐতিহ্যগত ফিউচার ট্রেডিং সম্পর্কে?

ছোটএকাধিক শূন্যপদ একই সাথে ধরে রাখার সময়, কীভাবে হোল্ডিং অবস্থা মুদ্রণ করবেন, আমার কীভাবে [object object][object object] মুদ্রণ করবেন, কীভাবে একাধিক এবং শূন্যপদ হোল্ডিং অবস্থা পাবেন, এবং GetTicker (((), কীভাবে সপ্তাহ, পরের সপ্তাহ এবং ত্রৈমাসিকের দাম পাবেন, বন্ধনীতে যে সপ্তাহ, পরের সপ্তাহ এবং ত্রৈমাসিক আমি লিখেছি।

এক্সজিজিনফিউচার এক্সচেঞ্জগুলি কি GetTicker দিয়ে ট্রেডিং পেতে পারে?

বিক্রয়StochRSI এর কোন সূচক যোগ করা যাবে?

মোমোক্সCancelOrder ((orderId) অর্ডার নাম্বার অনুযায়ী একটি অর্ডার বাতিল করুন, true বা false ফেরত দিন, true= সেলটি সফলভাবে বাতিল করা হয়েছে, তাই না?

মোমোক্স_G(K, V) সংরক্ষণযোগ্য গ্লোবাল ডিকশনারি টেবিল। এই পদ্ধতিতে সংরক্ষিত গ্লোবাল ভেরিয়েবলগুলি বিভিন্ন নীতিগুলির মধ্যে ডেটা ভাগ করে নেওয়ার জন্য ব্যবহার করা যেতে পারে?

ফ্লুফাই৩ডিজনপ্রিয়তা

শূন্যআপনি LogProfitReset ব্যবহার করে উপার্জন লগ পুনরায় সেট করতে পারেন। আগের উপার্জন চার্টে ইতিহাস নেই।

xcyআপনি কি সরাসরি ইএ-র অনুলিপি করতে পারবেন?

সিরোনম্যানএই প্ল্যাটফর্মটি দারুণ লাগছে।

ছোটএটা কোন ভাষা, কোন শিক্ষা উপকরণ আছে?

jxhbtcডেটা ত্রুটি এক সপ্তাহের জন্য, রোবট সংযোগ করতে পারে না

ডাইহুআপনি কি মনে করেন যে, ট্যাক্স রিপোর্ট কেবল বন্ধের মূল্যের জন্য?

btcrobotহ্যালো, বিশ্ব

ছোট্ট স্বপ্ন_C ফাংশনটি সফল ফলাফল না পাওয়া পর্যন্ত পুনরায় চেষ্টা করবে।

ছোট্ট স্বপ্নপাইথনের তালিব লাইব্রেরিটি ইনস্টল করা প্রয়োজন।https://www.botvs.com/bbs-topic/669 এই পোস্টটি দেখুন।

ছোট্ট স্বপ্নSleep হল প্রোগ্রামটি কিছু না করার জন্য অপেক্ষা করছে, প্যারামিটার সেট করা আছে, _C হল ফাংশন যা একটি প্যারামিটার পুনরায় কল করে।

ছোট্ট স্বপ্নউত্তরাধিকার ছাড়াই, JS সরাসরি বস্তুর মধ্যে আবৃত হয় {name: "নতুন বস্তু", old_exchange : exchange[0],...... }

ছোট্ট স্বপ্নস্থানীয় সম্পাদক দূরবর্তী সিঙ্ক্রোনাইজেশন প্লাগইন, মূলত স্থানীয় সম্পাদক দূরবর্তী ডিউটি।

ছোট্ট স্বপ্নআপনি কি কিউকিউ গ্রুপে আসতে পারেন, এবং এটি আলোচনা করা সহজ হবে?

ছোট্ট স্বপ্নএপিআই ডকুমেন্টেশনে ধূসর অর্থ হল এই ফাংশনটি খুব বেশি ব্যাখ্যা ছাড়াই ধূসর, নীল প্রতিনিধিত্ব করে।

ছোট্ট স্বপ্নES6 অস্থায়ীভাবে অসমর্থিত, ^^

ছোট্ট স্বপ্নআপনি কি কিউকিউ গ্রুপে যেতে পারেন, আমি প্রশ্নটি বর্ণনা করি, আমি উত্তর দিই ^^

ছোট্ট স্বপ্নএটি সরাসরি একটি ত্রুটি ফেরত দেয় এবং অর্ডারটি বাতিল করে দেয় (বাস্তবে, এটি কিনতে যথেষ্ট নয়!

জুতুর্তিউদাহরণস্বরূপ, OKCoin কেনা হলে কি পরিমাণ টাকা ফিরে আসে, যদি ক্রেতাদের কাছে থাকা মানবাধিকার কয়েন বেশি হয়?

ছোট্ট স্বপ্নআমি একটি অর্ডার নম্বর ফেরত দিতে চাই, কিন্তু আমি কোন এক্সচেঞ্জের কাছে এটি ফেরত দেব?

শূন্যরান-এন্ড স্যুইচিং লেনদেনের জন্য সমর্থন রয়েছে, সর্বশেষতম হোস্ট ডাউনলোড করতে হবে। সমর্থন Bter/Poloniex বিস্তারিত API ডকুমেন্টেশন লেনদেন ফাংশন ট্যাব নীচের বর্ণনা ((ব্রাউজার ক্যাশে খালি করুন এবং যদি না দেখেন তবে আপডেট করুন)

ছোট্ট স্বপ্নQQ আমি, আমি আপনাকে সাহায্য করব আপনার প্রশ্ন খুঁজে বের করতে।

পেশাগত রক্ষকআমি হোস্টের আইপি কি সেট করতে চাই?

ছোট্ট স্বপ্নএটি একটি অন্তর্নিহিত লিঙ্ক যা তৈরি করা হয়নি। সার্ভারটি সাড়া দিচ্ছে না। API KEY অনুরোধ করার সময় কি কোনও আইপি ঠিকানা সেট করা আছে?

পেশাগত রক্ষকএটি বিব্রতকর... আমি ঠিকমত চালাতে পারি এমন কৌশল বিটকয়েন যুগে ব্যর্থ হয়েছে, গেট অ্যাকাউন্টগুলিও গেট অ্যাকাউন্টে অ্যাক্সেস করতে পারে নাঃ পোস্ট 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 বিটকয়েন যুগ ত্রুটি GetAccount: timeout 2017-05-23 21:08:02 বিটকয়েন যুগ ত্রুটি GetAccount: timeout 2017-05-23 21:07:40 বিটকয়েন যুগ ত্রুটি GetAccount: timeout 2017-05-23 21:07:20 পুনরায় চালু এটা কি আইপি হোয়াইট লিস্টের সমস্যা?

ছোট্ট স্বপ্নএক্সচেঞ্জের সার্ভারগুলি সাড়া দেয়নি, টিসিপি প্রোটোকলটি তিনটি হ্যান্ডশেকের মধ্যেও প্রতিষ্ঠিত হয়নি।

পেশাগত রক্ষকA connection attempt failed because the connected party did not properly respond after a period of time. A connection attempt failed because the connected party did not properly respond after a period of time. A connection attempt failed because the connected party did not properly respond after a period of time. একটি সংযোগ প্রচেষ্টা ব্যর্থ হয়েছে কারণ সংযুক্ত পক্ষটি সময়ের পরে সঠিকভাবে সাড়া দেয়নি।

ছোট্ট স্বপ্নহ্যালো! এটি exchange.IO ((api, ApiName, Args) ফাংশনটি সমর্থন করে না, দেখুন https://www.botvs.com/bbs-topic/812

পেশাগত রক্ষকএকটি সংযোগ প্রচেষ্টা ব্যর্থ হয়েছে কারণ সংযুক্ত পক্ষ একটি নির্দিষ্ট সময়ের পরে সঠিকভাবে সাড়া দেয়নি,

পেশাগত রক্ষকবিটকয়েন যুগের সমর্থন নেই?

ছোট্ট স্বপ্নhttps://dn-filebox.qbox.me/a709b30c6cc0a3565234b9e0c99b073f7ba8b454.png আমি মনে করি এটা ঠিক।

নিং ডেকোউদাহরণস্বরূপ, আমি পোলনিয়েক্সের জন্য সমস্ত মুদ্রা লেনদেন করতে চাই, তবে বিওটিভিএস দ্বারা সমর্থিত মুদ্রাগুলির মধ্যে কেবল কয়েকটি রয়েছে এবং এক্সচেঞ্জ.আইও পি নেটওয়ার্ককে সমর্থন করে না বলে মনে হচ্ছে।

ছোট্ট স্বপ্নআপনি exchange.IO কল করতে পারেন।

নিং ডেকোঅ্যাকাউন্ট যাচাই করার জন্য API সম্পর্কে কি?

ছোট্ট স্বপ্নযদি অ্যাকাউন্ট যাচাই করার প্রয়োজন না হয় তবে একটি এপিআই httpQuery ব্যবহার করা যেতে পারে (বিস্তারিত BotVS ডকুমেন্টেশন দেখুন), প্রকৃত লেনদেনের জন্য API অ্যাক্সেস করা প্রয়োজন।

ছোট্ট স্বপ্নHttpQuery এপিআই ব্যবহার করে এই প্যারামিটারগুলি প্রেরণ করা যেতে পারেঃ https://www.okcoin.com/api/v1/future_estimated_price.do?symbol=btc_usd, এইভাবে। অ্যাকাউন্ট যাচাই করার প্রয়োজন নেই এমন অ্যাকাউন্টগুলির জন্য এক্সচেঞ্জ এপিআই সরাসরি প্ল্যাটফর্মের এই HttpQuery ফাংশনটি ব্যবহার করে, অ্যাকাউন্টগুলির সাথে সম্পর্কিত ব্যক্তিরা আইওএপিআই ব্যবহার করে (আইও এইগুলি সমর্থন করে না যাচাই করার প্রয়োজন নেই এমন অ্যাকাউন্ট এপিআই) । পোস্টঃ https://www.botvs.com/bbs-topic/850

দর্শনধন্যবাদ, আশা করি আপনার এপিআই ডকুমেন্টেশন ভালো হবে।

ছোট্ট স্বপ্নআপনি কি জানতে চান যে এই realTicker এপিআইটি কোথায় দেখা গেছে?

ছোট্ট স্বপ্নhttps://dn-filebox.qbox.me/fe1a6f5563ed43a5357f858ecf8a50239619228e.png এপিআই ডকুমেন্টেশনটি জাভাস্ক্রিপ্ট ভাষায় বর্ণনা করা হয়েছে, পাইথন সংস্করণ বর্ণনা করা হয়েছে পাতাটির শীর্ষে পাতাটি পাতাটি পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা পাতা

শূন্যহ্যালো, পরামর্শের জন্য ধন্যবাদ, এপিআই ডকুমেন্টেশনটি বর্তমানে পুনর্নির্মাণ করা হচ্ছে।

ছোট্ট স্বপ্নহ্যালো ~ এটি দেখায় যে ভিজিট ফ্রিকোয়েন্সি সীমাবদ্ধতা অতিক্রম করেছে। https://dn-filebox.qbox.me/a09498920d04cac62624b7438a058d2098d8fb00.png আপনি কি আপনার নীতিতে Sleep (1000) ফাংশনটি ব্যবহার করেছেন? এই 1000 হল যে প্রোগ্রামটি প্রতি রাউন্ডে এক সেকেন্ড বিরতি দেয়, যা স্বয়ংক্রিয়ভাবে সেট করা যেতে পারে। এর উদ্দেশ্য হল প্রোগ্রামটি নিয়ন্ত্রণ করা। এপিআই অ্যাক্সেস করার ফ্রিকোয়েন্সি, কারণ কিছু এক্সচেঞ্জ সর্বাধিক অ্যাক্সেস সীমাবদ্ধতা সেট করেছে, একটি নির্দিষ্ট সময়ের জন্য নির্দিষ্ট সংখ্যক অ্যাক্সেস ছাড়িয়ে অ্যাক্সেস প্রত্যাখ্যান করবে, আইপি ঠিকানা ব্লক করবে।

ছোট্ট স্বপ্নhttps://dn-filebox.qbox.me/c29ab7fc279e1b758355f137907cf52dc8257df6.png আমি ব্যক্তিগতভাবে লিখেছি যে, স্টোকআরএসআই সূচকগুলির সাথে তুলনা করা হয়েছে, যা ঠিক আছে, একমত যে, গতি কিছুটা ধীর এবং অপ্টিমাইজ করা হয়েছে, যা সাময়িকভাবে উপলব্ধ।https://www.botvs.com/bbs-topic/392

শূন্যআপনি botvs দ্বারা সরবরাহিত সার্ভারে বা আপনার হোস্টের সার্ভারে পুনরায় পরীক্ষা করতে পারেন, সংস্করণ 2.7.5।

ছোট্ট স্বপ্নএই ছবিটি এখন যোগ করা হয়েছে।

ছোট্ট স্বপ্নএখন আপনি নিজের ব্যাকগ্রাউন্ড স্টাইল কনফিগার করতে পারেন।

ছোট্ট স্বপ্নপাইথন ডকুমেন্টেশন লেখা হচ্ছে।

ছোট্ট স্বপ্নতালেবানের সমর্থনে।

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

ছোট্ট স্বপ্নএটি একটি উদাহরণ, যা কৌশল স্কয়ারে দেখা যাচ্ছে, https://www.botvs.com/strategy/15098

শূন্যঅর্ডারের গড় মূল্য বৈশিষ্ট্যটি অ্যাক্সেস করুন, এক্সচেঞ্জগুলি সমর্থন করে, অ-সমর্থিত এক্সচেঞ্জগুলি 0 এ থাকবে

ইহফগতৃতীয় পক্ষের পুস্তিকা কিভাবে উদ্ধৃতি দেয়?

শূন্যmathjs যদি সন্তুষ্ট না হয়, তবে এটি কেবল তৃতীয় পক্ষের লাইব্রেরী অনুলিপি করার নীতিগুলি সন্ধান করতে পারে। কম্পাইলের গতির জন্য, সিস্টেমটি কেবলমাত্র কয়েকটি লাইব্রেরি অন্তর্নির্মিত করে।

ছোট্ট স্বপ্নআমি অনলাইনে আছি, কিন্তু আমার সাথে যোগাযোগ করতে পারলে আমার সমস্যা হবে।

জিবাংধন্যবাদ।

ছোট্ট স্বপ্নআপনি কি এই গ্রুপের মধ্যে আছেন? আপনি একটি নোটারি সংস্করণ দেখতে পারেন যেখানে আপনি $Cross ফাংশনের জন্য একটি নোটারি দেখতে পারেন।

শূন্যআপনি যদি নতুন কিছু মুছে ফেলতে না পারেন তবে আপনি কেবলমাত্র সাম্প্রতিক কয়েকটি নিবন্ধ সংরক্ষণ করতে পারেন এবং পুরানো সমস্ত মুছে ফেলতে পারেন।

কিরিনপজিশন [i] দিয়ে প্রতিটি হোল্ডিং পেতে, পজিশন একটি অ্যারে।

নিং ডেকোexchange.GetRecords ((PERIOD_D1));

কিরিনআমার ঐতিহ্যগত ফিউচার্স হল GetAccount: not login, "পাসওয়ার্ড ভুল নয়, লগইন করা যাবে না"

শূন্যডিফল্টরূপে সপ্তাহ, সেট কন্ট্রাক্ট টাইপ পেতে নির্দিষ্ট করা প্রয়োজন।

শূন্যআপনি এখন দেখতে পাচ্ছেন যে এই true হল এক্সচেঞ্জের ফিরে আসা cancellation order এর রিটার্ন ভ্যালু, কিন্তু প্রকৃত cancellation cancellation নয়, এটা নির্ভর করে এক্সচেঞ্জের ভিতরে কিভাবে এটি করা হয়।

মোমোক্স3q

শূন্যনা, এটা পৃথক।

শাওয়ানচুয়ানঅবশ্যই না, এটা MT4 এর একচেটিয়া।

শূন্যজাভাস্ক্রিপ্ট তথ্য ইন্টারনেটে সর্বত্র পাওয়া যায়।

বিক্রয়আপনার সমস্যার সমাধান হয়েছে?

শূন্যবেশিরভাগ ক্ষেত্রে, ইনপুট তথ্য সরাসরি রেকর্ড বা একটি বিশুদ্ধ মূল্য অ্যারে হতে পারে।