संसाधन लोड हो रहा है... लोड करना...

एफएमजेड का अन्वेषण: लाइव ट्रेडिंग रणनीतियों के बीच संचार प्रोटोकॉल का अभ्यास

लेखक:FMZ~Lydia, बनाया गयाः 2024-08-08 10:09:21, अद्यतनः 2024-09-12 09:46:18

img

वित्तीय बाजारों के तेजी से विकास और मात्रात्मक व्यापार की लोकप्रियता के साथ, अधिक से अधिक व्यापारी व्यापार के लिए स्वचालित रणनीतियों पर भरोसा करना शुरू कर देते हैं। इस प्रक्रिया में, रणनीतियों के बीच संचार और समन्वय विशेष रूप से महत्वपूर्ण हैं। एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म व्यापार रणनीतियों के बीच एक कुशल संचार प्रोटोकॉल प्रदान करके व्यापारियों को निर्बाध रणनीति डॉकिंग और वास्तविक समय डेटा साझा करने में मदद करता है।

इस लेख में एफएमजेड प्लेटफॉर्म में ट्रेडिंग रणनीतियों के लाइव ट्रेडिंग संचार प्रोटोकॉल का पता लगाया जाएगा, व्यावहारिक अनुप्रयोगों में इसकी डिजाइन अवधारणा, कार्यात्मक विशेषताओं और लाभों का परिचय दिया जाएगा। विस्तृत केस विश्लेषण के माध्यम से, हम दिखाएंगे कि कुशल और स्थिर रणनीति संचार प्राप्त करने और व्यापार रणनीतियों के निष्पादन और लाभ प्रदर्शन में सुधार के लिए इस प्रोटोकॉल का उपयोग कैसे किया जाए।

चाहे आप एक मात्रात्मक ट्रेडिंग उत्साही हैं जो अभी FMZ के साथ शुरुआत कर रहे हैं या एक अनुभवी पेशेवर प्रोग्रामर हैं, यह लेख आपको मूल्यवान अंतर्दृष्टि और व्यावहारिक संचालन गाइड प्रदान करेगा। आइए FMZ प्लेटफॉर्म के शक्तिशाली कार्यों का पता लगाएं और सीखें कि कुशल संचार प्रोटोकॉल के माध्यम से रणनीतियों के बीच सहयोग कैसे प्राप्त किया जाए, व्यापार दक्षता में सुधार करें, और बाजार के अवसरों को कैप्चर करें।

