মাল্টি-রোবট মার্কেট কোট শেয়ারিং সলিউশন

লেখক:ভাল, তৈরিঃ 2020-07-25 09:24:50, আপডেটঃ 2023-10-25 19:55:50

img

ডিজিটাল মুদ্রা পরিমাণগত ট্রেডিং রোবট ব্যবহার করার সময়, যখন একটি সার্ভারে একাধিক রোবট চলছে, যদি আপনি বিভিন্ন এক্সচেঞ্জ পরিদর্শন করেন, এই সময়ে সমস্যাটি গুরুতর নয়, এবং কোনও এপিআই অনুরোধ ফ্রিকোয়েন্সি সমস্যা হবে না। যদি আপনার একাধিক রোবট একই সময়ে চলমান প্রয়োজন হয় এবং তারা সকলেই একই ট্রেডিং জোড়া পরিমাণগত ট্রেডিং কৌশল সহ একই এক্সচেঞ্জ পরিদর্শন করে। এই সময়ে, এপিআই অনুরোধ ফ্রিকোয়েন্সি সীমাবদ্ধতার কিছু সমস্যা থাকবে। সুতরাং সর্বনিম্ন সংখ্যক সার্ভারের সাথে মাল্টি-রোবট অ্যাক্সেস ইন্টারফেসের সমস্যাটি কীভাবে সমাধান করবেন?

আমরা একটি মার্কেট কোটেশন ফরওয়ার্ডিং রোবট বাস্তবায়ন করতে পারি, এবং এক্সচেঞ্জ ইন্টারফেস অ্যাক্সেস করতে বাজার কোটেশন এবং অন্যান্য তথ্য শুধুমাত্র এই রোবট দ্বারা সম্পন্ন করা যেতে পারে। অন্যান্য ট্রেডিং কৌশল রোবট এই বাজার ফরওয়ার্ডিং রোবট থেকে তথ্য অনুরোধ করতে পারেন।

উদ্ধৃতি ফরওয়ার্ডিং রোবট উদাহরণ

এটি কেবলমাত্র এক্সচেঞ্জ মার্কেটের কোটিং ইন্টারফেসে অ্যাক্সেস করার জন্য দায়ী এবং অন্যান্য রোবটকে বাজার কোটিং সরবরাহ করার জন্য। পাইথনে লেখা, উদাহরণে আমরা কেবল কে-লাইন ডেটা পাই এবং ভাগ করে নেওয়া সরবরাহ করি, যা গভীরতা ডেটা, সমষ্টিগত বাজার ডেটা ইত্যাদি বাড়ানোর জন্য প্রসারিত করা যেতে পারে।

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)

তথ্য অনুরোধ রোবট কৌশল কোড

ডেটা অনুরোধকারী রোবটটি একটি ট্রেডিং কৌশল রোবট, তবে আমরা এটি পরীক্ষার জন্য ব্যবহার করি। আমরা কেবলমাত্র অনুরোধ করা ডেটা (কে-লাইন ডেটা) লিখি এবং ডেটা আঁকতে পারি। আপনি এটি জাভাস্ক্রিপ্টে লিখতে পারেন। একটি ছবি আঁকার জন্য, আপনাকে লাইন অঙ্কন লাইব্রেরি চেক করতে হবে। কৌশল স্কোয়ারে এই ক্লাস লাইব্রেরিটি অনুসন্ধান এবং অনুলিপি করতে হবে। অনুলিপি করার পরে, আপনি কৌশল সম্পাদনা পৃষ্ঠায় টেমপ্লেট রেফারেন্স কলামে এটি নির্বাচন করতে পারেন।

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

পরীক্ষা রোবট চালু করুন, আইডিঃ 206353

img

পরীক্ষা রোবট চালু করুন, আইডিঃ 206359

img

এই ভাবে, তিনটি বা এমনকি N রোবট একটি নির্দিষ্ট ট্রেডিং জোড়ার K-লাইন ডেটা ভাগ করতে পারে।


সম্পর্কিত

আরো