وسائل لوڈ ہو رہے ہیں... لوڈنگ...

ایف ایم زیڈ کوانٹ پلیٹ فارم حکمت عملی لکھنے کے لئے اعلی درجے کی سبق

مصنف:FMZ~Lydia, تخلیق: 2023-07-12 14:49:24, تازہ کاری: 2024-01-04 21:04:23

[TOC]

img

اس سبق کو سیکھنے سے پہلے، آپ کو مطالعہ کرنے کی ضرورت ہےایف ایم زیڈ کوانٹ پلیٹ فارم کے ساتھ شروع کریںاورایف ایم زیڈ کوانٹ پلیٹ فارم کے لئے بنیادی سبق حکمت عملی لکھنا، اور پروگرامنگ زبانوں میں مہارت حاصل کریں.ابتدائی ٹیوٹوریل میں عام طور پر استعمال ہونے والے افعال کا احاطہ کیا گیا ہے ، لیکن بہت سارے افعال اور خصوصیات ہیں جو متعارف نہیں کی گئیں ، اور وہ اس ٹیوٹوریل میں شامل نہیں ہوں گی۔ آپ کو خود کو سمجھنے کے لئے ایف ایم زیڈ پلیٹ فارم پر API دستاویز کو براؤز کرنے کی ضرورت ہے۔اس سبق کو سیکھنے کے بعد، آپ کو زیادہ مفت اور اپنی مرضی کے مطابق حکمت عملی لکھنے کے قابل ہو جائے گا، اور FMZ مقدار پلیٹ فارم صرف ایک آلہ ہے.

پلیٹ فارم کے خام ڈیٹا تک رسائی

ایف ایم زیڈ کوانٹ پلیٹ فارم تمام معاون پلیٹ فارمز کو شامل کرتا ہے۔ یکسانیت کو برقرار رکھنے کے ل our ، ہمارے ایک پلیٹ فارم API کی حمایت ابھی تک مکمل نہیں ہے۔ مثال کے طور پر ، گیٹ ریکارڈز K لائنوں کی تعداد یا آغاز کے وقت میں منتقل کرسکتے ہیں ، جبکہ یہ ایف ایم زیڈ پلیٹ فارم پر طے شدہ ہے۔ کچھ پلیٹ فارم بیچ آرڈرنگ کی حمایت کرتے ہیں ، جبکہ ایف ایم زیڈ اس کی حمایت نہیں کرتا ہے ، اور اسی طرح۔ لہذا پلیٹ فارم کے ڈیٹا تک براہ راست رسائی حاصل کرنے کے لئے کسی طرح کی ضرورت ہے۔عوامی انٹرفیس کے لئے (جیسے مارکیٹ کی قیمتوں کا تعین) ، آپ استعمال کر سکتے ہیںHttpQuery، اور خفیہ کردہ انٹرفیس کے لئے (اکاؤنٹ کی معلومات شامل ہیں) ، آپ کو استعمال کرنے کی ضرورت ہےIO.مخصوص آنے والے پیرامیٹرز کے لئے، براہ مہربانی متعلقہ پلیٹ فارم API دستاویز کا حوالہ دیتے ہیں. پچھلے ٹیوٹوریل متعارف کرایا ہے کہInfoفیلڈ خام معلومات لوٹاتا ہے، لیکن یہ اب بھی انٹرفیس کی حمایت نہیں کرنے کے مسئلے پر کوئی فرق نہیں پڑتا.