मांग परिदृश्य

    1. बहु-रणनीति सहयोगात्मक व्यापार मांग का परिदृश्य: एक जटिल बाजार वातावरण में, एक एकल रणनीति विभिन्न आपात स्थितियों और बाजार परिवर्तनों का सामना करने में सक्षम नहीं हो सकती है। व्यापारी एक ही समय में कई रणनीतियों को चलाना चाहते हैं, जैसे कि प्रवृत्ति ट्रैकिंग रणनीतियाँ, औसत प्रतिगमन रणनीतियाँ, और मध्यस्थता रणनीतियाँ, और इन रणनीतियों को बाजार की जानकारी और व्यापार संकेतों को साझा करने के लिए वास्तविक समय में संवाद करने दें, जिससे समग्र व्यापार दक्षता और स्थिरता में सुधार होता है।
    1. क्रॉस-मार्केट आर्बिट्रेज मांग का परिदृश्य: व्यापारी विभिन्न व्यापारिक बाजारों के बीच मध्यस्थता लेनदेन करना चाहते हैं। उदाहरण के लिए, ए-शेयर बाजार और हांगकांग शेयर बाजार के बीच मूल्य अंतर का उपयोग करके मध्यस्थता। जब एक निश्चित बाजार में मूल्य विसंगति होती है, तो रणनीति को मध्यस्थता के अवसरों को पकड़ने के लिए संबंधित खरीद और बिक्री संचालन करने के लिए अन्य बाजारों में रणनीतियों को तुरंत सूचित करने की आवश्यकता होती है।
    1. जोखिम प्रबंधन और हेजिंग मांग का परिदृश्य: एक रणनीति बाजार में उच्च जोखिम वाले, उच्च रिटर्न वाले लेनदेन को खोजने और निष्पादित करने के लिए जिम्मेदार है, जबकि दूसरी रणनीति समग्र जोखिम की निगरानी और हेजिंग संचालन करने पर केंद्रित है। यह सुनिश्चित करने के लिए कि उच्च जोखिम वाले लेनदेन के दौरान अत्यधिक नुकसान न हो, इन दोनों रणनीतियों को स्थिति को समायोजित करने और समय पर जोखिम को कवर करने के लिए वास्तविक समय में डेटा संवाद और साझा करने की आवश्यकता है।
    1. वितरित व्यापार प्रणाली मांग का परिदृश्य: बड़े ट्रेडिंग संस्थान ट्रेडिंग सिस्टम की विफलता सहनशीलता और प्रदर्शन में सुधार के लिए कई भौतिक सर्वरों पर वितरित ट्रेडिंग सिस्टम चलाना चाहते हैं। इन सर्वरों पर रणनीतियों को समग्र ट्रेडिंग सिस्टम की स्थिरता और कुशल संचालन सुनिश्चित करने के लिए संचार प्रोटोकॉल के माध्यम से डेटा को सिंक्रनाइज़ करने और संचालन का समन्वय करने की आवश्यकता है।
    1. बाजार की निगरानी और प्रारंभिक चेतावनी मांग का परिदृश्य: एक रणनीति बाजार की गतिशीलता की वास्तविक समय की निगरानी के लिए जिम्मेदार है। जब बाजार में प्रमुख परिवर्तन होते हैं (जैसे कि अचानक मूल्य में गिरावट या वृद्धि), रणनीति को जोखिम को कम करने या व्यापारिक अवसरों को जब्त करने के लिए, संबंधित प्रतिक्रिया कार्यों को लेने के लिए अन्य रणनीतियों को जल्दी से सूचित करने की आवश्यकता होती है, जैसे कि पदों को बंद करना, पदों को समायोजित करना या पदों को जोड़ना।
    1. पोर्टफोलियो रणनीति प्रबंधन मांग का परिदृश्य: ट्रेडर विभिन्न परिसंपत्ति वर्गों में निवेश का प्रबंधन करने के लिए रणनीतियों के एक पोर्टफोलियो का उपयोग करते हैं, प्रत्येक रणनीति एक विशिष्ट परिसंपत्ति वर्ग (जैसे स्टॉक, बांड, वायदा, आदि) पर केंद्रित होती है। इन रणनीतियों को पोर्टफोलियो निवेश के समग्र अनुकूलन और अधिकतम रिटर्न प्राप्त करने के लिए संवाद करने और समन्वय करने की आवश्यकता होती है।

ये मांग परिदृश्य व्यावहारिक अनुप्रयोगों में एफएमजेड ट्रेडिंग रणनीति लाइव ट्रेडिंग संचार प्रोटोकॉल की विभिन्न संभावनाओं और लाभों को प्रदर्शित करते हैं। प्रभावी अंतर-रणनीति संचार के माध्यम से, व्यापारी जटिल बाजार वातावरण से बेहतर ढंग से निपट सकते हैं, व्यापार रणनीतियों को अनुकूलित कर सकते हैं, और व्यापार दक्षता और लाभ में सुधार कर सकते हैं।

एफएमजेड कैप्सुलेटेड कम्युनिकेशन प्रोटोकॉल और डायल फ़ंक्शन

लाइव ट्रेडिंग के बीच संचार आवश्यकताओं को समझने के बाद, हमें इन आवश्यकताओं को लागू करने के तरीके पर विचार करने की आवश्यकता है। यह लाइव ट्रेडिंग ए से अधिक कुछ नहीं है जो लाइव ट्रेडिंग बी के साथ जानकारी का आदान-प्रदान करने की उम्मीद करता है। हालांकि आवश्यकताएं सरल लगती हैं, संचार प्रोटोकॉल के एक सेट का उपयोग करने पर विभिन्न विवरणों पर सहमति बनाने की आवश्यकता है। एफएमजेड ने कई लोकप्रिय संचार प्रोटोकॉल को शामिल किया है।

mqtt / nats / amqp / kafka

संचार वास्तुकला

