ملٹی روبوٹ مارکیٹ شیئرنگ حل

مصنف:چھوٹا سا خواب, تخلیق: 2020-07-15 16:25:20, تازہ کاری: 2023-09-27 19:36:39

img

ملٹی روبوٹ مارکیٹ شیئرنگ حل

ڈیجیٹل کرنسی کی کوانٹیفیکیشن ٹرانزیکشن روبوٹ کا استعمال کرتے ہوئے ، جب ایک سرور پر متعدد روبوٹ چلانے کی ضرورت ہوتی ہے تو ، اگر مختلف تبادلے تک رسائی حاصل کی جائے تو ، اس وقت کوئی مسئلہ نہیں ہے ، API درخواست کی تعدد کے مسائل پیدا نہیں ہوتے ہیں۔ اگر متعدد روبوٹ کو بیک وقت چلانے کی ضرورت ہے ، اور ایک ہی تبادلے ، ایک ہی تجارتی جوڑی کے لئے کوانٹیفیکیشن ٹرانزیکشن کی حکمت عملی ہے۔ اس وقت API درخواست کی تعدد کی حد کا مسئلہ ہے۔ پھر کم سے کم سرور کے استعمال کے ساتھ متعدد روبوٹ تک رسائی کے انٹرفیس کے مسئلے کو کیسے حل کیا جائے؟

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

روبوٹ ٹرانسفر کی مثال

صرف تبادلے کے بازار انٹرفیس تک رسائی حاصل کرنے کے لئے ڈیٹا حاصل کرنے اور دوسرے روبوٹ کو مارکیٹنگ فراہم کرنے کے لئے ذمہ دار ہے۔Pythonاس کے علاوہ، ہم نے اس طرح کے اعداد و شمار کے لئے ایک بہت بڑا ڈیٹا بیس تیار کیا ہے، جس میں ہم صرف K لائن ڈیٹا حاصل کرتے ہیں، اور اشتراک فراہم کرتے ہیں، جس میں گہرائی کے اعداد و شمار کو بڑھانے کے لئے توسیع کی جاسکتی ہے، مارکیٹ کے اعداد و شمار کو جمع کرنا.

import _thread
import threading
import json
import math
from http.server import HTTPServer, BaseHTTPRequestHandler
from urllib.parse import parse_qs, urlparse

Records = None
lock = threading.RLock()
Counter = {}

def url2Dict(url):
    query = urlparse(url).query  
    params = parse_qs(query)  
    result = {key: params[key][0] for key in params}  
    return result

class Provider(BaseHTTPRequestHandler):
    def do_GET(self):
        global Records, lock, Counter
        try:
            self.send_response(200)
            self.send_header("Content-type", "application/json")
            self.end_headers()

            dictParam = url2Dict(self.path)
            # Log("服务接收到请求,self.path:", self.path, "query 参数:", dictParam)
            lock.acquire()
            # 记录
            if dictParam["robotId"] not in Counter:
                Counter[dictParam["robotId"]] = {"NumberOfRequests" : 0}
            Counter[dictParam["robotId"]]["NumberOfRequests"] += 1
            lock.release()
            
            # 写入数据应答
            self.wfile.write(json.dumps(Records).encode())
        except BaseException as e:
            Log("Provider do_GET error, e:", e)


def createServer(host):
    try:
        server = HTTPServer(host, Provider)
        Log("Starting server, listen at: %s:%s" % host)
        server.serve_forever()
    except BaseException as e:
        Log("createServer error, e:", e)
        raise Exception("stop")

def main():
    global Records, Counter
    LogReset(1)
    try:
        # _thread.start_new_thread(createServer, (("localhost", 9090), ))         # 本机测试
        _thread.start_new_thread(createServer, (("0.0.0.0", 9090), ))             # VPS服务器上测试
        Log("启动服务", "#FF0000")
    except BaseException as e:
        Log("启动服务失败!")
        Log("错误信息:", e)
        raise Exception("stop")
    while True:
        r = exchange.GetRecords()
        if not r :
            Log("K线行情获取失败", "#FF0000")
            continue
        else :
            Records = r
        # Counter
        tbl = {
            "type" : "table", 
            "title" : "统计信息", 
            "cols" : ["请求数据的机器人id", "请求次数"], 
            "rows" : [], 
        }
        for k in Counter:
            tbl["rows"].append([k, Counter[k]["NumberOfRequests"]])
        LogStatus(_D(), "数据收集中!", "\n", "`" + json.dumps(tbl) + "`")
        Sleep(500)
        

ڈیٹا روبوٹ پالیسی کوڈ کی درخواست کریں

اعداد و شمار کی درخواست کرنے والا روبوٹ تجارتی حکمت عملی کا روبوٹ ہے ، لیکن ہم اسے جانچنے کے لئے استعمال کرتے ہیں ، صرف درخواست کا ڈیٹا لکھتے ہیں (K لائن ڈیٹا) اور اعداد و شمار کو باہر کھینچتے ہیں ، جو استعمال کیا جاسکتا ہے۔JavaScriptلکھنا ، ڈرائنگ کے لئے ، "ڈرائنگ لائن کلاس لائبریری" کو چیک کرنے کی ضرورت ہے۔ اس کلاس لائبریری کو پالیسی اسکوائر سرچ میں کاپی کیا جاسکتا ہے ، اور اس کے بعد پالیسی میں ترمیم کے صفحے پر ٹیمپلیٹ حوالہ جات کا ایک ٹکڑا کاپی کیا جاسکتا ہے۔

var FuncGetRecords = exchange.GetRecords
exchange.GetRecords = function() {
    // 可以填写「行情转发机器人」所在设备的IP地址xxx.xxx.xxx.xxx
    var ret = HttpQuery("http://xxx.xxx.xxx.xxx:9090?robotId=" + _G())  
    var records = null
    try {
        records = JSON.parse(ret)
    } catch(e) {
        Log(e)
        records = null
    }
    return records 
}

function main(){
    LogReset(1)
    while(1) {
        var records = exchange.GetRecords()
        LogStatus(_D(), "机器人ID:", _G())
        if (!records) {
            Log("获取数据失败!", "#FF0000")
            Sleep(1000)
            continue
        }
        Log(records)
        $.PlotRecords(records, "K")
        Sleep(1000)
    }
}

عملی طور پر کام

  • روبوٹ کی مارکیٹنگ کا آغازimg

  • ٹیسٹ روبوٹ شروع کریں، ID:206353img

  • ٹیسٹ روبوٹ شروع کریں، ID:206359img

  • ٹیسٹ روبوٹ شروع کریں، ID:206360img

اس طرح تین یا N روبوٹ کسی بھی ٹرانزیکشن کے لئے K لائن ڈیٹا کا اشتراک کرسکتے ہیں۔ آپ کا استقبال ہے، آپ کا شکریہ۔


متعلقہ

مزید

شارٹ لائن پر شاہ جیون نے اعلی قیمت کی حکمت عملی فروخت کیمشرق مشرق

زون فینگ91 666