وسائل لوڈ ہو رہے ہیں... لوڈنگ...

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

مصنف:نیکی, تخلیق: 2020-07-25 09:24:50, تازہ کاری: 2023-10-25 19:55:50

img

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

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

اقتباس فارورڈنگ روبوٹ مثال

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

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("The service receives the request, self.path:", self.path, "query parameter:", dictParam)
            lock.acquire()
            # Recording
            if dictParam["robotId"] not in Counter:
                Counter[dictParam["robotId"]] = {"NumberOfRequests" : 0}
            Counter[dictParam["robotId"]]["NumberOfRequests"] += 1
            lock.release()
            
            # Write data response
            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), ))         # local computer test
        _thread.start_new_thread(createServer, (("0.0.0.0", 9090), ))             # Test on VPS server
        Log("Start service", "#FF0000")
    except BaseException as e:
        Log("Failed to start service!")
        Log("Error message:", e)
        raise Exception("stop")
    while True:
        r = exchange.GetRecords()
        if not r :
            Log("K-line market quotation failed", "#FF0000")
            continue
        else :
            Records = r
        # Counter
        tbl = {
            "type" : "table", 
            "title" : "Statistics", 
            "cols" : ["ID of the robot requesting data", "Number of requests"], 
            "rows" : [], 
        }
        for k in Counter:
            tbl["rows"].append([k, Counter[k]["NumberOfRequests"]])
        LogStatus(_D(), "Data collection!", "\n", "`" + json.dumps(tbl) + "`")
        Sleep(500)

درخواست ڈیٹا روبوٹ حکمت عملی کوڈ

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

var FuncGetRecords = exchange.GetRecords
exchange.GetRecords = function() {
    // You can fill in the IP address of the device where the "quote forwarding robot" is located 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(), "Robot ID:", _G())
        if (!records) {
            Log("Failed to get data!", "#FF0000")
            Sleep(1000)
            continue
        }
        Log(records)
        $.PlotRecords(records, "K")
        Sleep(1000)
    }
}

اصل آپریشن

مارکیٹ سپریڈنگ روبوٹ شروع کریں

img

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

img

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

img

اس طرح، تین یا اس سے بھی N روبوٹ ایک مخصوص ٹریڈنگ جوڑی کے K لائن ڈیٹا کا اشتراک کر سکتے ہیں.


متعلقہ

مزید