संचार वास्तुकला हैः

  • सर्वर (प्रॉक्सी) एक सर्वर जो एक संचार प्रोटोकॉल चलाता है, उसे ग्राहकों और प्रकाशकों के बीच संदेशों को रिले करने की आवश्यकता होती है। इस सर्वर को स्थानीय रूप से डॉकर के सिस्टम पर (स्थानीय लाइव ट्रेडिंग संचार के लिए) या रिमोट सेवा (क्रॉस-सर्वर लाइव ट्रेडिंग संचार के लिए) के रूप में तैनात किया जा सकता है।
  • ग्राहक (ग्राहक, प्रकाशक) । एफएमजेड पर रणनीति लाइव ट्रेडिंग प्रोग्राम को संचार प्रोटोकॉल के ग्राहक के रूप में समझा जा सकता है। रणनीति वास्तविक समय कार्यक्रम एक प्रकाशक (पब) या एक ग्राहक (उप) हो सकता है।

डायल फ़ंक्शन

FMZ प्लेटफॉर्म पर इन प्रोटोकॉल को लागू करते समय यह आसानी से समझा जा सकता है कि mqtt / nats / amqp / kafkaprotocolsDial()कार्य, औरDial()फ़ंक्शन का उपयोग संदेशों को प्रकाशित करने और सदस्यता लेने के लिए किया जाता है। ये प्रकाशित संदेश प्रोटोकॉल सर्वर के माध्यम से सदस्यता प्राप्त लाइव ट्रेडिंग के लिए प्रॉक्सी (रिले) किए जाते हैं, इसलिए पहले एक प्रोटोकॉल सर्वर चलाना आवश्यक है। प्रदर्शन के लिए, हम निम्नलिखित उदाहरणों में विभिन्न प्रोटोकॉल सर्वर छवि तैनाती का उपयोग करते हैं।

एपीआई प्रलेखन अनुभाग में डायल फ़ंक्शनःhttps://www.fmz.com/syntax-guide#fun_dial

डॉकर छवि को तैनात करने से पहले, डॉकर सॉफ़्टवेयर को पहले स्थापित करना याद रखें.

img

इसके बाद, आइए FMZ द्वारा समर्थित संचार प्रोटोकॉल अनुप्रयोगों का अन्वेषण और अभ्यास करें।

एफएमजेड प्लेटफार्म लाइव ट्रेडिंग कम्युनिकेशन प्रोटोकॉल प्रथा

mqtt प्रोटोकॉल

MQTT (Message Queuing Telemetry Transport) एक हल्का संदेश संचरण प्रोटोकॉल है जो विशेष रूप से कम बैंडविड्थ, उच्च विलंबता या अविश्वसनीय नेटवर्क वातावरण के लिए उपयुक्त है। इसे 1999 में आईबीएम के एंडी स्टैनफोर्ड-क्लार्क और अर्लेन निपर द्वारा प्रस्तावित किया गया था और बाद में एक आईएसओ मानक (आईएसओ / आईईसी पीआरएफ 20922) बन गया।

एमक्यूटीटी प्रोटोकॉल की मुख्य विशेषताएंः प्रकाशन/सदस्यता मोड

  • प्रकाशनः संदेश निर्माता विषय को संदेश भेजता है।
  • सदस्यताः एक संदेश उपभोक्ता रुचि के विषय की सदस्यता लेता है, जिससे उस विषय पर प्रकाशित संदेश प्राप्त होते हैं।
  • ब्रोकर: एमक्यूटीटी संदेशों को आगे भेजने के लिए एक मध्यस्थ के रूप में एक संदेश ब्रोकर का उपयोग करता है, जिससे प्रकाशकों और ग्राहकों के बीच जुदाई सुनिश्चित होती है।

संदेश प्रकाशन और सदस्यता

चूंकि हम MQTT प्रॉक्सी सर्वर को तैनात करने के लिए MQTT प्रोटोकॉल का समर्थन करने वाले सॉफ़्टवेयर की डॉकर छवि (eclipse-mosquitto image) का उपयोग करते हैं, इसलिए हमने पहले से डॉकर स्थापित किया है और बाद में विवरण में नहीं जाएंगे।

छवि को तैनात करने के लिए आदेश चलाने से पहले, हम एक प्रॉक्सी सर्वर विन्यास फ़ाइल लिखने की जरूरत हैmosquitto.conf.

