یہ ایف ایم زیڈ کے ذریعہ سرکاری طور پر تیار کردہ ویب ساکٹ مارکیٹ ٹیمپلیٹ ہے۔ تمام صارفین کو اس کی کاپی اور استعمال کرنے کا خیرمقدم کرتے ہیں۔https://www.fmz.com/strategy/470349
فی الحال ، ایف ایم زیڈ کی حکمت عملی بنیادی طور پر روایتی آر ای ایس ٹی اے پی آئی انکیپسولیشن پر مبنی ہے۔ اے پی آئی تک رسائی کے ہر مرحلے میں نیٹ ورک کنکشن قائم کرنے کی ضرورت ہوتی ہے ، اور مارکیٹ کے اعداد و شمار پولنگ کے ذریعے حاصل کیے جاتے ہیں۔ یہ طریقہ آسان اور استعمال میں آسان ہے ، اور یہ زیادہ تر ضروریات کے لئے مکمل طور پر کافی ہے۔
تاہم ، REST پروٹوکول میں تاخیر کا ایک فطری مسئلہ ہے۔ جب متعدد تجارتی جوڑے اور متعدد تبادلے کی حکمت عملیوں کی ضرورت ہوتی ہے تو ، تاخیر کا مسئلہ بڑھا دیا جائے گا۔ اگرچہ پلیٹ فارم کا گو فنکشن بیک وقت انجام دیا جاسکتا ہے ، لیکن تاخیر کا مسئلہ اب بھی موجود ہے ، جس سے نسبتا high اعلی تعدد کی حکمت عملی کی تجارت کی ضروریات کو پورا کرنا مشکل ہوجاتا ہے۔ اس کے علاوہ ، اگر بہت سارے تجارتی جوڑے ہیں اور پولنگ کی تعدد بہت تیز ہے تو ، اسے تجارتی پلیٹ فارم کی رسائی کی تعدد کی حد کا سامنا کرنا پڑے گا۔
فی الحال ، تبادلے کے سرورز بھی بھاری بوجھ کے تحت ہیں۔ وہ سب ایک مکمل ویب ساکٹ پروٹوکول فراہم کرتے ہیں اور اسے API صارفین کو تجویز کرتے ہیں۔ REST پروٹوکول کے مقابلے میں ، ویب ساکٹ ایک مستقل دو طرفہ کنکشن کا طریقہ فراہم کرتا ہے ، جو تبادلے کو ڈیٹا کو کلائنٹ کو حقیقی وقت میں آگے بڑھانے کے قابل بناتا ہے ، کثرت سے درخواستوں اور ردعمل سے بچنے ، اس طرح تاخیر کو بہت کم کرتا ہے۔ عام طور پر ، اگر REST API تک رسائی میں تاخیر 20ms کے ارد گرد ہے تو ، ویب ساکٹ کے ذریعے ڈیٹا کو آگے بڑھانے میں تاخیر تقریبا 2ms ہے۔ اس کے علاوہ ، ویب ساکٹ پروٹوکول سے لنک پلیٹ فارم تک رسائی کی تعدد سے محدود نہیں ہے ، اور ایک وقت میں درجنوں تجارتی جوڑوں کو سبسکرائب کرنا ممکن ہے۔
ایف ایم زیڈ کوانٹ ٹریڈنگ پلیٹ فارم نے طویل عرصے سے ویب ساکٹ پروٹوکول کی حمایت کی ہے ، اور کال کرنا نسبتا convenient آسان ہے ، لیکن ابتدائی صارفین کے لئے ، متعدد خریداریوں کو سنبھالنا ، متعدد تبادلے کے ٹکرز کو سبسکرائب کرنا ، اور انہیں موثر اور آسانی سے ایمبیڈ کرنا اب بھی بہت پیچیدہ ہے۔ پوری حکمت عملی کے عمل میں. یہ عوامی ویب ساکٹ ریئل ٹائم ٹکر ڈیٹا ایکسلریشن ٹیمپلیٹ اس مسئلے کو حل کرتا ہے۔ یہ استعمال کرنا بہت آسان ہے اور موجودہ انکیپسولڈ API کال کے ساتھ مکمل طور پر ہم آہنگ ہے۔ زیادہ تر اصل REST حکمت عملیوں کے ل you ، آپ انہیں آسانی سے تبدیل کرسکتے ہیں اور اپنی حکمت عملی کو تیز کرنے کے لئے براہ راست ان کا استعمال کرسکتے ہیں۔
اہم خصوصیات:
نوٹ کریں کہ یہ حکمت عملی ٹائپ اسکرپٹ کا استعمال کرتی ہے۔ اگر آپ صرف جاوا اسکرپٹ سے واقف ہیں تو ، یہ تھوڑا سا عجیب لگ سکتا ہے۔ ٹائپ اسکرپٹ جاوا اسکرپٹ پر مبنی ٹائپ سسٹم اور زبان کی بھرپور خصوصیات متعارف کراتا ہے۔ مقداری تجارت جیسے ایپلی کیشنز کے لئے جن کو پیچیدہ منطق کو سنبھالنے کی ضرورت ہے ، ٹائپ اسکرپٹ کا استعمال ممکنہ غلطیوں کو کم کرسکتا ہے اور کوڈ کی پڑھنے اور برقرار رکھنے کی صلاحیت کو بہتر بنا سکتا ہے۔ لہذا ، اس کو مختصر طور پر سیکھنے کی سفارش کی جاتی ہے۔
اس کے علاوہ ، حکمت عملی ایف ایم زیڈ پلیٹ فارم کے غیر متزلزل میکانزم کا استعمال کرتی ہے۔ چائلڈ تھریڈ __threadPostMessage فنکشن کے ذریعے مین تھریڈ کو پیغامات بھیج سکتا ہے۔ یہ طریقہ غیر متزلزل ہے اور چائلڈ تھریڈ میں تیار کردہ ڈیٹا اپ ڈیٹس کے مرکزی تھریڈ کو مطلع کرنے کے لئے موزوں ہے۔ مرکزی تھریڈ اور چائلڈ تھریڈ __threadGetData اور __threadSetData افعال کے ذریعے ڈیٹا شیئر کرسکتے ہیں۔ یہ طریقہ تھریڈز کو مشترکہ حالتوں تک رسائی اور ترمیم کرنے کی اجازت دیتا ہے۔ اگر آپ پلیٹ فارم کی دستاویزات کے ساتھ مل کر ملٹی تھریڈنگ کے بارے میں جاننا چاہتے ہیں تو ، یہ حکمت عملی بھی سیکھنے کی ایک اچھی مثال ہے۔
اس حکمت عملی کا بنیادی اصول ویب ساکٹ کے ذریعے ڈیجیٹل کرنسی کے مرکزی دھارے کے تبادلے سے رابطہ قائم کرنا اور حقیقی وقت میں مارکیٹ کے اعداد و شمار (جیسے گہرائی کی معلومات اور ٹرانزیکشن کی معلومات) وصول کرنا ہے تاکہ مقداری تجارتی فیصلوں کے لئے ڈیٹا سپورٹ فراہم کی جاسکے۔ نفاذ کا مخصوص عمل مندرجہ ذیل ہے:
ویب ساکٹ کنکشن کی ترتیباتفنکشنsetupWebsocket
ایک ویب ساکٹ کنکشن کو شروع کرنے اور مارکیٹ کے اعداد و شمار وصول کرنے کے لئے استعمال کیا جاتا ہے. یہ ایک پیرامیٹر وصول کرتا ہےmain_exchanges
، جس سے منسلک کرنے کے لئے تبادلہ کی نشاندہی کرتا ہے.
MyDial
فنکشن: ایک ویب ساکٹ کنکشن بنائیں، کنکشن کا وقت ریکارڈ کریں، اور کنکشن بند کرتے وقت بند وقت آؤٹ پٹ.updateSymbols
فنکشن: باقاعدگی سے چیک کریں کہ کیا نئی خریداری کی درخواستیں ہیں اور اگر ضروری ہو تو موجودہ ٹریڈنگ جوڑی کی فہرست کو اپ ڈیٹ کریں۔ڈیٹا پروسیسنگمقصدsupports
حمایت کی تبادلے اور ان کے پروسیسنگ کی تقریب (جیسےBinance
) ہر تبادلہ کے لئے پروسیسنگ فنکشن موصولہ پیغام کو تجزیہ کرنے اور متعلقہ ڈیٹا کو نکالنے کے لئے ذمہ دار ہے.
processMsg
فنکشن: تبادلے سے پیغامات پر کارروائی کریں ، مختلف قسم کے ڈیٹا کی نشاندہی کریں (جیسے گہرائی کی تازہ کاری ، لین دین وغیرہ) ، اور انہیں ایک متحد واقعہ آبجیکٹ میں فارمیٹ کریں۔3. سبسکرپشن ڈیٹاہر کنکشن پر، نظام موجودہ ٹریڈنگ جوڑی کی بنیاد پر متعلقہ مارکیٹ ڈیٹا چینلز کو سبسکرائب کرے گا.
getFunction
فنکشن: تبادلہ نام کے مطابق متعلقہ پروسیسنگ فنکشن حاصل کریں.this.wssPublic
فنکشن: WebSocket کنکشن شروع کریں اور ڈیٹا وصول کرنا شروع کریں.4 ۔ تھریڈ مینجمنٹہر تبادلے کے لئے ایک موضوع شروع کریں، حقیقی وقت میں ڈیٹا وصول کریں اور کال بیک افعال کے ذریعے ڈیٹا پر عمل کریں.
threadMarket
فنکشن: ایک بچہ موضوع میں ڈیٹا وصول کریں، تازہ ترین گہرائی اور ٹرانزیکشن کی معلومات کو تجزیہ اور ذخیرہ کریں.5. ڈیٹا حصول کے طریقہ کار کو دوبارہ لکھیںہر تبادلے کے لئے گہرائی اور تجارتی معلومات حاصل کرنے کے طریقوں کو دوبارہ لکھیں ، حقیقی وقت میں اپ ڈیٹ ہونے والے اعداد و شمار کو واپس کرنے کو ترجیح دیں۔
$.setupWebsocket()
ہدف کے تبادلے کے WebSocket کنکشن کو شروع کرنے کے لئے.GetDepth()
اورGetTrades()
افعال، مارکیٹ کی گہرائی اور ٹرانزیکشن ریکارڈ خود کار طریقے سے ویب ساکٹ ریئل ٹائم ڈیٹا کا استعمال کرتے ہوئے واپس آ جاتے ہیں.اگر ایونٹ لوپ (() فنکشن کو حکمت عملی میں شامل کیا جاتا ہے تو ، اسے ٹرگر میکانزم میں تبدیل کردیا جائے گا۔ جب wss ڈیٹا اپ ڈیٹ ہوتا ہے تو ، یہ خود بخود اسے فوری طور پر حاصل کرے گا ، اور اگر تازہ ترین ڈیٹا نہیں ہوتا ہے تو انتظار کریں۔ یہ ایک ذہین نیند فنکشن کے برابر ہے۔ یقینا ، آپ براہ راست نیند بھی استعمال کرسکتے ہیں۔
function main() {
$.setupWebsocket()
while (true) {
exchanges.map(e=>{
Log(e.GetName(), e.GetDepth())
Log(e.GetName(), e.GetTrades())
})
EventLoop(100) // trigger by websocket
}
}
میری پچھلی کثیر کرنسی ٹریڈنگ حکمت عملی گائیڈ کا حوالہ دیں:https://www.fmz.com/bbs-topic/10508، جو ویب ساکٹ کی حمایت کرنے کے لئے آسانی سے تبدیل کیا جا سکتا ہے:
function MakeOrder() {
for (let i in Info.trade_symbols) {
let symbol = Info.trade_symbols[i];
let buy_price = exchange.GetDepth(symbol + '_USDT').Asks[0].Price;
let buy_amount = 50 / buy_price;
if (Info.position[symbol].value < 2000){
Trade(symbol, "buy", buy_price, buy_amount, symbol);
}
}
}
function OnTick() {
try {
UpdatePosition();
MakeOrder();
UpdateStatus();
} catch (error) {
Log("loop error: " + error);
}
}
function main() {
$.setupWebsocket()
InitInfo();
while (true) {
let loop_start_time = Date.now();
if (Date.now() - Info.time.last_loop_time > Info.interval * 1000) {
OnTick();
Info.time.last_loop_time = Date.now();
Info.time.loop_delay = Date.now() - loop_start_time;
}
Sleep(5);
}
}