avatar of 发明者量化-小小梦 发明者量化-小小梦
پر توجہ دیں نجی پیغام
4
پر توجہ دیں
1271
پیروکار

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

میں تخلیق کیا: 2020-07-15 16:25:20, تازہ کاری: 2024-12-10 10:11:04
comments   4
hits   2309

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

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

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

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

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

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

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-line ڈیٹا) لکھتے ہیں اور ڈیٹا کھینچتے ہیں۔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)
    }
}

اصل آپریشن

  • مارکیٹ فارورڈنگ روبوٹ شروع کریں۔ ملٹی روبوٹ مارکیٹ شیئرنگ حل

  • ٹیسٹ روبوٹ شروع کریں، ID: 206353 ملٹی روبوٹ مارکیٹ شیئرنگ حل

  • ٹیسٹ روبوٹ شروع کریں، ID: 206359 ملٹی روبوٹ مارکیٹ شیئرنگ حل

  • ٹیسٹ روبوٹ شروع کریں، ID: 206360 ملٹی روبوٹ مارکیٹ شیئرنگ حل

اس طرح، تین یا یہاں تک کہ N روبوٹ ایک مخصوص تجارتی جوڑے کے K-line ڈیٹا کا اشتراک کر سکتے ہیں۔ یہ صرف ایک نقطہ آغاز ہے، پیغام چھوڑنے میں خوش آمدید۔