# Configure port number and remote access IP
listener 1883 0.0.0.0
# Setting up anonymous access
allow_anonymous true

फिर तैनाती कमांड निष्पादित करेंः

docker run --rm -p 1883:1883 -v ./mosquitto.conf:/mosquitto/config/mosquitto.conf eclipse-mosquitto

प्रॉक्सी सर्वर छवि चलाने के बाद, निम्न प्रदर्शित होता हैः

1723012640: mosquitto version 2.0.18 starting
1723012640: Config loaded from /mosquitto/config/mosquitto.conf.
1723012640: Opening ipv4 listen socket on port 1883.
1723012640: mosquitto version 2.0.18 running

फिर हम रणनीति का परीक्षण कर उसे व्यवहार में ला सकते हैं।

var conn = null

function main() {
    LogReset(1)
    var robotId = _G()
    Log("Current live trading robotId:", robotId)

    conn = Dial("mqtt://127.0.0.1:1883?topic=test_topic")
    if (!conn) {
        Log("Communication failure!")
        return 
    }

    for (var i = 0; i < 10; i++) {
        // Write
        var msg = "i: " + i + ", testQueue, robotA, robotId: " + robotId + ", time:" + _D()        
        conn.write(msg)
        Log("Write a message to testQueue:", msg)

        // Read
        Log("read:", conn.read(1000), "#FF0000")

        Sleep(1000)
    }    
}

function onexit() {
    conn.close()
    Log("close conn")
}

रणनीति कोड में डायल फ़ंक्शन का मुख्य उपयोग हैः

Dial("mqtt://127.0.0.1:1883?topic=test_topic")

डायल फ़ंक्शन की स्ट्रिंग पैरामीटर के साथ शुरू होता हैmqtt://, जो प्रोटोकॉल का नाम है, इसके बाद सुनने का पता और पोर्ट है। प्रतीक ? के बाद सदस्यता/प्रकाशन विषय का नाम है। यहां परीक्षण किया गया विषय का नाम हैःtest_topic.

उपरोक्त रणनीति एक ही समय में एक विषय को प्रकाशित करती है और सदस्यता लेती है। चल रहा परीक्षण चित्र में दिखाया गया हैः

img

हम दो लाइव ट्रेडिंग का उपयोग एक दूसरे को सब्सक्राइब करने और विषय जानकारी प्रकाशित करने के लिए भी कर सकते हैं। हम इस तरह के एक उदाहरण का उपयोग नट्स प्रोटोकॉल अभ्यास अनुभाग में करते हैं, और अन्य प्रोटोकॉल में इस विधि को नहीं दोहराएंगे।

प्रोटोकॉल

एनएटीएस प्रोटोकॉल एक सरल, पाठ-आधारित प्रकाशित / सदस्यता शैली प्रोटोकॉल है। क्लाइंट gnatsd (एनएटीएस सर्वर) से जुड़ता है और gnatsd के साथ संवाद करता है। संचार साधारण टीसीपी / आईपी सॉकेट पर आधारित है और संचालन का एक बहुत छोटा सेट परिभाषित करता है। न्यूलाइन समाप्ति को इंगित करता है। पारंपरिक संदेश संचार प्रणालियों के विपरीत जो द्विआधारी संदेश प्रारूपों का उपयोग करते हैं, पाठ-आधारित एनएटीएस प्रोटोकॉल क्लाइंट कार्यान्वयन को बहुत सरल बनाता है और आसानी से विभिन्न प्रोग्रामिंग भाषाओं या स्क्रिप्टिंग भाषाओं में लागू किया जा सकता है।

प्रत्येक प्रोटोकॉल की अपनी विशेषताएं हैं। आप विशिष्ट दस्तावेजों और सामग्रियों का संदर्भ ले सकते हैं, जिन्हें यहां विस्तार से नहीं बताया जाएगा।

NATS प्रोटोकॉल सर्वर को तैनात करेंः

docker run name nats rm -p 4222:4222 -p 8222:8222 nats http_port 8222 auth admin

