[TOC]
مالیاتی منڈیوں کی تیز رفتار ترقی اور مقداری تجارت کی مقبولیت کے ساتھ ، زیادہ سے زیادہ تاجروں نے تجارت کے لئے خودکار حکمت عملیوں پر انحصار کرنا شروع کردیا ہے۔ اس عمل میں ، حکمت عملیوں کے مابین مواصلات اور ہم آہنگی خاص طور پر اہم ہے۔ ایف ایم زیڈ کوانٹ ٹریڈنگ پلیٹ فارم تاجروں کو تجارتی حکمت عملیوں کے مابین موثر مواصلاتی پروٹوکول فراہم کرکے ہموار حکمت عملی ڈاکنگ اور ریئل ٹائم ڈیٹا شیئرنگ کے حصول میں مدد کرتا ہے۔
اس مضمون میں ایف ایم زیڈ پلیٹ فارم میں تجارتی حکمت عملیوں کے براہ راست تجارتی مواصلات پروٹوکول کا جائزہ لیا جائے گا ، عملی ایپلی کیشنز میں اس کے ڈیزائن تصور ، فعال خصوصیات اور فوائد کو متعارف کرایا جائے گا۔ تفصیلی کیس تجزیہ کے ذریعے ، ہم دکھائیں گے کہ کس طرح اس پروٹوکول کو موثر اور مستحکم حکمت عملی مواصلات کے حصول اور تجارتی حکمت عملیوں کی عمل درآمد اور منافع کی کارکردگی کو بہتر بنانے کے لئے استعمال کیا جائے۔
چاہے آپ مقداری تجارت کے شوقین ہیں جو ابھی ایف ایم زیڈ کے ساتھ شروعات کررہے ہیں یا تجربہ کار پیشہ ور پروگرامر ، یہ مضمون آپ کو قیمتی بصیرت اور عملی آپریشن گائیڈز فراہم کرے گا۔ آئیے ایف ایم زیڈ پلیٹ فارم کے طاقتور افعال کو دریافت کریں اور سیکھیں کہ کس طرح موثر مواصلاتی پروٹوکول کے ذریعہ حکمت عملیوں کے مابین تعاون حاصل کیا جائے ، تجارتی کارکردگی کو بہتر بنایا جائے ، اور مارکیٹ کے مواقع کو حاصل کیا جائے۔
یہ طلب کے منظرنامے عملی ایپلی کیشنز میں ایف ایم زیڈ ٹریڈنگ حکمت عملی لائیو ٹریڈنگ مواصلات پروٹوکول کی مختلف امکانات اور فوائد کو ظاہر کرتے ہیں۔ موثر انٹر اسٹریٹیجی مواصلات کے ذریعے ، تاجر پیچیدہ مارکیٹ کے ماحول سے بہتر نمٹ سکتے ہیں ، تجارتی حکمت عملیوں کو بہتر بناسکتے ہیں ، اور تجارتی کارکردگی اور منافع کو بہتر بناسکتے ہیں۔
لائیو ٹریڈنگ کے مابین مواصلات کی ضروریات کو سمجھنے کے بعد ، ہمیں ان ضروریات کو نافذ کرنے کے طریقوں پر غور کرنے کی ضرورت ہے۔ یہ لائیو ٹریڈنگ اے سے زیادہ کچھ نہیں ہے جو لائیو ٹریڈنگ بی کے ساتھ معلومات کا تبادلہ کرنے کی امید کرتا ہے۔ اگرچہ ضروریات آسان معلوم ہوتی ہیں ، لیکن مواصلات کے پروٹوکول کے ایک سیٹ کا استعمال کرتے وقت مختلف تفصیلات پر اتفاق کرنے کی ضرورت ہے۔ ایف ایم زیڈ نے مواصلات کے کئی مشہور پروٹوکول کو جوڑ دیا ہے۔
mqtt / nats / amqp / کافکا
مواصلات کا فن تعمیر یہ ہے:
ایف ایم زیڈ پلیٹ فارم پر ان پروٹوکولز کو لاگو کرتے وقت یہ آسانی سے سمجھا جاسکتا ہے کہ ایم کیو ٹی ٹی / نیٹس / ایم کیو پی / کافک پروٹوکولز کو فاریکس ٹریڈنگ میں کیا فائدہ ہے؟ میں ضم کیا گیا ہے۔Dial()
فنکشن، اورDial()
اس فنکشن کا استعمال پیغامات کو شائع کرنے اور سبسکرائب کرنے کے لئے کیا جاتا ہے۔ یہ شائع شدہ پیغامات پروٹوکول سرور کے ذریعہ سبسکرائب شدہ براہ راست تجارت میں پراکسی (ریلے) ہوتے ہیں ، لہذا پہلے ایک پروٹوکول سرور چلانا ضروری ہے۔ مظاہرے کے لئے ، ہم مندرجہ ذیل مثالوں میں مختلف پروٹوکول سرور امیج کی تعیناتی کا استعمال کرتے ہیں۔
API دستاویزات کے سیکشن میں ڈائل فنکشن:https://www.fmz.com/syntax-guide#fun_dial
ڈوکر تصویر کو تعینات کرنے سے پہلے، پہلے ڈوکر سافٹ ویئر انسٹال کرنا یاد رکھیں.
اگلا، ہم FMZ کی طرف سے حمایت کی مواصلاتی پروٹوکول ایپلی کیشنز کی تلاش اور مشق کرتے ہیں.
ایم کیو ٹی ٹی (پیغام کی قطار ٹیلی میٹری ٹرانسپورٹ) ایک ہلکا پھلکا پیغام ٹرانسمیشن پروٹوکول ہے جو خاص طور پر کم بینڈوتھ ، اعلی تاخیر یا ناقابل اعتماد نیٹ ورک ماحول کے لئے موزوں ہے۔ یہ اینڈی اسٹینفورڈ کلارک اور آرلن نیپر نے آئی بی ایم کے ذریعہ 1999 میں تجویز کیا تھا اور بعد میں یہ آئی ایس او معیار (ISO / IEC PRF 20922) بن گیا تھا۔
ایم کیو ٹی ٹی پروٹوکول کی اہم خصوصیات: شائع / سبسکرائب موڈ
چونکہ ہم ایم کیو ٹی ٹی پروسیسر کو تعینات کرنے کے لئے ایم کیو ٹی ٹی پروٹوکول کی حمایت کرنے والے سافٹ ویئر کی ڈوکر امیج (ایکلیپس-موسکیٹو امیج) استعمال کرتے ہیں ، لہذا ہم نے پہلے سے ڈوکر انسٹال کیا ہے اور بعد میں تفصیلات میں نہیں جائیں گے۔
تصویر کو تعینات کرنے کے لئے کمانڈ چلانے سے پہلے، ہم ایک پراکسی سرور ترتیب فائل لکھنے کی ضرورت ہے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
.
مندرجہ بالا حکمت عملی ایک ہی وقت میں ایک موضوع کو شائع کرتی ہے اور سبسکرائب کرتی ہے۔ چلانے کا ٹیسٹ اس شبیہہ میں دکھایا گیا ہے:
ہم ایک دوسرے کو سبسکرائب کرنے اور موضوع کی معلومات شائع کرنے کے لئے دو لائیو ٹریڈنگ کا بھی استعمال کرسکتے ہیں۔ ہم اس طرح کی ایک مثال nats پروٹوکول پریکٹس سیکشن میں استعمال کرتے ہیں ، اور دوسرے پروٹوکول میں اس طریقہ کار کو دہرا نہیں کریں گے۔
NATS پروٹوکول ایک سادہ ، متن پر مبنی شائع / سبسکرائب اسٹائل پروٹوکول ہے۔ کلائنٹ gnatsd (NATS سرور) سے جڑتا ہے اور gnatsd کے ساتھ بات چیت کرتا ہے۔ مواصلات عام TCP / IP ساکٹ پر مبنی ہے اور کارروائیوں کا ایک بہت ہی چھوٹا سیٹ بیان کرتا ہے۔ نیو لائن اختتام کی نشاندہی کرتا ہے۔ روایتی پیغام مواصلات کے نظام کے برعکس جو بائنری پیغام فارمیٹس کا استعمال کرتے ہیں ، متن پر مبنی NATS پروٹوکول کلائنٹ عمل درآمد کو بہت آسان بنا دیتا ہے اور اسے مختلف پروگرامنگ زبانوں یا اسکرپٹنگ زبانوں میں آسانی سے نافذ کیا جاسکتا ہے۔
ہر پروٹوکول کی اپنی خصوصیات ہوتی ہیں۔ آپ مخصوص دستاویزات اور مواد سے رجوع کر سکتے ہیں ، جن پر یہاں تفصیل سے بات نہیں کی جائے گی۔
NATS پروٹوکول سرور تعینات کریں:
ڈوکر رن
نام نیٹس rm -p 4222:4222 -p 8222:8222 نیٹس 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()
}
یہ دونوں حکمت عملی تقریبا ایک جیسی ہیں ، سوائے اس کے کہ وہ ایک دوسرے کو شائع اور سبسکرائب کرتے ہیں ، اور سبسکرائب کردہ موضوعات ، شائع شدہ موضوعات ، اور شائع شدہ معلومات مختلف ہیں۔
مثال کے طور پر حکمت عملی بی لیں:
Dial()
ایک کلائنٹ کنکشن سرور آبجیکٹ تخلیق کرنے کے لئے تقریبconnPub
موضوعی پیغام کی اشاعت کے لئے:var connPub = ڈائل کریں127.0.0.1:4222?topic=pubRobotB”)
ڈائل فنکشن کی پیرامیٹر سٹرنگ کے ساتھ شروع ہوتا ہےnats://
اس بات کا اشارہ کرتے ہوئے کہ NATS پروٹوکول مواصلات کے لئے استعمال کیا جاتا ہے.admin
سادہ تصدیق کی معلومات ہےauth admin
ڈوکر امیج کو تعینات کرتے وقت مقرر کیا جاتا ہے۔ مندرجہ ذیل مواد کو الگ کرنے کے لئے 127.0.0.1:4222
آخر میں، شائع/سبسکرائب موضوع ہے:topic=pubRobotB
نوٹ کریں کہ
Dial()
ایک کلائنٹ کنکشن سرور آبجیکٹ تخلیق کرنے کے لئے تقریبconnSub
موضوع پیغام کے لیے سبسکرپشن:var connSub = ڈائل کریں127.0.0.1:4222?topic=pubRobotA”)
فرق صرف اتنا ہےtopic=pubRobotA
، کیونکہ ہم موضوع کو سبسکرائب کرنے کی ضرورت ہےpubRobotA
جہاں حکمت عملی A معلومات بھیجتی ہے۔
حکمت عملی A میں سبسکرپشن اور پبلشنگ کنکشن اشیاء کی تخلیق اور استعمال وہی ہے جو اوپر بیان کیا گیا ہے۔
اس طرح ، NATS پروٹوکول ایپلی کیشن کی ایک سادہ مثال نافذ کی گئی ہے جس میں براہ راست تجارت A اور براہ راست تجارت B ایک دوسرے کے ساتھ بات چیت کرنے کے لئے پیغامات کو سبسکرائب اور شائع کرتے ہیں۔
غیر متزلزل مواصلات میں ، پیغام فوری طور پر وصول کنندہ تک نہیں پہنچے گا ، لیکن اسے کنٹینر میں محفوظ کیا جائے گا۔ جب کچھ شرائط پوری ہوجاتی ہیں تو ، پیغام کو کنٹینر کے ذریعہ وصول کنندہ کو بھیجا جائے گا۔ یہ کنٹینر پیغام کی قطار ہے۔ اس فنکشن کو مکمل کرنے کے لئے ، دونوں فریقوں اور کنٹینر اور اس کے اجزاء کو متحد معاہدوں اور قواعد کی تعمیل کرنا ہوگی۔ اے ایم کیو پی ایک ایسا پروٹوکول ہے۔ پیغام بھیجنے والا اور وصول کنندہ دونوں اس پروٹوکول کی تعمیل کرکے غیر متزلزل مواصلات کو نافذ کرسکتے ہیں۔ یہ پروٹوکول پیغام کی شکل اور کام کرنے کا طریقہ طے کرتا ہے۔
ہر پروٹوکول کی اپنی خصوصیات ہوتی ہیں۔ آپ مخصوص دستاویزات اور مواد سے رجوع کر سکتے ہیں ، جن پر یہاں تفصیل سے بات نہیں کی جائے گی۔
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("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")
}
AMQP پروٹوکول کی قطار کا استعمال کرتے وقت ، براہ کرم نوٹ کریں کہ شائع شدہ پیغامات قطار میں برقرار رہیں گے۔ مثال کے طور پر ، اگر ہم مندرجہ بالا مثال کا کوڈ چلاتے ہیں تو ، قطار میں 10 پیغامات لکھے جائیں گے۔ پھر جب ہم اسے دوسری بار چلاتے ہیں تو ، ہم دیکھ سکتے ہیں کہ پڑھنے پر پہلا تحریری پیغام دوبارہ پڑھا جائے گا۔ جیسا کہ شبیہہ میں دکھایا گیا ہے:
ہم دیکھ سکتے ہیں کہ اسکرین شاٹ میں سرخ تیروں کی طرف اشارہ کرنے والے دو لاگ پیغامات کے اوقات متضاد ہیں۔ اس کی وجہ یہ ہے کہ سرخ پیغام وہ ہے جو اسٹریٹجی کوڈ کو پہلی بار چلانے پر قطار میں پڑھا اور لکھا گیا تھا۔
اس خصوصیت کی بنیاد پر ، کچھ تقاضوں کو پورا کیا جاسکتا ہے۔ مثال کے طور پر ، حکمت عملی کو دوبارہ شروع کرنے کے بعد ، ریکارڈ شدہ مارکیٹ کے اعداد و شمار کو ابتدائی حساب کتاب اور دیگر کارروائیوں کے لئے قطار سے حاصل کیا جاسکتا ہے۔
اپاچی کافکا ایک تقسیم شدہ ڈیٹا اسٹور ہے جو حقیقی وقت میں اسٹریمنگ ڈیٹا کو کھونے اور اس پر کارروائی کرنے کے لئے موزوں ہے۔ اسٹریمنگ ڈیٹا وہ ڈیٹا ہے جو ہزاروں ڈیٹا ذرائع کے ذریعہ مستقل طور پر تیار کیا جاتا ہے ، اکثر بیک وقت ڈیٹا ریکارڈ بھیجتا ہے۔ اسٹریمنگ پلیٹ فارم کو ڈیٹا کے اس مسلسل بہاؤ کو سنبھالنے کی ضرورت ہوتی ہے ، اس پر ترتیب وار اور اضافی طور پر کارروائی کرتے ہوئے۔
کافکا اپنے صارفین کو تین اہم افعال فراہم کرتا ہے:
کافکا بنیادی طور پر ریئل ٹائم اسٹریمنگ ڈیٹا پائپ لائنز اور ایپلی کیشنز بنانے کے لئے استعمال ہوتا ہے جو ڈیٹا اسٹریمز کے مطابق ڈھالتے ہیں۔ یہ میسجنگ ، اسٹوریج ، اور اسٹریم پروسیسنگ کی صلاحیتوں کو یکجا کرتا ہے ، اور تاریخی اور ریئل ٹائم ڈیٹا کو اسٹور کرسکتا ہے۔
کافکا پراکسی کی ڈوکر تصویر کو تعینات کریں:
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
.
ٹیسٹ کے نتائج: