4
ध्यान केंद्रित करना
1076
समर्थक

FMZ की खोज: वास्तविक ट्रेडिंग रणनीतियों के बीच संचार प्रोटोकॉल का अभ्यास

में बनाया: 2024-08-06 14:13:40, को अपडेट: 2024-11-05 17:50:35
comments   0
hits   564

[TOC]

FMZ की खोज: वास्तविक ट्रेडिंग रणनीतियों के बीच संचार प्रोटोकॉल का अभ्यास

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

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

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


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

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

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


FMZ पैकेज का संचार प्रोटोकॉल और डायल फ़ंक्शन

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

mqtt / nats / amqp / kafka

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

संचार वास्तुकला इस प्रकार है:

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

डायल फ़ंक्शन

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

डायल फ़ंक्शन API दस्तावेज़ अनुभाग: https://www.fmz.com/syntax-guide#fun_dial

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

FMZ की खोज: वास्तविक ट्रेडिंग रणनीतियों के बीच संचार प्रोटोकॉल का अभ्यास

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


FMZ प्लेटफ़ॉर्म वास्तविक समय संचार प्रोटोकॉल अभ्यास

एमक्यूटीटी प्रोटोकॉल

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

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

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

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

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

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

# 配置端口号及远程访问IP
listener 1883 0.0.0.0
# 设置匿名访问
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("当前实盘robotId:", robotId)

    conn = Dial("mqtt://127.0.0.1:1883?topic=test_topic")
    if (!conn) {
        Log("通信失败!")
        return 
    }

    for (var i = 0; i < 10; i++) {
        // 写入
        var msg = "i: " + i + ", testQueue, robotA, robotId: " + robotId + ", time:" + _D()        
        conn.write(msg)
        Log("向testQueue写入消息:", msg)

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

        Sleep(1000)
    }    
}

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

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

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

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

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

FMZ की खोज: वास्तविक ट्रेडिंग रणनीतियों के बीच संचार प्रोटोकॉल का अभ्यास

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


NATS प्रोटोकॉल

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

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

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 पर सुनते हुए चलना शुरू हो जाती है।

स्थानीय डिवाइस के बीच संचार वास्तविक समय की रणनीतियाँ

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

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

  function main() {
      var robotId = _G()
      Log("当前实盘robotId:", robotId)

      connPub = Dial("nats://admin@127.0.0.1:4222?topic=pubRobotA")
      if (!connPub) {
          Log("通信失败!")
          return 
      }

      connSub = Dial("nats://admin@127.0.0.1:4222?topic=pubRobotB")
      if (!connSub) {
          Log("通信失败!")
          return 
      }

      while (true) {
          connPub.write("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("当前实盘robotId:", robotId)

      connPub = Dial("nats://admin@127.0.0.1:4222?topic=pubRobotB")
      if (!connPub) {
          Log("通信失败!")
          return 
      }

      connSub = Dial("nats://admin@127.0.0.1:4222?topic=pubRobotA")
      if (!connSub) {
          Log("通信失败!")
          return 
      }

      while (true) {
          connPub.write("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 = Dial(“nats://admin@127.0.0.1:4222?topic=pubRobotB”)

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

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

var connSub = Dial(“nats://admin@127.0.0.1:4222?topic=pubRobotA”)

एकमात्र अंतरtopic=pubRobotAअलग, क्योंकि आपको उस विषय की सदस्यता लेने की आवश्यकता है जहां रणनीति ए जानकारी भेजती हैpubRobotA

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

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

FMZ की खोज: वास्तविक ट्रेडिंग रणनीतियों के बीच संचार प्रोटोकॉल का अभ्यास

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

FMZ की खोज: वास्तविक ट्रेडिंग रणनीतियों के बीच संचार प्रोटोकॉल का अभ्यास

इस तरह, 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-management

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

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("当前实盘robotId:", robotId)

    conn = Dial("amqp://q:admin@127.0.0.1:5672/?queue=robotA_Queue")
    if (!conn) {
        Log("通信失败!")
        return 
    }

    for (var i = 0; i < 10; i++) {
        // 读取
        Log("read:", conn.read(1000), "#FF0000")
        
        // 写入
        var msg = "i: " + i + ", testQueue, robotA, robotId: " + robotId + ", time:" + _D()        
        conn.write(msg)
        Log("向testQueue写入消息:", msg)

        Sleep(1000)
    }    
}

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

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

FMZ की खोज: वास्तविक ट्रेडिंग रणनीतियों के बीच संचार प्रोटोकॉल का अभ्यास

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

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


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

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

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

  • रिकॉर्डों की धाराओं का प्रकाशन और सदस्यता लेना
  • रिकॉर्ड की स्ट्रीम को उस क्रम में कुशलतापूर्वक संग्रहीत करें जिस क्रम में वे उत्पन्न किए गए थे
  • वास्तविक समय में रिकॉर्ड की धाराओं का प्रसंस्करण

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

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

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

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("当前实盘robotId:", robotId)

    conn = Dial("kafka://localhost:9092/test_topic")
    if (!conn) {
        Log("通信失败!")
        return 
    }

    for (var i = 0; i < 10; i++) {
        // 写入
        var msg = "i: " + i + ", testQueue, robotA, robotId: " + robotId + ", time:" + _D()        
        conn.write(msg)
        Log("向testQueue写入消息:", msg)

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

        Sleep(1000)
    }    
}

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

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

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

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

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

FMZ की खोज: वास्तविक ट्रेडिंग रणनीतियों के बीच संचार प्रोटोकॉल का अभ्यास