यह डॉकर कमांड स्वचालित रूप से nats छवि को डाउनलोड और चलाएगा, और पोर्ट 4222 वह पोर्ट है जिसे क्लाइंट को एक्सेस करने की आवश्यकता है। छवि को तैनात करने के बाद पोर्ट 8222 पर एक http मॉनिटर भी खोला जाएगा।

Listening for client connections on 0.0.0.0:4222
Server is ready

Nats सर्वर छवि चलाने के लिए शुरू होता है, पोर्ट 4222 पर सुन रहा है।

स्थानीय उपकरण लाइव ट्रेडिंग रणनीतियों के बीच संचार

हमें दो रणनीतियों (लाइव ट्रेडिंग) बनाने की आवश्यकता है, आइए उन्हें रणनीति ए और रणनीति बी नाम दें। इन दोनों रणनीतियों के कोड मूल रूप से समान हैं। वे जावास्क्रिप्ट में लिखे गए हैं, जो एफएमजेड प्लेटफॉर्म पर उपयोग करने के लिए सबसे आसान भाषा है।

  • रणनीति ए
var connPub = null 
var connSub = null

function main() {
    var robotId = _G()
    Log("Current live trading robotId:", robotId)

    connPub = Dial("nats://admin@127.0.0.1:4222?topic=pubRobotA")
    if (!connPub) {
        Log("Communication failure!")
        return 
    }

    connSub = Dial("nats://admin@127.0.0.1:4222?topic=pubRobotB")
    if (!connSub) {
        Log("Communication failure!")
        return 
    }

    while (true) {
        connPub.write("Message posted by robotA, robotId: " + robotId + ", time:" + _D())
        var msgRead = connSub.read(10000)
        if (msgRead) {
            Log("msgRead:", msgRead)
        }

        LogStatus(_D())
        Sleep(10000)
    }
}

function onexit() {
    connPub.close()
    connSub.close()
}
  • रणनीति बी
var connPub = null 
var connSub = null

function main() {
    var robotId = _G()
    Log("Current live trading robotId:", robotId)

    connPub = Dial("nats://admin@127.0.0.1:4222?topic=pubRobotB")
    if (!connPub) {
        Log("Communication failure!")
        return 
    }

    connSub = Dial("nats://admin@127.0.0.1:4222?topic=pubRobotA")
    if (!connSub) {
        Log("Communication failure!")
        return 
    }

    while (true) {
        connPub.write("Message posted by robotB, robotId: " + robotId + ", time:" + _D())
        var msgRead = connSub.read(10000)
        if (msgRead) {
            Log("msgRead:", msgRead)
        }

        LogStatus(_D())
        Sleep(10000)
    }
}

function onexit() {
    connPub.close()
    connSub.close()
}

ये दो रणनीतियाँ लगभग समान हैं, सिवाय इसके कि वे एक दूसरे को प्रकाशित और सदस्यता लेते हैं, और सदस्यता प्राप्त विषय, प्रकाशित विषय और प्रकाशित जानकारी अलग हैं।

उदाहरण के तौर पर रणनीति बी लीजिए:

    1. उपयोग करेंDial()क्लाइंट कनेक्शन सर्वर ऑब्जेक्ट बनाने के लिए फ़ंक्शनconnPubविषय संदेश प्रकाशन के लिएः

var connPub = डायल करें127.0.0.1:4222?topic=pubRobotB”)

डायल फ़ंक्शन की पैरामीटर स्ट्रिंग के साथ शुरू होता हैnats://यह दर्शाता है कि संचार के लिए NATS प्रोटोकॉल का उपयोग किया जाता है।adminसरल सत्यापन जानकारी हैauth adminजब डॉकर छवि को तैनात किया जाता है। निम्नलिखित सामग्री को अलग करने के लिए @ वर्ण का उपयोग किया जाता है। फिर सेवा पता और पोर्ट है127.0.0.1:4222अंत में, प्रकाशित/सब्सक्राइब विषय हैःtopic=pubRobotBध्यान दें कि ? चिह्न का उपयोग इसे पिछले पते से अलग करने के लिए किया जाता है।

    1. उपयोग करेंDial()क्लाइंट कनेक्शन सर्वर ऑब्जेक्ट बनाने के लिए फ़ंक्शनconnSubविषय संदेश सदस्यता के लिएः

var connSub = डायल करें127.0.0.1:4222?topic=pubRobotA”)