GetRawJSON (()

یہ آخری REST API کی طرف سے درخواست کردہ خام مواد (سٹرنگ) واپس کرتا ہے، جو خود کو توسیع کی معلومات کو تجزیہ کرنے کے لئے استعمال کیا جا سکتا ہے.

function main(){
    var account = exchange.GetAccount() //the account doesn't contain all data returned by the request
    var raw = JSON.parse(exchange.GetRawJSON())//raw data returned by GetAccount()
    Log(raw)
}

HttpQuery() عوامی انٹرفیس تک رسائی

عوامی انٹرفیس تک رسائی حاصل کرنے کے لئے، Js استعمال کر سکتے ہیںHttpQuery، اور پائیتھون متعلقہ پیکجوں کا استعمال کر سکتے ہیں، جیسےurllibیاrequests.

HttpQuery GET طریقہ کار کے لئے ڈیفالٹ ہے، اور مزید افعال کی حمایت کرتا ہے؛ مزید تفصیلات کے لئے API دستاویز چیک کریں.

var exchangeInfo = JSON.parse(HttpQuery('https://api.binance.com/api/v1/exchangeInfo'))
Log(exchangeInfo)
var ticker = JSON.parse(HttpQuery('https://api.binance.com/api/v1/ticker/24hr'))
var kline = JSON.parse(HttpQuery("https://www.quantinfo.com/API/m/chart/history?symbol=BTC_USD_BITFINEX&resolution=60&from=1525622626&to=1561607596"))

درخواستوں کا استعمال کرتے ہوئے پائیتھون کا مثال:

import requests
resp = requests.get('https://www.quantinfo.com/API/m/chart/history?symbol=BTC_USD_BITFINEX&resolution=60&from=1525622626&to=1561607596')
data = resp.json()

IO خفیہ کردہ انٹرفیس تک رسائی

انٹرفیس کے لئے جو API-KEY دستخط کی ضرورت ہوتی ہے ، IO فنکشن استعمال کیا جاسکتا ہے ، اور صارفین کو صرف آنے والے پیرامیٹرز کی پرواہ کرنے کی ضرورت ہے ، اور مخصوص دستخط کا عمل انڈر لیئر کے ذریعہ مکمل کیا جائے گا۔

ایف ایم زیڈ پلیٹ فارم فی الحال بٹ ایم ای ایکس اسٹاپ نقصان کے احکامات کی حمایت نہیں کرتا ہے ، جو مندرجہ ذیل اقدامات کے مطابق ، آئی او کے ذریعے نافذ کیا جاسکتا ہے۔

  • سب سے پہلے، BitMEX API کے ہدایات کے صفحے کو تلاش کریں:https://www.bitmex.com/api/explorer/;
  • پھر، BitMEX کے آرڈر ایڈریس تلاش کریں:https://www.bitmex.com/api/v1/order، کے طریقہ کار کے ساتھPOST; کے لئے FMZ پہلے ہی اندرونی طور پر بیس ایڈریس کی وضاحت کی ہے، آپ کو صرف میں منتقل کرنے کی ضرورت ہے /api/v1/order.
  • متعلقہ پیرامیٹرز:symbol=XBTUSD&side=Buy&orderQty=1&stopPx=4000&ordType=Stop.

مخصوص کوڈ:

var id = exchange.IO("api", "POST", "/api/v1/order", "symbol=XBTUSD&side=Buy&orderQty=1&stopPx=4000&ordType=Stop")
// You can also pass in the object 
var id = exchange.IO("api", "POST", "/api/v1/order", "", JSON.stringify({symbol:"XBTUSD",side:"Buy",orderQty:1,stopPx:4000,ordType:"Stop"}))

آئی او کی مزید مثالیں:https://www.fmz.com/bbs-topic/3683

ویب ساکٹ استعمال کرنا

بنیادی طور پر ، تمام کریپٹوکرنسی پلیٹ فارم مارکیٹ کی قیمتوں کا تعین بھیجنے کے لئے ویب ساکٹ کی حمایت کرتے ہیں ، اور کچھ پلیٹ فارم اکاؤنٹ کی معلومات کو اپ ڈیٹ کرنے کے لئے ویب ساکٹ کی حمایت کرتے ہیں۔ باقی API کے مقابلے میں ، ویب ساکٹ کے عام طور پر فوائد ہوتے ہیں ، جیسے کم تاخیر ، اعلی تعدد اور پلیٹ فارم کے باقی API کی تعدد سے محدود نہیں ہوتا ہے۔ نقصان یہ ہے کہ ایک مداخلت کا مسئلہ ہے ، جس کی پروسیسنگ بدیہی نہیں ہے۔

یہ مضمون بنیادی طور پر اس بات کا تعارف کرائے گا کہ جاوا اسکرپٹ زبان کو کس طرح استعمال کیا جائے اور پلیٹ فارم کے ذریعہ مربوط ہونے کے لئے ، ایف ایم زیڈ کوانٹ پلیٹ فارم پر ڈائل فنکشن کو کس طرح استعمال کیا جائے۔ مخصوص ہدایات اور پیرامیٹرز کے لئے دستاویز میں ہیں ، آپ ڈائل تلاش کرسکتے ہیں۔ مختلف افعال کو سمجھنے کے لئے ، ڈائل فنکشن کو کئی بار اپ ڈیٹ کیا گیا ہے۔ یہ مضمون اس کا احاطہ کرے گا اور ڈبلیو ایس ایس پر مبنی ایونٹ سے چلنے والی حکمت عملیوں کے ساتھ ساتھ متعدد پلیٹ فارمز کو مربوط کرنے کے مسئلے کو بھی متعارف کرائے گا۔ پائتھون ڈائل فنکشن ، یا اسی لائبریری کو بھی استعمال کرسکتا ہے۔

1.ویب ساکٹ کنکشن

عام طور پر ، براہ راست ویب ساکٹ کے ذریعہ مربوط ہوں؛ مثال کے طور پر بائننس ٹرکر پش حاصل کرنے کے لئے:

var client = Dial("wss://stream.binance.com:9443/ws/!ticker@arr")

اگر واپس آنے والے ڈیٹا کو کمپریسڈ فارمیٹ میں کیا گیا ہے تو ، کنکشن کرتے وقت وضاحت کی جانی چاہئے۔ compress کمپریسڈ فارمیٹ سے مراد ہے ، اور mode اس بات کی نمائندگی کرتا ہے کہ کون سے واپس آنے والے ڈیٹا کو کمپریسڈ کرنے کی ضرورت ہے۔ مثال کے طور پر ، OKEX کے ساتھ رابطہ قائم کرتے وقت:

var client = Dial("wss://real.okex.com:10441/websocket?compress=true|compress=gzip_raw&mode=recv")

ڈائل فنکشن دوبارہ رابطہ قائم کرنے کی حمایت کرتا ہے ، جو بنیادی گولنگ کے ذریعہ کیا جاتا ہے۔ اگر پتہ چلا ہوا کنکشن ٹوٹ جاتا ہے تو ، یہ دوبارہ رابطہ قائم ہوجائے گا۔ درخواست کے اعداد و شمار کے لئے جو پہلے ہی یو آر ایل میں موجود ہیں ، جیسے ابھی بائننس کی مثال ، یہ بہت آسان اور تجویز کردہ ہے۔ ان لوگوں کے لئے جن کو خریداری کے پیغامات بھیجنے کی ضرورت ہے ، وہ خود ہی دوبارہ رابطہ قائم کرسکتے ہیں۔

var client = Dial("wss://stream.binance.com:9443/ws/!ticker@arr|reconnect=true")

ڈبلیو ایس ایس پیغامات کو سبسکرائب کرنے کے لئے ، کچھ پلیٹ فارم کی درخواستیں یو آر ایل میں ہیں ، اور کچھ کو سبسکرائب شدہ چینلز خود بھیجنے کی ضرورت ہے ، جیسے سکے بیس:

client = Dial("wss://ws-feed.pro.coinbase.com", 60)
client.write('{"type": "subscribe","product_ids": ["BTC-USD"],"channels": ["ticker","heartbeat"]}')

2.انٹرفیس کنکشن کوڈ

عام طور پر ، ویب ساکٹ کا استعمال مارکیٹ کی قیمتوں کا تعین پڑھنے کے لئے کیا جاتا ہے ، لیکن اس کا استعمال آرڈرز اور اکاؤنٹ کو آگے بڑھانے کے لئے بھی کیا جاسکتا ہے۔ اس طرح کے خفیہ کردہ ڈیٹا کو آگے بڑھانے میں بعض اوقات طویل تاخیر ہوتی ہے اور احتیاط سے استعمال کیا جانا چاہئے۔ چونکہ خفیہ کاری کا طریقہ زیادہ پیچیدہ ہے ، لہذا یہاں حوالہ کے لئے کچھ مثالیں دی گئی ہیں۔ نوٹ کریں کہ صرف ایکسیسکی کی ضرورت ہے ، جسے حکمت عملی کے پیرامیٹر کے طور پر مقرر کیا جاسکتا ہے۔ اگر سیکریٹ کی کی ضرورت ہے تو ، اسے سیکیورٹی کو یقینی بنانے کے لئے تبادلہ.HMAC() فنکشن کے ذریعہ ضمنی طور پر بلایا جاسکتا ہے۔

    //Push example of Huobi Futures
    var ACCESSKEYID = 'accesskey of your Huobi account'
    var apiClient = Dial('wss://api.hbdm.com/notification|compress=gzip&mode=recv')
    var date = new Date(); 
    var now_utc =  Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(),date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
    var utc_date = new Date(now_utc)
    var Timestamp = utc_date.toISOString().substring(0,19)
    var quest = 'GET\napi.hbdm.com\n/notification\n'+'AccessKeyId='+ACCESSKEYID+'&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=' + encodeURIComponent(Timestamp)
    var signature = exchange.HMAC("sha256", "base64", quest, "{{secretkey} }") // Remove the extra blank spaces between }}
    auth = {op: "auth",type: "api",AccessKeyId: ACCESSKEYID, SignatureMethod: "HmacSHA256",SignatureVersion: "2", Timestamp: Timestamp, Signature:encodeURI(signature)}
    apiClient.write(JSON.stringify(auth))
    apiClient.write('{"op": "sub","cid": "orders","topic": "orders.btc'}')
    while (true){
        var data = datastream.read()
        if('op' in data && data.op == 'ping'){
            apiClient.write(JSON.stringify({op:'pong', ts:data.ts}))
        }
    }
    
    // Push example of Binance; pay attention that listenKey needs to be updated regularly   
    var APIKEY = 'accesskey of your Binance account'
    var req = HttpQuery('https://api.binance.com/api/v3/userDataStream',{method: 'POST',data: ''},null,'X-MBX-APIKEY:'+APIKEY);
    var listenKey = JSON.parse(req).listenKey;
    HttpQuery('https://api.binance.com/api/v3/userDataStream', {method:'DELETE',data:'listenKey='+listenKey}, null,'X-MBX-APIKEY:'+APIKEY);
    listenKey = JSON.parse(HttpQuery('https://api.binance.com/api/v3/userDataStream','',null,'X-MBX-APIKEY:'+APIKEY)).listenKey;
    var datastream = Dial("wss://stream.binance.com:9443/ws/"+listenKey+'|reconnect=true',60);
    var update_listenKey_time =  Date.now()/1000;
    while (true){
        if (Date.now()/1000 - update_listenKey_time > 1800){
            update_listenKey_time = Date.now()/1000;
            HttpQuery('https://api.binance.com/api/v3/userDataStream', {method:'PUT',data:'listenKey='+listenKey}, null,'X-MBX-APIKEY:'+APIKEY);
        }
        var data = datastream.read()
    }

    // push example of BitMEX
    var APIKEY = "your Bitmex API ID"
    var expires = parseInt(Date.now() / 1000) + 10
    var signature = exchange.HMAC("sha256", "hex", "GET/realtime" + expires, "{{secretkey} }")// secretkey is automatically replaced during execution, so no need to fill in
    var client = Dial("wss://www.bitmex.com/realtime", 60)
    var auth = JSON.stringify({args: [APIKEY, expires, signature], op: "authKeyExpires"})
    var pos = 0
    client.write(auth)
    client.write('{"op": "subscribe", "args": "position"}')
    while (true) {
        bitmexData = client.read()
        if(bitmexData.table == 'position' && pos != parseInt(bitmexData.data[0].currentQty)){
            Log('position change', pos, parseInt(bitmexData.data[0].currentQty), '@')
            pos = parseInt(bitmexData.data[0].currentQty)
        }
    }

3.ویب ساکٹ پڑھنا

عام طور پر ، اسے لامحدود لوپ میں مستقل طور پر پڑھا جاسکتا ہے۔ کوڈ مندرجہ ذیل ہے:

function main() {
    var client = Dial("wss://stream.binance.com:9443/ws/!ticker@arr");
    while (true) {
        var msg = client.read()
        var data = JSON.parse(msg) // Parse json strings into quotable objects 
// Process data 
    }
}

ڈبلیو ایس ایس ڈیٹا پش کی رفتار بہت تیز ہے۔ گولنگ کی انڈر لیئر قطار میں موجود تمام ڈیٹا کو کیش کرے گی ، اور جب پروگرام کالز پڑھتا ہے تو ، اعداد و شمار باری باری واپس کردیئے جائیں گے۔ تاہم ، بوٹ پر آرڈر دینے جیسے آپریشنز تاخیر کا سبب بنیں گے ، جس کے نتیجے میں ڈیٹا جمع ہوسکتا ہے۔ تجارتی عمل درآمد پش ، اکاؤنٹ پش ، اور گہرائی میں مداخلت پش جیسی معلومات کے ل we ، ہمیں تاریخ کے اعداد و شمار کی ضرورت ہے۔ کوٹ مارکیٹ کے اعداد و شمار کے ل most ، زیادہ تر معاملات میں ، ہم صرف تازہ ترین اعداد و شمار کی پرواہ کرتے ہیں ، تاریخ کے اعداد و شمار کی نہیں۔

اگرread()کوئی پیرامیٹرز کا اضافہ کرتا ہے، یہ سب سے پرانے ڈیٹا واپس آئے گا، اور جب تک کوئی ڈیٹا نہیں ہے واپسی تک بلاک. اگر آپ تازہ ترین ڈیٹا چاہتے ہیں، آپ استعمال کر سکتے ہیںclient.read(-2)فوری طور پر تازہ ترین ڈیٹا واپس کرنے کے لئے، لیکن جب کوئی ڈیٹا نہیں ہے، تو یہ null واپس آئے گا، جو حوالہ سے پہلے فیصلہ کرنے کی ضرورت ہے.

پرانے کیچڈ ڈیٹا سے نمٹنے کے طریقہ پر منحصر ہے اور جب کوئی ڈیٹا نہیں ہوتا ہے تو اسے مسدود کردیا جاتا ہے ، read کے مختلف پیرامیٹرز ہوتے ہیں ، جیسا کہ نیچے دیئے گئے ٹیبل میں دکھایا گیا ہے ، جو پیچیدہ لگتا ہے ، لیکن پروگرام کو زیادہ لچکدار بنا دیتا ہے۔img

4.ویب ساکٹ کے ذریعہ متعدد پلیٹ فارمز سے رابطہ قائم کرنا

اس معاملے میں یہ واضح ہے کہ صرف read() کا استعمال پروگرام میں کام نہیں کرتا ہے ، کیونکہ ایک پلیٹ فارم منتظر پیغامات کو مسدود کردے گا ، اور دوسرا پلیٹ فارم نئے پیغامات ہونے کے باوجود بھی وصول نہیں کرے گا۔ عام پروسیسنگ کا طریقہ یہ ہے:

    function main() {
        var binance = Dial("wss://stream.binance.com:9443/ws/!ticker@arr");
        var coinbase = Dial("wss://ws-feed.pro.coinbase.com", 60)
        coinbase.write('{"type": "subscribe","product_ids": ["BTC-USD"],"channels": ["ticker","heartbeat"]}')
        while (true) {
            var msgBinance = binance.read(-1) // Parameter -1 represents no data and return null immediately; it will not occur that being blocked before there is data to be returned 
            var msgCoinbase = coinbase.read(-1)
            if(msgBinance){
                // at this time, Binance has data to return 
            }
            if(msgCoinbase){
                // at this time, coinbase has data to return 
            }
            Sleep(1) // Sleep for 1 millisecond
        }
    }

5.ڈس کنیکشن اور ری کنکشن کے مسائل

پروسیسنگ کا یہ حصہ زیادہ پریشان کن ہے ، کیونکہ پش ڈیٹا میں خلل پڑ سکتا ہے ، یا پش تاخیر انتہائی لمبی ہے۔ یہاں تک کہ اگر دل کی دھڑکن موصول ہوسکتی ہے تو ، اس کا مطلب یہ نہیں ہے کہ اعداد و شمار کو ابھی بھی دھکا دیا جارہا ہے۔ آپ ایونٹ کا وقفہ طے کرسکتے ہیں۔ اگر وقفے کے بعد کوئی تازہ کاری موصول نہیں ہوتی ہے تو ، دوبارہ رابطہ قائم کریں۔ یہ دیکھنے کے لئے کہ آیا اعداد و شمار درست ہیں ، وقت کی ایک مدت کے بعد rest کے ذریعہ واپس آنے والے نتائج کا موازنہ کرنا بہتر ہے۔ بائننس کے خصوصی معاملات کے ل you ، آپ براہ راست خودکار دوبارہ رابطہ قائم کرسکتے ہیں۔

6.Websocket کے جنرل پروگرام فریم ورک کا استعمال کرتے ہوئے

کے لئے دھکا ڈیٹا استعمال کیا گیا ہے، پروگرام قدرتی طور پر واقعہ ٹرگر کے طور پر لکھا جائے گا؛ دھکا ڈیٹا کی تعدد پر توجہ دینا، کیونکہ اعلی تعدد کی درخواستوں کو بلاک کیا جائے گا کی قیادت کریں گے؛ عام طور پر آپ لکھ سکتے ہیں:

    var tradeTime = Date.now()
    var accountTime = Date.now()
    function trade(data){
        if(Date.now() - tradeTime > 2000){//Here it limits only one trade in 2 seconds 
            tradeTime = Date.now()
            // Trading logic
        }
    }
    function GetAccount(){
        if(Date.now() - accountTime > 5000){//Here it limits GetAccount only once in 5 seconds 
            accountTime = Date.now()
            return exchange.GetAccount()
        }
    }
    function main() {
        var client = Dial("wss://stream.binance.com:9443/ws/!ticker@arr|reconnect=true");
        while (true) {
            var msg = client.read()
            var data = JSON.parse(msg)
            var account = GetAccount()
            trade(data)
        }
    }

7.Conclusion

ہر پلیٹ فارم پر کنکشن کا طریقہ ، ڈیٹا ٹرانسمیشن کا طریقہ ، سبسکرائب کردہ مواد اور ویب ساکٹ کا ڈیٹا فارمیٹ اکثر مختلف ہوتا ہے ، لہذا پلیٹ فارم اسے انکیپسول نہیں کرتا ہے اور خود ہی مربوط ہونے کے لئے ڈائل فنکشن کا استعمال کرنے کی ضرورت ہوتی ہے۔ اس مضمون میں بنیادی طور پر کچھ بنیادی احتیاطی تدابیر کا احاطہ کیا گیا ہے۔ اگر آپ کے پاس مزید سوالات ہیں تو ، براہ کرم بلا جھجھک پوچھیں۔

پی ایس: اگرچہ کچھ پلیٹ فارم ویب ساکٹ اقتباسات فراہم نہیں کرتے ہیں ، در حقیقت ، جب آپ ڈیبگنگ فنکشن استعمال کرنے کے لئے ویب سائٹ پر لاگ ان کرتے ہیں تو ، آپ کو معلوم ہوگا کہ وہ سب ویب ساکٹ پش کا استعمال کررہے ہیں۔ تحقیق کے بعد ، آپ کو معلوم ہوگا کہ کچھ سبسکرپشن فارمیٹس اور واپسی کی شکلیں خفیہ شکل میں دکھائی دیتی ہیں ، جو بیس 64 کے ساتھ ڈیکوڈنگ اور ڈیکمپریسنگ کرکے دیکھی جاسکتی ہیں۔

ملٹی تھریڈ ہم آہنگی

جاوا اسکرپٹ گو فنکشن کے ذریعہ ہم آہنگی کا احساس کرسکتا ہے ، اور پائتھون اسی ملٹی تھریڈ لائبریری کا استعمال کرسکتا ہے۔

مقداری حکمت عملیوں کے احساس کے دوران ، بیک وقت عملدرآمد وقت کی تاخیر کو کم کرسکتا ہے اور کارکردگی کو بہتر بناسکتا ہے۔ مثال کے طور پر ہیجنگ حکمت عملی بوٹ کو لے لو۔ اسے دو سکے کی گہرائی حاصل کرنے کی ضرورت ہے ، اور ترتیب میں عملدرآمد کا کوڈ اس طرح دکھایا گیا ہے:

var depthA = exchanges[0].GetDepth()
var depthB = exchanges[1].GetDepth()

جب کسی درخواست کے آرام API میں تاخیر ہوتی ہے ، مثال کے طور پر تاخیر کا وقت 100 ملی سیکنڈ ہوتا ہے ، پھر گہرائی کو دو بار حاصل کرنے کا وقت دراصل مختلف ہوتا ہے۔ اگر مزید رسائی کی ضرورت ہو تو ، تاخیر کے مسائل زیادہ واضح ہوں گے ، جو حکمت عملی کے نفاذ کو متاثر کریں گے۔

چونکہ جاوا اسکرپٹ میں ملٹی تھریڈ نہیں ہوتا ہے ، لہذا اس مسئلے کو حل کرنے کے لئے انڈر لیئر میں گو فنکشن شامل ہوتا ہے۔ گو فنکشن ان API کے لئے استعمال کیا جاسکتا ہے جن کے لئے نیٹ ورک تک رسائی کی ضرورت ہوتی ہے ، جیسےGetDepth, GetAccountاور اسی طرح.IOبھی حمایت کی جاتی ہے، جیسے:exchange.Go("IO", "api", "POST", "/api/v1/contract_batchorder", "orders_data=" + JSON.stringify(orders))، لیکن ڈیزائن میکانزم کی وجہ سے، یہ لاگو کرنے کے لئے زیادہ tedious ہے.

var a = exchanges[0].Go("GetDepth")
var b = exchanges[1].Go("GetDepth")
var depthA = a.wait() // Call "wait" method to wait for the return of the asynchronous GetDepth result 
var depthB = b.wait()

زیادہ تر آسان معاملات میں ، اس طرح حکمت عملی لکھنا ٹھیک ہے۔ لیکن نوٹ کریں کہ ہر بار جب حکمت عملی لوپ ہوتی ہے تو اس عمل کو دہرا دیا جاتا ہے ، اور انٹرمیڈیٹ متغیرات a اور b دراصل صرف عارضی طور پر معاون ہوتے ہیں۔ اگر ہمارے پاس بہت سارے ہم آہنگ کام ہیں تو ، ہمیں اضافی طور پر a اور depthA ، b اور depthB کے مابین مطابقت کو ریکارڈ کرنے کی ضرورت ہوتی ہے۔ جب ہمارے ہم آہنگ کام غیر یقینی ہوتے ہیں تو ، صورتحال زیادہ پیچیدہ ہوتی ہے۔ لہذا ، ہم امید کرتے ہیں کہ ایک فنکشن کا احساس کریں: جب Go فنکشن کو بیک وقت لکھتے ہیں تو ، متغیر کو بیک وقت پابند کریں؛ جب ہم آہنگ چلنے والا نتیجہ واپس آتا ہے تو ، نتیجہ کی قیمت خود بخود متغیر کو تفویض کردی جاتی ہے ، اس طرح انٹرمیڈیٹ متغیرات کی ضرورت کو ختم کرتے ہوئے اور پروگرام کو زیادہ جامع بناتے ہیں۔ مخصوص نفاذ مندرجہ ذیل ہے:

function G(t, ctx, f) {
    return {run:function(){
        f(t.wait(1000), ctx)
    }}
}

ہم نے ایک G فنکشن کی وضاحت کی، جہاں پیرامیٹر t عملدرآمد کرنے والا Go فنکشن ہے، ctx پروگرام سیاق و سباق کی ریکارڈنگ کا فنکشن ہے، اور f ایک مخصوص قدر تفویض کرنے والا فنکشن ہے۔ آپ اس فنکشن کا اثر بعد میں دیکھیں گے۔

اس وقت ، مجموعی طور پر پروگرام فریم ورک کو ایک ماڈل کے طور پر لکھا جاسکتا ہے ، جو پروڈیوسر-صارف ماڈل کی طرح ہے (کچھ اختلافات کے ساتھ) ، پروڈیوسر مستقل طور پر کاموں کو بھیجتا ہے ، اور صارف انہیں بیک وقت انجام دیتا ہے۔ مندرجہ ذیل کوڈ صرف مظاہرے کے لئے ہے اور اس میں کسی بھی پروگرام کے عمل درآمد کی منطق شامل نہیں ہے۔

var Info = [{depth:null, account:null}, {depth:null, account:null}] // If we need to obtain the depth and account of the two platforms, more information can also be put in, such as order ID and status, etc.
var tasks = [ ] // Global task list 

function produce(){ // Issue all kinds of concurrent tasks
  // Here the task producing logic has been omitted, only for demo
  tasks.push({exchange:0, ret:'depth', param:['GetDepth']})
  tasks.push({exchange:1, ret:'depth', param:['GetDepth']})
  tasks.push({exchange:0, ret:'sellID', param:['Buy', Info[0].depth.Asks[0].Price, 10]})
  tasks.push({exchange:1, ret:'buyID', param:['Sell', Info[1].depth.Bids[0].Price, 10]})
}
function worker(){
    var jobs = []
    for(var i=0;i<tasks.length;i++){
        var task = tasks[i]
        jobs.push(G(exchanges[task.exchange].Go.apply(this, task.param), task, function(v, task) {
                    Info[task.exchange][task.ret] = v // Here "v" is the return value of the concurrent Go function "wait()", and you can think about it 
                }))
    }
    _.each(jobs, function(t){
            t.run() // Here all tasks are executed concurrently 
        })
    tasks = []
}
function main() {
    while(true){
        produce()         // Give trading command
        worker()        // Concurrently execute
        Sleep(1000)
    }
}

ایسا لگتا ہے کہ مذکورہ بالا کارروائیوں میں صرف ایک آسان فنکشن کو نافذ کیا گیا ہے۔ در حقیقت ، اس نے کوڈ کی پیچیدگی کو بہت آسان بنا دیا ہے۔ ہمیں صرف اس بات کی پرواہ کرنے کی ضرورت ہے کہ پروگرام کو کون سے کاموں کو پیدا کرنے کی ضرورت ہے ، اور worker() پروگرام خود بخود انہیں بیک وقت انجام دے گا اور اسی کے نتائج واپس کرے گا۔ لچک بہت بہتر ہوگئی ہے۔

چارٹ فنکشن کی طرف سے ڈرائنگ

ابتدائی ٹیوٹوریل میں ، ڈرائنگ کلاس لائبریری کی سفارش ڈرائنگ کے تعارف میں کی جاتی ہے ، جو زیادہ تر معاملات میں ضروریات کو پورا کرسکتی ہے۔ اگر آپ کو مزید تخصیص کی ضرورت ہو تو ، آپ براہ راست چارٹ آبجیکٹ کو آپریٹ کرسکتے ہیں۔

کے اندرونی پیرامیٹرزChart({…})ہائی اسٹاک اور ہائی چارٹس کی اشیاء ہیں، لیکن ایک اضافی پیرامیٹر__isStockایف ایم زیڈ کو بنیادی طور پر ہائی چارٹس اور ہائی اسٹاک کے بنیادی ماڈیولز کی حمایت کرتا ہے ، لیکن اضافی ماڈیولز کی حمایت نہیں کرتا ہے۔

ہائی چارٹس کی مخصوص مثال:https://www.highcharts.com/demo؛ ہائی اسٹاک مثال:https://www.highcharts.com/stock/demo. آپ ان مثالوں میں کوڈز کا حوالہ دے سکتے ہیں، اور FMZ کرنے کے لئے ان کو منتقلی آسان.

آپ مخصوص انڈیکس کے ساتھ سیریز میں ڈیٹا شامل کرنے کے لئے شامل ([سیریز انڈیکس ((جیسے 0 ، ڈیٹا]) کو کال کرسکتے ہیں۔ چارٹ کے اعداد و شمار کو صاف کرنے کے لئے ری سیٹ کو کال کریں۔ ری سیٹ ایک نمبر پیرامیٹر لے سکتا ہے اور بچانے کی رقم کی وضاحت کرسکتا ہے۔ متعدد چارٹ ڈسپلے کی حمایت کی جاتی ہے ، جس میں صرف ترتیب کے دوران صف کے پیرامیٹرز میں گزرنے کی ضرورت ہوتی ہے ، جیسے: var چارٹ = چارٹ (([{...} ، {...} ، {...}) ۔ مثال کے طور پر ، اگر چارٹ 1 میں دو سیریز ہیں تو ، چارٹ 2 میں ایک سیریز ہے ، اور چارٹ 3 میں ایک سیریز ہے ، جب کال کریں شامل کریں ، سیریز ID 0 اور 1 کو اپ ڈیٹ کردہ چارٹ 1 میں دونوں سیریز کے ڈیٹا کو الگ الگ نمائندگی کرنے کے لئے مخصوص کیا جاتا ہے؛ سیریز ID 2 کو چارٹ 2 میں پہلی سیریز کے اعداد و شمار کی نمائندگی کرنے کے لئے مخصوص کیا جاتا ہے؛ سیریز ID 3 کو چارٹ 3 میں پہلی سیریز کے اعداد و شمار کی نمائندگی کرنے کے لئے مخصوص کیا جاتا ہے۔

ایک مخصوص مثال:

var chart = { // This "chart" in JS is an object; before using the Chart function, we need to declare the object variable of a configured chart "chart" 
    __isStock: true,                                    // Mark whether it is a general chart; you can change it to false and try to operate it, if you are interested 
    tooltip: {xDateFormat: '%Y-%m-%d %H:%M:%S, %A'},    // Zoom tool
    title : { text : 'spread chart'},                       // Theme
    rangeSelector: {                                    // Choose the range
        buttons:  [{type: 'hour',count: 1, text: '1h'}, {type: 'hour',count: 3, text: '3h'}, {type: 'hour', count: 8, text: '8h'}, {type: 'all',text: 'All'}],
        selected: 0,
        inputEnabled: false
    },
    xAxis: { type: 'datetime'},                         // Horizontal axis, namely X axis; currently set type: time
    yAxis : {                                           // Vertical axis, namely Y axis; the default changes according to the data 
        title: {text: 'spread'},                           // Theme
        opposite: false,                                // whether to enable the vertical axis on the right 
    },
    series : [                                          // Data series; the attribute saves all kinds of data series (lines, K-lines, labels, etc.)
        {name : "line1", id : "line1,buy1Price", data : []},  // The index is 0; the data stroed in the data array is the data of the index series 
        {name : "line2", id : "line2,lastPrice", dashStyle : 'shortdash', data : []}, // The index is 1; set  dashStyle: 'shortdash', namely: set  dashed line
    ]
};
function main(){
    var ObjChart = Chart(chart);  // Call the Chart function, and initialize the chart 
    ObjChart.reset();             // Empty 
    while(true){
        var nowTime = new Date().getTime();   // Obtain the timestamp of this polling, namely a millisecond tiemstamp, to ensure the location of writing to the X axis in the chart 
        var ticker = _C(exchange.GetTicker);  // Obtain the market quotes data
        var buy1Price = ticker.Buy;           // Get buy one price from the return value of the market quotes 
        var lastPrice = ticker.Last + 1;      // Get the final executed price, and we add 1 to split the 2 lines 
        ObjChart.add([0, [nowTime, buy1Price]]); // Use the timestamp as the value of X, and buy one price as the value of Y; pass in the data series of index 0  
        ObjChart.add([1, [nowTime, lastPrice]]); // Same as above. 
        Sleep(2000);
    }
}

چارٹ ترتیب کا استعمال کرنے کا مثال:https://www.fmz.com/strategy/136056

اعلی درجے کی بیک ٹسٹ

پائیتھون لوکل بیک ٹسٹ

مخصوص اوپن سورس ایڈریس:https://github.com/fmzquant/backtest_python

تنصیب

کمانڈ لائن میں درج ذیل کمانڈ درج کریں:

pip install https://github.com/fmzquant/backtest_python/archive/master.zip

سادہ مثال

بیک ٹیسٹ پیرامیٹرز کو تبصرے کی شکل میں حکمت عملی کوڈ کے آغاز میں ترتیب دیں ، اور تفصیلات ایف ایم زیڈ کی ویب سائٹ کے صفحے پر سیٹنگز کو محفوظ کریں کے بٹن پر دکھائی جائیں گی۔

'''backtest
start: 2018-02-19 00:00:00
end: 2018-03-22 12:00:00
period: 15m
exchanges: [{"eid":"OKEX","currency":"LTC_BTC","balance":3,"stocks":0}]
'''
from fmz import *
task = VCtx(__doc__) # initialize backtest engine from __doc__
print exchange.GetAccount()
print exchange.GetTicker()
print task.Join() # print backtest result

بیک ٹیسٹ

مکمل حکمت عملیوں کے لئے لامحدود لوپس کی ضرورت ہوتی ہے، EOF غلطی بیک ٹسٹ ختم ہونے کے بعد اٹھایا جائے گا؛ لہذا، ہمیں غلطی برداشت کرنا چاہئے.

# !/usr/local/bin/python
# -*- coding: UTF-8 -*-

'''backtest
start: 2018-02-19 00:00:00
end: 2018-03-22 12:00:00
period: 15m
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD","balance":10000,"stocks":3}]
'''

from fmz import *
import math
import talib

task = VCtx(__doc__) # initialize backtest engine from __doc__

# ------------------------------ Start of the Strategy  --------------------------

print exchange.GetAccount()     # Call some interfaces, and print their return values 
print exchange.GetTicker()

def adjustFloat(v):             # the custom functions in the strategy 
    v = math.floor(v * 1000)
    return v / 1000

def onTick():
    Log("onTick")
    # Specific strategy code 


def main():
    InitAccount = GetAccount()
    while True:
        onTick()
        Sleep(1000)

# ------------------------------ End of the Strategy --------------------------

try:
    main()                     # The end of the backtest will raise EOFError() to stop stop the backtest loop. Therefore, we should handle with the error, and call task.Join() to print the backtest result, after the error is detected  
except:
    print task.Join()         

اپنی مرضی کے مطابق بیک ٹسٹ ڈیٹا

exchange.SetData(arr) بیک ٹیسٹ ڈیٹا ماخذ کو سوئچ کرتا ہے اور اپنی مرضی کے مطابق K- لائن ڈیٹا استعمال کرتا ہے۔ پیرامیٹر arr ایک صف ہے ، جس کے عناصر K- لائن بار ڈیٹا ہیں (یعنی: K- لائن ڈیٹا صف ، جو عارضی طور پر صرف جاوا اسکرپٹ بیک ٹیسٹ کی حمایت کرتی ہے۔

arr کے صف میں، ایک عنصر کا ڈیٹا فارمیٹ:

[
    1530460800,    // time     Timestamp 
    2841.5795,     // open     Open Price 
    2845.6801,     // high     Highest Price
    2756.815,      // low      Lowest Price
    2775.557,      // close    Close Price
    137035034      // volume   Executed Volume 
]

اعداد و شمار کا ماخذ ٹیمپلیٹ میں درآمد کیا جا سکتا ہے۔

function init() {                                                          // The init function in the template will be executed first when the template is loaded; ensure the exchange.SetData(arr) function is executed first, initialized, and set the data to the backtest system
    var arr = [                                                            // The K-line data to be used during backtest
        [1530460800,2841.5795,2845.6801,2756.815,2775.557,137035034],      // The data of the earliest K-line bar
        ... ,                                                              // If the K-line data is too long, use "..." to represent the omitted data here
        [1542556800,2681.8988,2703.5116,2674.1781,2703.5116,231662827]     // The data of the latest K-line bar 
    ]
    exchange.SetData(arr)                                                  // Import the custom data mentioned above 
    Log("Import data successfully")
}

نوٹ: پہلے اپنی مرضی کے مطابق ڈیٹا کو درآمد کرنا یقینی بنائیں (یعنی ، ڈیٹا کو ترتیب دینے کے لئے تبادلہ.سیٹ ڈیٹا فنکشن کو کال کریں۔) ابتدائیہ کے دوران۔ کسٹم K- لائن ڈیٹا کی مدت بیک ٹسٹ پیج پر سیٹ کردہ انڈر لیئر K- لائن مدت کے مطابق ہونی چاہئے ، یعنی: کسٹم K- لائن ڈیٹا ؛ ایک K- لائن کا وقت 1 منٹ ہے ، لہذا بیک ٹسٹ میں سیٹ کردہ انڈر لیئر K- لائن کا دورانیہ بھی 1 منٹ پر مقرر کیا جانا چاہئے۔

ایف ایم زیڈ کے ذریعہ تعاون یافتہ نہیں پلیٹ فارم کا استعمال

اگر کسی غیر تعاون یافتہ پلیٹ فارم کی API بنیادی ایڈریس کے علاوہ کسی تعاون یافتہ پلیٹ فارم کی بالکل ایک جیسی ہے تو ، غیر تعاون یافتہ پلیٹ فارم کو بنیادی ایڈریس کو سوئچ کرکے سپورٹ کیا جاسکتا ہے۔ مخصوص ہونے کے لئے ، پلیٹ فارم شامل کرتے وقت ایک تعاون یافتہ پلیٹ فارم کا انتخاب کریں ، لیکن غیر تعاون یافتہ پلیٹ فارم کی API-KEY کو پُر کریں ، اور حکمت عملی میں بیس ایڈریس کو تبدیل کرنے کے لئے IO کا استعمال کریں ، جیسے:

exchange.IO("base", "http://api.huobi.pro") 
//http://api.huobi.pro is the base address of the unsupported platform API, and notice not to add api/v3 and so on, for the address will be automatically completed

ایف ایم زیڈ کے ذریعہ تمام پلیٹ فارمز کی حمایت نہیں کی جاتی ہے ، لیکن ہمارے پلیٹ فارم نے عام پروٹوکول تک رسائی کا طریقہ فراہم کیا ہے۔ مخصوص اصول یہ ہیں:

  • جب آپ کسی پلیٹ فارم تک رسائی کے لیے کوڈ لکھتے ہیں، تو پروگرام ایک ویب سروس بنائے گا۔
  • جب آپ ایف ایم زیڈ میں ایک پلیٹ فارم شامل کرتے ہیں تو، ویب سروس کا پتہ اور بندرگاہ کی وضاحت کریں.
  • جب ڈاکر عام پروٹوکول کے پلیٹ فارم بوٹ کو چلاتا ہے تو ، حکمت عملی میں API تک رسائی کی درخواست عام پروٹوکول کو بھیجی جائے گی۔
  • عام پروٹوکول درخواست کے ذریعہ پلیٹ فارم تک رسائی حاصل کرے گا ، اور ڈوکر کو نتیجہ واپس کرے گا۔

عام طور پر ، عام پروٹوکول ایک انٹرمیڈیٹر کی طرح ہے ، جو ڈوکر کی درخواست کو پراکسی کرتا ہے اور اسی معیار کے مطابق ڈیٹا واپس کرتا ہے۔ عام پروٹوکول کا کوڈ خود ہی مکمل کرنے کی ضرورت ہے۔ عام پروٹوکول لکھنے کا اصل مطلب یہ ہے کہ آپ صرف پلیٹ فارم تک رسائی حاصل کرسکتے ہیں اور حکمت عملی کو مکمل کرسکتے ہیں۔ ایف ایم زیڈ آفیشل کبھی کبھی پلیٹ فارمز کے عام پروٹوکول کا ایکسی ورژن جاری کرتا ہے۔ عام پروٹوکول پائیتھون میں بھی کیا جاسکتا ہے ، جسے پھر عام بوٹ کی طرح ڈوکر پر چلایا جاسکتا ہے۔

عام پروٹوکول کا مخصوص تعارف:https://www.fmz.com/bbs-topic/9120پیتھون میں عام پروٹوکول لکھنے کا مثال:https://www.fmz.com/strategy/101399

اپنا مقداری پلیٹ فارم بنانا

بالکل اسی طرح جیسے کسی پلیٹ فارم کے مختلف آپریشنز کو API کے ذریعے لاگو کیا جاسکتا ہے ، ایف ایم زیڈ کی ویب سائٹ بھی API پر مبنی ہے۔ آپ اپنی API-KEY کے لئے درخواست دے سکتے ہیں ایف ایم زیڈ ویب سائٹ افعال کو پورا کرنے کے لئے ، جیسے create ، restart ، DeleteRobot ، GetRobotList GetRobotLogs ، وغیرہ۔ تفصیلات کے لئے براہ کرم API دستاویز میں ایف ایم زیڈ پلیٹ فارم کی API توسیع سیکشن سے رجوع کریں۔

ایف ایم زیڈ کوانٹ پلیٹ فارم کی طاقتور توسیع پذیری کی وجہ سے ، آپ اپنے API توسیع پر مبنی اپنا مقداری پلیٹ فارم تشکیل دے سکتے ہیں ، جس سے آپ کے صارفین کو اپنے پلیٹ فارم پر بوٹس چلانے کی اجازت ملتی ہے ، وغیرہ۔ مخصوص حوالہ:https://www.fmz.com/bbs-topic/1697 .

ایف ایم زیڈ کا پارٹنر بننا

نیٹ ایز کلاس روم کی تشہیر

کریپٹوکرنسی ٹریڈنگ مارکیٹ نے اپنی خاصیت کی وجہ سے مقداری تاجروں کی طرف سے زیادہ سے زیادہ توجہ مبذول کروائی ہے۔ در حقیقت ، پروگرام ٹریڈنگ کریپٹوکرنسی کا مرکزی دھارے بن گیا ہے ، اور ہیجنگ اور مارکیٹ بنانے جیسی حکمت عملی ہمیشہ مارکیٹ میں سرگرم رہتی ہے۔ کمزور پروگرامنگ فاؤنڈیشن والے ابتدائی اس نئے میدان میں داخل ہونا چاہتے ہیں ، متعدد پلیٹ فارمز اور بدلتے ہوئے اے پی آئی کا سامنا کرتے ہوئے ، مشکلات سے بھرا ہوا ہے۔ ایف ایم زیڈ کوانٹ پلیٹ فارم ، (سابقہ بوٹ ویز ،www.fmz.com) فی الحال سب سے بڑی کریپٹوکرنسی مقداری کمیونٹی اور پلیٹ فارم ہے ، جس نے 4 سال سے زیادہ عرصے سے ہزاروں ابتدائیوں کو مقداری تجارت کی راہ پر گامزن ہونے میں مدد فراہم کی ہے۔ نیٹ ایز پر کورس لینے کے ل you ، آپ کو صرف 20 یوآن کی ضرورت ہے ، اور کورس مکمل طور پر ابتدائیوں کے لئے ہے۔

فروغنیٹ ایز کلاؤڈ کلاس روم پر کریپٹوکرنسی کوانٹیٹیٹیو ٹریڈنگ کورس. نیٹ ایز کلاؤڈ کلاس روم میں لاگ ان کریں اور اپنے کورس کا لنک شیئر کریں (لنک میں ایک انوکھا کورس آئی ڈی ہے) ۔ دوسرے ، جو اس لنک کے ذریعے رجسٹر ہوتے ہیں اور کورس خریدتے ہیں ، آپ کو مجموعی طور پر 50٪ کمیشن ، یعنی 10 یوآن کے طور پر ملے گا۔ نقد رقم نکالنے کے لئے نیٹ ایز کلاؤڈ کلاس روم پریمیم کورس پروموشن کے وی چیٹ پبلک اکاؤنٹ پر عمل کریں۔ آپ کو ویبو یا کیو کیو گروپ میں کورس کو فروغ دینے کے لئے دوسروں کو مدعو کرنے کا بھی خیرمقدم کیا جاتا ہے۔

وابستگی

صارفین جو پروموشن لنک پر کلک کرتے ہیں ، آدھے سال کے اندر اندراج اور ری چارج کرتے ہیں ، وہ اس پالیسی سے لطف اندوز ہوں گے کہ ہماری کمپنی درست آرڈر میں موثر رقم کے مطابق رعایت دے گی۔ کمیشن کو پوائنٹس کی شکل میں پروموٹر کے اکاؤنٹ میں واپس کردیا جائے گا۔ صارفین پوائنٹس کو ایف ایم زیڈ پلیٹ فارم کے اکاؤنٹ بیلنس میں 10: 1 کے تناسب سے تبدیل کرسکتے ہیں ، اور صارفین مستقبل میں ایف ایم زیڈ کوانٹ کی متعلقہ مصنوعات کا تبادلہ کرنے کے لئے پوائنٹس کا استعمال بھی کرسکتے ہیں۔ سرگرمی کے لئے مخصوص لنک:https://www.fmz.com/bbs-topic/3828

کاروباری اداروں کے لئے FMZ کوانٹ پلیٹ فارم

مکمل ایف ایم زیڈ ویب سائٹ کو کسی انٹرپرائز یا ٹیم کے خصوصی سرور پر مکمل کنٹرول اور فنکشنل حسب ضرورت کے لئے تعینات کیا جاسکتا ہے۔ ایف ایم زیڈ ویب سائٹ کو تقریبا 100,000،XNUMX صارفین نے استعمال کیا ہے اور اس کا تجربہ کیا ہے ، اور اس نے اعلی دستیابی اور سیکیورٹی حاصل کی ہے ، جو مقداری ٹیموں اور کاروباری اداروں کے لئے وقت کی بچت کرسکتی ہے۔ انٹرپرائز ورژن درمیانے درجے کی مقداری تجارتی ٹیموں ، خام مال فیوچر سروس فراہم کرنے والوں وغیرہ کے لئے ہے۔ براہ کرم مخصوص قیمتوں کے لئے منتظم سے رابطہ کریں۔

مارکیٹ بنانے کا نظام

پیشہ ورانہ نظام ، جو پلیٹ فارمز کے لئے مارکیٹ لیکویڈیٹی اور فنڈز کا انتظام فراہم کرتا ہے ، مارکیٹ میں مارکیٹ بنانے کا سب سے بہتر نظام ہوسکتا ہے۔ یہ بہت سارے پلیٹ فارمز اور ٹیموں کے ذریعہ وسیع پیمانے پر استعمال ہوتا ہے۔

پلیٹ فارم اسکیم

ایف ایم زیڈ ٹکنالوجی ٹریڈنگ سسٹم میموری میچنگ ٹکنالوجی کو اپناتا ہے ، اور آرڈر پروسیسنگ کی رفتار 2 ملین تجارت فی سیکنڈ تک زیادہ ہے ، جو اس بات کو یقینی بناسکتی ہے کہ آرڈر پروسیسنگ میں کوئی تاخیر یا تاخیر نہیں ہوگی۔ یہ 20 ملین سے زیادہ بیک وقت آن لائن صارفین کے ساتھ پلیٹ فارمز کے ہموار اور مستحکم آپریشن کو برقرار رکھ سکتا ہے۔ کثیر پرت اور کثیر کلسٹر سسٹم فریم ورک سسٹم کی حفاظت ، استحکام اور توسیع کو یقینی بناتا ہے۔ فنکشن کی تعیناتی اور ورژن کی تازہ کاریوں کو بغیر کسی ٹائم ٹائم کے کیا جاسکتا ہے ، جو ٹرمینل صارفین کے آپریٹنگ تجربے کی زیادہ سے زیادہ ضمانت دیتا ہے۔ فی الحال ، سسٹم wex.app تخروپن پلیٹ فارم میں تجربہ کیا جاسکتا ہے۔


مزید