एकमात्र अंतर यह हैtopic=pubRobotA, क्योंकि हम विषय के लिए सदस्यता की जरूरत हैpubRobotAजहां रणनीति ए सूचना भेजती है।

रणनीति A में सदस्यता और प्रकाशन कनेक्शन वस्तुओं का निर्माण और उपयोग ऊपर वर्णित के समान है।

  • रणनीति ए चलती है

img

  • रणनीति बी चलती है

img

इस प्रकार, NATS प्रोटोकॉल एप्लिकेशन का एक सरल उदाहरण लागू किया जाता है जिसमें लाइव ट्रेडिंग A और लाइव ट्रेडिंग B एक दूसरे के साथ संवाद करने के लिए संदेशों की सदस्यता लेते हैं और प्रकाशित करते हैं।

amqp प्रोटोकॉल

amqp प्रोटोकॉल कतार

एसिंक्रोनस संचार में, संदेश प्राप्तकर्ता तक तुरंत नहीं पहुंचेगा, लेकिन इसे कंटेनर में संग्रहीत किया जाएगा। जब कुछ शर्तें पूरी हो जाती हैं, तो संदेश कंटेनर द्वारा प्राप्तकर्ता को भेजा जाएगा। यह कंटेनर संदेश कतार है। इस कार्य को पूरा करने के लिए, दोनों पक्षों और कंटेनर और इसके घटकों को एकीकृत समझौतों और नियमों का पालन करना चाहिए। एएमक्यूपी एक ऐसा प्रोटोकॉल है। संदेश के प्रेषक और प्राप्तकर्ता दोनों इस प्रोटोकॉल का पालन करके एसिंक्रोनस संचार को लागू कर सकते हैं। यह प्रोटोकॉल संदेश के प्रारूप और काम करने की विधि को निर्धारित करता है।

प्रत्येक प्रोटोकॉल की अपनी विशेषताएं हैं। आप विशिष्ट दस्तावेजों और सामग्रियों का संदर्भ ले सकते हैं, जिन्हें यहां विस्तार से नहीं बताया जाएगा।

amqp प्रोटोकॉल सर्वर तैनात करेंः

docker run rm hostname my-rabbit name rabbit -p 5672:5672 -p 15672:15672 -e RABBITMQ_DEFAULT_USER=q -e RABBITMQ_DEFAULT_PASS=admin rabbitmq:3-प्रबंधन

डॉकर छवि को तैनात करते समय, यह स्वचालित रूप से डाउनलोड और तैनात करेगा, और जब यह पूरा हो जाएगा तो यह प्रदर्शित करेगाः

2024-08-06 09:02:46.248936+00:00 [info] <0.9.0> Time to start RabbitMQ: 15569 ms

सर्वर छवि को तैनात करने के बाद, एक परीक्षण उदाहरण लिखेंः

var conn = null

function main() {
    LogReset(1)
    var robotId = _G()
    Log("Current live trading robotId:", robotId)

    conn = Dial("amqp://q:admin@127.0.0.1:5672/?queue=robotA_Queue")
    if (!conn) {
        Log("Communication failure!")
        return 
    }

    for (var i = 0; i < 10; i++) {
        // Read
        Log("read:", conn.read(1000), "#FF0000")
        
        // Write
        var msg = "i: " + i + ", testQueue, robotA, robotId: " + robotId + ", time:" + _D()        
        conn.write(msg)
        Log("Write a message to testQueue:", msg)

        Sleep(1000)
    }    
}

function onexit() {
    conn.close()
    Log("close conn")
}

एएमक्यूपी प्रोटोकॉल कतार का उपयोग करते समय, कृपया ध्यान दें कि प्रकाशित संदेश कतार में बने रहेंगे। उदाहरण के लिए, यदि हम उपरोक्त उदाहरण कोड चलाते हैं, तो कतार में 10 संदेश लिखे जाएंगे। फिर जब हम इसे दूसरी बार चलाते हैं, तो हम पा सकते हैं कि पहले लिखित संदेश को पढ़ने पर फिर से पढ़ा जाएगा। जैसा कि चित्र में दिखाया गया हैः

img

हम देख सकते हैं कि स्क्रीनशॉट में लाल तीरों द्वारा इंगित किए गए दो लॉग संदेशों में असंगत समय हैं। इसका कारण यह है कि लाल संदेश वह है जिसे रणनीति कोड पहली बार चलाए जाने पर कतार में पढ़ा और लिखा गया था।

इस विशेषता के आधार पर, कुछ आवश्यकताओं को पूरा किया जा सकता है। उदाहरण के लिए, रणनीति को फिर से शुरू करने के बाद, आरंभिक गणना और अन्य संचालन के लिए कतार से रिकॉर्ड किए गए बाजार डेटा को अभी भी प्राप्त किया जा सकता है।

काफका प्रोटोकॉल

अपाचे काफ्का एक वितरित डेटा स्टोर है जिसे वास्तविक समय में स्ट्रीमिंग डेटा को निगलने और संसाधित करने के लिए अनुकूलित किया गया है। स्ट्रीमिंग डेटा डेटा है जो लगातार हजारों डेटा स्रोतों द्वारा उत्पन्न किया जाता है, अक्सर एक साथ डेटा रिकॉर्ड भेजते हैं। एक स्ट्रीमिंग प्लेटफॉर्म को डेटा के इस निरंतर प्रवाह को संभालने की आवश्यकता होती है, इसे क्रमिक और वृद्धिशील रूप से संसाधित करते हुए।

काफ्का अपने उपयोगकर्ताओं को तीन मुख्य कार्य प्रदान करता हैः

  • रिकॉर्ड स्ट्रीम का प्रकाशन और सदस्यता
  • प्रभावी ढंग से रिकॉर्ड की एक धारा वे उत्पन्न किए गए क्रम में स्टोर करें
  • वास्तविक समय में रिकॉर्ड स्ट्रीम की प्रक्रिया

काफ्का का उपयोग मुख्य रूप से वास्तविक समय स्ट्रीमिंग डेटा पाइपलाइन और एप्लिकेशन बनाने के लिए किया जाता है जो डेटा स्ट्रीम के अनुकूल होते हैं। यह मैसेजिंग, स्टोरेज और स्ट्रीम प्रोसेसिंग क्षमताओं को जोड़ती है, और ऐतिहासिक और वास्तविक समय डेटा स्टोर कर सकती है।

संदेश प्रकाशन और सदस्यता

काफ्का प्रॉक्सी के डॉकर छवि को तैनात करेंः

docker run --rm --name kafka-server --hostname kafka-server -p 9092:9092 -p 9093:9093 \
        -e KAFKA_CFG_NODE_ID=0 \
        -e KAFKA_CFG_PROCESS_ROLES=controller,broker \
        -e KAFKA_CFG_LISTENERS=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093 \
        -e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 \
        -e KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT \
        -e KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka-server:9093 \
        -e KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER \
        bitnami/kafka:latest

परीक्षण कोड का प्रयोग करके परीक्षणः

var conn = null

function main() {
    LogReset(1)
    var robotId = _G()
    Log("Current live trading robotId:", robotId)

    conn = Dial("kafka://localhost:9092/test_topic")
    if (!conn) {
        Log("Communication failure!")
        return 
    }

    for (var i = 0; i < 10; i++) {
        // Write
        var msg = "i: " + i + ", testQueue, robotA, robotId: " + robotId + ", time:" + _D()        
        conn.write(msg)
        Log("Write a message to testQueue:", msg)

        // Read
        Log("read:", conn.read(1000), "#FF0000")

        Sleep(1000)
    }    
}

function onexit() {
    conn.close()
    Log("close conn")
}

चलिए एक नज़र डालते हैं कि डायल फ़ंक्शन में संदेश प्रकाशित करने और सदस्यता लेने के लिए काफ्का प्रोटोकॉल का उपयोग कैसे करें।

Dial("kafka://localhost:9092/test_topic")

अन्य प्रोटोकॉल की तरह, पहला भाग प्रोटोकॉल का नाम है. फिर इसके बाद सुनने का पता हैःlocalhost:9092. फिर एक विभाजक के रूप में प्रतीक / का उपयोग करें, इसके बाद सदस्यता/प्रकाशन विषय। यहाँ परीक्षण विषय को सेट किया गया हैtest_topic.

परीक्षण परिणाम:

img


अधिक