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

FMZ انٹرمیڈیٹ ٹیوٹوریل

مصنف:گھاس, تخلیق: 2019-04-12 14:28:19, تازہ کاری: 2024-02-05 20:07:56

[TOC]

img

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

پورے سبق کو سیکھنے کے بعد، آپ FMZ کا مکمل استعمال کریں گے اور زیادہ اپنی مرضی کے مطابق، زیادہ موثر اور زیادہ پیچیدہ حکمت عملی لکھنے کے قابل ہو جائے گا.

1.متعدد تبادلے شامل کریں اور متعدد علامتوں کی تجارت کریں

آپ ایک روبوٹ کے اندر متعدد تبادلے اور متعدد علامتوں پر آسانی سے تجارت کرسکتے ہیں۔ یہ کیسے کام کرتا ہے:

  • روبوٹ شروع کرتے وقت ایک تبادلہ یا متعدد تبادلوں کو شامل کریں.
  • اے پی آئی کو کہا جا سکتا ہے جیسےexchange.GetTicker()جب ایک تبادلہ شامل کیا جاتا ہے
  • جب ایک سے زیادہ تبادلے شامل کر رہے ہیں، API کی طرح بلایا جاتا ہےexchanges[0].GetTicker(), exchanges[1].GetTicker() img
  • آپ مختلف علامتوں کے ساتھ ایک ہی تبادلہ شامل کر سکتے ہیں.img
  • آپ کے ساتھ پابند ہے کہ علامت کو تبدیل کر سکتے ہیںexchangeاستعمال کرتے ہوئےIOفنکشن
var symbols = ["BTC_USDT", "LTC_USDT", "EOS_USDT", "ETH_USDT", "BCC_USDT"]
var buyValue = 1000
function main(){
  for(var i=0;i<symbols.length;i++){
      exchange.IO("currency", symbols[i]) // It is always valid until the next change
      var ticker = exchange.GetTicker()
      var amount = _N(buyValue/ticker.Sell, 3)
      exchange.Buy(ticker.Sell, amount)
      Sleep(1000)
  }
}

2.Tradeفیوچر اور سواپ معاہدے

اب تک ، ایف ایم زیڈ تمام بڑے فیوچر ایکسچینجز ، جیسے اوکیکس ، ہووبی ڈی ایم ، بٹ ایم ای ایکس ، گیٹ آئی او اور ڈیریبٹ ، اور ان کے سواپ معاہدوں کی حمایت کرتا ہے۔

ایف ایم زیڈ پر فیوچر کی تجارت کرنے کے لیے، آپ کو پہلے فیوچر ایکسچینج شامل کرنے کی ضرورت ہے، روبوٹ شروع کرتے وقت علامت مقرر کریں اور اپنے کوڈ میں معاہدے کی قسم مقرر کریں.

اگر ایک ایکسچینج اسپاٹ اور فیوچر دونوں کو سپورٹ کرتا ہے تو انہیں FMZ میں الگ الگ شامل کیا جانا چاہئے۔img

ذیل کی تصویر میں دکھایا گیا ہے کہ بوٹ شروع کرتے وقت فیوچر علامت کو بی ٹی سی میں کیسے ترتیب دیا جائے۔img

ذیل میں ہر تبادلے کے لئے ایک معاہدے کی قسم مقرر کرنے کا طریقہ ہے.

  • ٹھیک ہے
    exchange.SetContractType("swap")        
    exchange.SetContractType("this_week")   
    exchange.SetContractType("next_week")  
    exchange.SetContractType("quarter")   
  • HuobiDM
    exchange.SetContractType("this_week")   
    exchange.SetContractType("next_week")  
    exchange.SetContractType("quarter")     
  • BitMEX
    exchange.SetContractType("XBTUSD")  
    exchange.SetContractType("XBTM19") 
  • دروازہ
    exchange.SetContractType("swap")    
  • ڈیریبیٹ
    exchange.SetContractType("BTC-PERPETUAL")  
    exchange.SetContractType("BTC-27APR18")

3.بیک ٹیسٹ کے بارے میں

بنیادی تعارف

ایف ایم زیڈ میں بیک ٹسٹنگ کے دو موڈ ہیں:real tickاورsimulate tick. اصل ٹِک لیول میں تمام مکمل شدہ تاریخی ڈیٹا (ایک ٹِک فی سیکنڈ) شامل ہوتا ہے ، لہذا بیک ٹسٹنگ کے نتائج زیادہ قابل اعتماد ہوتے ہیں۔ نقلی سطح آپ کی حکمت عملی کے ذریعہ استعمال ہونے والے وقفے پر ہسٹری کلینس ڈیٹا کا استعمال کرتی ہے۔ ایک کلین کے اندر ٹِک ایک الگورتھم کے ذریعہ تیار کیے جاتے ہیں جو ایم ٹی 4 کی طرح ہی ہے ، آپ مزید تفصیلات تلاش کرسکتے ہیںhttps://www.mql5.com/en/articles/75اس دوران، ایک مختصر وقفہ ٹکس پیدا کرنے کے لئے بیس-کلین کے طور پر منتخب کیا جا سکتا ہے. تخروپن ٹاک موڈ حقیقی ٹک موڈ کے مقابلے میں بہت تیز لیکن کم درست ہے۔ تخروپن ٹک موڈ میں ایک مختصر کلین وقفہ جانچ کی درستگی اور رفتار کے مابین سمجھوتہ ہے۔

بیک ٹیسٹ کی ترتیب

یہاں ڈیفالٹ کی ترتیبات ہیں:imgپوشیدہ پٹ:img

بیک ٹیسٹ کا نتیجہ

img

4.غلطی کی رواداری

تبادلے API تک رسائی حاصل ہے کہ کسی بھی افعال کو بلاتے وقت (جیسےGetTicker, Buy, CancelOrder، وغیرہ...) ، آپ کو ایک ایکسچینج سرور کی دشواری، غلط پیرامیٹرز، نیٹ ورک ٹرانسمیشن کے مسئلے، وغیرہ کی وجہ سے رسائی کی ناکامی مل سکتی ہے. اس صورت میں، فنکشن واپس آ جائے گاnull، جو روبوٹ کو روک سکتا ہے۔ لہذا آپ کو غلطیوں سے نمٹنے کا طریقہ جاننے کی ضرورت ہے۔

غلطی کیا ہے؟

بوٹ ایک غلطی کا پیغام واپس کرے گا جب ایک غلطی واقع ہوتی ہے. صرف تبادلہ نام + غلطی msg تلاش کرنے سے، آپ کو پتہ چل سکتا ہے کہ مسئلہ کیا ہے. مثال کے طور پر، ایک غلطی{"result":false,"error_code":20049}کال کے وقت واپس کیا جاتا ہےexchange.GetAccount()OKEX پر. گوگلOKEX 20049، یہاں نتیجہ ہے:imgآپ کو بھی ایکسچینج API دستاویز پر غلطی کا کوڈ چیک کر سکتے ہیں، جیسےمستقبل کے لئے OKEX غلطی کا کوڈ

ڈیل کی غلطیاں

آپ کو اسٹریٹجی کوڈ لکھتے وقت غلطیوں سے نمٹنے کے طریقوں پر غور کرنا چاہئے۔ یہاں کچھ مثالیں ہیں:

 // 1.Deal when the result is null
 var ticker = exchange.GetTicker()
 while(ticker == null){
     Log('GetTicker error')
     Sleep(100)
     ticker = exchange.GetTicker()
 }
 Log(ticker.Last);
 // 2.Refer when the result is not null
 var ticker = exchange.GetTicker()
 if(!ticker){
     Log(ticker.Last)
 }
 // 3._C() fucntion retry
 var ticker = _C(exchange.GetTicker) // can't  apply _C to CancelOrder, Why?
 Log(ticker.Last)
 // 4. try catch
 try{
     var ticker = exchange.GetTicker()
     Log(ticker.Last)
 }
 catch(err){
     Log('GetTicker error: ', err)
     Log(GetLastError()) //literal means, get last error
 } 

5.مشترکہ تبادلہ سے براہ راست رابطہ کریں

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

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

کے بارے میں تمام تفصیلات تلاش کریںHttpQueryپرhttps://fmz-docs.readthedocs.io/en/latest/code_Instruction/Global Function.html#httpquery

HttpQueryاس درخواست کا خام ڈیٹا لوٹاتا ہے جسے پہلے تجزیہ کیا جانا چاہئے۔ دھچکا مثال ہے:

//FMZ doesn't have a standard function for exchangeInfo that return the trading-information about all symbols. 
var exchangeInfo = JSON.parse(HttpQuery('https://api.binance.com/api/v1/exchangeInfo'))
Log(exchangeInfo) // FMZ doesn't have a standard function for this API
var ticker = JSON.parse(HttpQuery('https://api.binance.com/api/v1/ticker/24hr'))
Log(ticker)

ان عوامی APIs کے لئے،HttpQueryواقعی مفید فنکشن ہے. نوٹ کریں کہHttpQueryصرف جاوا سکرپٹ کی حمایت کرتا ہے، پیتھون کے لئے،urlib2یاrequestبراہ راست HTTP درخواستوں کو بھیجنے کے لئے لائبریری.

آئی او

ان نجی APIs کے لئے، استعمال کرتے ہوئےHttpQueryبہت پیچیدہ ہو جائے گا کیونکہ آپ API کلید، نشان، ہیش، وغیرہ کے ساتھ نمٹنے کے لئے کی ضرورت ہےIOاس حالت کے لئے ایک آسان تقریب ہے، اس پر چیک کریںhttps://fmz-docs.readthedocs.io/en/latest/code_Instruction/Extent API.html#io. IOمختلف استعمال پیرامیٹرز پر منحصر ہے. اس حصے میں، ہم صرف نجی APIs تک رسائی پر توجہ مرکوز.

اس فنکشن کا استعمال کرنے کے لئے پہلے ایکسچینج کی اصل API کو سمجھنے کی ضرورت ہے۔ ذیل میں اسٹاپ آرڈر بنانے کے اقدامات ہیں جو BitMEX پر FMZ کے ذریعہ تعاون یافتہ نہیں ہیں۔

  • سب سے پہلے، BitMEX API دستاویزی صفحہ تلاش کریں:https://www.bitmex.com/api/explorer/
  • سٹاپ آرڈر بنانے کے لئے یو آر ایل ہےhttps://www.bitmex.com/api/v1/orderطریقہ کار یہ ہےPOST، پیرامیٹرز میں علامت،سائڈ، آرڈرQty،stopPx،ordType شامل ہیں، جسے ترتیب دیا جانا چاہئے جیسے "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")

6.ویب ساکٹ کا استعمال کریں

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

جاوا اسکرپٹ کے لئے، آپ استعمال کر سکتے ہیںDialویب ساکٹ سے رابطہ قائم کرنے کے لئے تقریب، پائیتھون کے لئے، آپ استعمال کر سکتے ہیںDialیاwebsocket_client libray.

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

ویب ساکٹ سے منسلک

  • 1.زیادہ تر معاملات میں ، آپ براہ راست رابطہ قائم کرسکتے ہیں۔ ذیل میں بائننس آل ٹکر سے رابطہ قائم کرنے کی ایک مثال ہے۔
    var client = Dial("wss://stream.binance.com:9443/ws/!ticker@arr")
    
  • 2.کمپریسڈ فارمیٹ کے ریٹرن ڈیٹا کے لئے، اسے کنکشن کے وقت مخصوص کرنے کی ضرورت ہے۔ پیرامیٹرcompressکا مطلب ہے کہ اعداد و شمار ایک کمپریسڈ فارمیٹ میں ہے، اور پیرامیٹرmodeنمائندگی کرتا ہے کہ آیا بھیجنے یا وصول کرنے کے کمپریسڈ ہے. OKEX سے منسلک کرنے کی ایک مثال
    var client = Dial("wss://real.okex.com:10441/websocket?compress=true|compress=gzip_raw&mode=recv")
    
  • 3. ڈائل فنکشن خود کار طریقے سے دوبارہ رابطہ قائم کرنے کی حمایت کرتا ہے ، جو بنیادی گو زبان کے ذریعہ کیا جاتا ہے۔ درخواست کے ڈیٹا کا مواد پہلے ہی یو آر ایل میں موجود ہے ، جیسے بائننس کی مثال ، یہ آسان اور سفارش کی جاتی ہے۔ ان لوگوں کے لئے جنھیں خریداری کا پیغام بھیجنے کی ضرورت ہے ، آپ خود ہی دوبارہ رابطہ قائم کرسکتے ہیں۔
    var client = Dial("wss://stream.binance.com:9443/ws/!ticker@arr?reconnect=true")
    
  • 4.کچھ تبادلے سبسکرپشن چینلز یو آر ایل میں شامل ہیں ، جیسے بائننس ، لیکن کچھ صارفین کو سبسکرپشن چینلز بھیجنے کی ضرورت ہوتی ہے ، جیسے سکے بیس:
    var client = Dial("wss://ws-feed.pro.coinbase.com", 60)
    client.write('{"type": "subscribe","product_ids": ["BTC-USD"],"channels": ["ticker","heartbeat"]}')
    

ڈیٹا وصول کریں

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

function main() {
    var client = Dial("wss://stream.binance.com:9443/ws/!ticker@arr")
    while (true) {
        var msg = client.read() //receve data from client
        var data = JSON.parse(msg) //change raw string to js object
        // do something, don't need sleep. 
    }
}

ویب ساکٹ ڈیٹا کو بہت تیزی سے آگے بڑھاتا ہے۔ ڈوکر کا بنیادی صف میں تمام ڈیٹا کیش کرتا ہے ، اور پھر پروگرام کال کرنے پر پہلا واپس کرتا ہےreadروبوٹ کے نیٹ ورک آپریشن جیسےBuy,GetAccount,CancelOrderتاخیر کا سبب بنے گا ، جس کے نتیجے میں اعداد و شمار جمع ہوسکتے ہیں۔ ٹرانزیکشن پش ، اکاؤنٹ پش ، سب سیٹ ڈیپ پش وغیرہ جیسی معلومات کے ل we ، ہمیں تاریخی اعداد و شمار کی ضرورت ہے۔ مارکیٹ کے اعداد و شمار کے ل we ، ہم عام طور پر صرف تازہ ترین پر توجہ دیتے ہیں۔

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

متعدد ویب ساکٹ سے رابطہ کریں

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

function main() {
    var binance = Dial("wss://stream.binance.com:9443/ws/!ticker@arr")
    var coinbase = Dial("wss://ws-feed.pro.coinbase.com")
    coinbase.write('{"type": "subscribe","product_ids": ["BTC-USD"],"channels": ["ticker","heartbeat"]}')
    while (true) {
        var msgBinance = binance.read(-1)
        var msgCoinbase = coinbase.read(-1)
        if(msgBinance){
            // Binance has new data
        }
        if(msgCoinbase){
            // coinbase has new data
        }
        Sleep(1) // just sleep 1ms
    }
}

ویب ساکٹ کے استعمال کے لئے عمومی فریم ورک

چونکہ پش ڈیٹا پہلے ہی استعمال ہوچکا ہے ، لہذا پروگرام قدرتی طور پر ایونٹ سے چلنے والی قسم کے طور پر لکھا جاتا ہے ، جس میں API کی درخواست کی تعدد پر توجہ دی جاتی ہے۔

var tradeTime = Date.now()
var accountTime = Date.now()
function trade(data){
    if(Date.now() - tradeTime > 2000){//only trade once within 2s
        tradeTime = Date.now()
        //trading code
    }
}
function GetAccount(){
    if(Date.now() - accountTime > 5000){//only get account once within 5s
        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)
    }
}

تمام پرامیٹرز

کے پیرامیٹرزDial(Address, Timeout): Timeout: کنکشن کا وقت ختم ایڈریس کے ساتھ منسلک دیگر پیرامیٹرز کی طرف سے پیروی کی جا سکتی ہے&. ایڈریس اور پیرامیٹرز کی طرف سے الگ کر رہے ہیں|,

پیرامیٹر تفصیل
کمپریس کمپریشن طریقہ، ہو سکتا ہےgzip_raw, gzip. اوکیکس استعمال کرتا ہےgzip_raw
موڈ ہو سکتا ہےdualکا مطلب ہے کہ دونوں بھیجنے اور وصول کرنے کے لئے کمپریسڈ کرنے کی ضرورت ہے،sendکا مطلب ہے بھیجنے کے لئے کمپریسڈ کرنے کی ضرورت ہے اورrecvوصول کرنا۔
پراکسی ایس ایس 5 کے لئے پراکسی کی ترتیبات.socks5://name:pwd@192.168.0.1:1080
دوبارہ مربوط کریں Reconnect=trueدوبارہ منسلک کرنے کے لئے
وقفہ intervalدوبارہ کوشش کرنے کا وقفہ ہے، ڈیفالٹ 1000ms ہے
پےلوڈ سبسکرپشن پیغام ہے کہ جب wss دوبارہ منسلک کرنے کے لئے بھیجا جائے کی ضرورت ہے

کے پیرامیٹرزread(): جب ویب ساکٹ منقطع،read()خالی تار واپس کرے گا.

پیرامیٹر کوئی نہیں -1 -2 2000
قطار خالی نہیں ہے فوری طور پر سب سے پرانے اعداد و شمار واپس فوری طور پر سب سے پرانے اعداد و شمار واپس فوری طور پر تازہ ترین ڈیٹا واپس فوری طور پر سب سے پرانے اعداد و شمار واپس
قطار خالی ہے نئے اعداد و شمار واپس آنے تک بلاک کریں واپسیnullفوری طور پر واپسیnullفوری طور پر نئے اعداد و شمار واپس آنے تک کم سے کم 2000ms انتظار کریں، دوسری صورت میں، واپسnull

کا استعمالclose(): ویب ساکٹ کنکشن بند کریں.

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

7.غیر متزلزل یا ملٹی تھریڈنگ

آپ نے محسوس کیا ہو سکتا ہے کہ تمام کوڈ ہم اب ہے واحد دھاگہ، تسلسل پر عملدرآمد ہیں. خام جاوا اسکرپٹ asynchronous کی حمایت نہیں کرتا، تاہم، FMZ ایک تقریب فراہمGOکرنے کے لئے، جو کہ بہت محدود ہے.Goجب آپ واقعی تاخیر اور ہر API درخواست کے وقت کی کھپت کے بارے میں پرواہ.

تبادلہ.Go ((طریقہ، Args)

طریقہ: ایک فنکشن کا نام. args: طریقہ کار کے args.

معاون افعال کی فہرست:GetTicker, GetDepth, GetTrades, GetRecords, GetAccount, GetOrders, GetOrder, CancelOrder, Buy, Sell, GetPosition.

جاوا اسکرپٹ مثال:

function main(){
    var a = exchange.Go("GetTicker"); //GetTicker Asynchronous multithreaded execution
    var b = exchange.Go("GetDepth");
    var c = exchange.Go("Buy", 1000, 0.1);
    var d = exchange.Go("GetRecords", PERIOD_H1);
    // The above four operations are concurrent multi-threaded asynchronous execution, will not block and immediately return
    var ticker = a.wait(); // Call wait method wait for return to asynchronous get ticker result
    var depth = b.wait(); // Return depth, it is also possible to return null if it fails
    var orderId = c.wait(1000); // Return the order number, 1 second timeout, timeout returns undefined, this object can continue to call wait until the last wait timeout
    var records = d.wait(); // Wait for K-line result
    var ret = d.wait();  // Here waits for an asynchronous operation that has waited and ended, returns null, and logs an error message.
}

wait()فنکشن کے بعد بلایا جانا چاہئےGoتقریب، دوسری صورت میں، تھریڈ وسائل 2000 تک جمع ہو جائے گا اور ایک غلطی واپس آئے گا.

8.ٹیبلز اور چارٹ

LogStatusاور ٹیبلز

لاگ اسٹیٹس ایک پیغام یا ٹیبلز کو بوٹس کی حالت بار پر لاگ کرے گا، ہر بار تازہ کاری کرے گا.

//Normal uses of LogStatus
LogStatus(" This is a normal status prompt")
LogStatus(" This is a red font status prompt #ff0000")
LogStatus(" This is a multi-line status message\n I'm the second line")

لاگ اسٹیٹس آپ کے روبوٹ صفحے پر میزیں لاگ کر سکتے ہیں. شامل کریں`حروف دونوں اطراف پر اور ایک پیچیدہ پیغام کی شکل کے طور پر اس کا علاج (فی الحال کی حمایت کی میز).

var table = {type: 'table', title: ' Account information support color #ff0000', cols: ['BTC', 'ETH', 'USDT'], rows: [ ['free', 1, 2000], ['frozen', 0, 3000]]}
LogStatus('`' + JSON.stringify(table)+'`')
//Another example, information can also appear in multiple lines:
LogStatus("First line message\n" + JSON.stringify(table)+"`\n third line message")
//Log multiple tables in a group, switching by TAB:
var table1 = {type: 'table', title: ' Account information 1', cols: ['BTC', 'ETH', 'USDT'], rows: [ ['free', 1, 2000], ['frozen', 0, 3000]]}
var table2 = {type: 'table', title: ' Account information 2', cols: ['BTC', 'ETH', 'USDT'], rows: [ ['free', 1, 2000], ['frozen', 0, 3000]]}
LogStatus('`' + JSON.stringify([table1, table2])+'`')

چارٹ

روبوٹ مینجمنٹ کے صفحے پر اعداد و شمار بنائیں. چارٹ سپورٹ ہائی اسٹاکس اور ہائی چارٹس، چیک کریںhttps://www.highcharts.com/demoاورhttps://www.highcharts.com/stock/demoمزید مثالوں کے لیے۔ چارٹ آبجیکٹ میں ایک__isStockاصل میں موجود نہیں ہے کہ ایک وصف ہے.__isStockغلط ہے تو، چارٹ ہائی چارٹس کے طور پر دکھایا جائے گا.__isStockسچ ہے، چارٹ ہائی اسٹاک کے طور پر دکھایا جائے گا. کال کریںreset()چارٹ ڈیٹا کو صاف کرنے کے لئے.

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

// This chart is an object in the JS language. Before using the Chart function, we need to declare an object variable chart that configures the chart.
var chart = {
    // Whether the mark is a general chart, if you are interested, you can change it to false and run it.
    __isStock: true,
    tooltip: {xDateFormat: '%Y-%m-%d %H:%M:%S, %A'},    // Zoom tool
    title : { text : 'Spread Analysis Chart'},          // title
    rangeSelector: {                                    // Selection 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'},                         // The horizontal axis of the coordinate axis is the x axis and the current setting type is :time
    yAxis : {                                           // The vertical axis of the axis is the y axis, and the default value is adjusted with the data size.
        title: {text: 'Spread'},                        // title
        opposite: false,                                // Whether to enable the right vertical axis
    },
    series : [                                          // Data series, this attribute is saved for each data series (line, K-line graph, label, etc...)
        {name : "line1", id : "Line 1,buy1Price", data : []},  // The index is 0, the data array is stored in the index series of data
        {name : "line2", id : "Line 2,lastPrice", dashStyle : 'shortdash', data : []},
        // The index is 1, dashStyle is set: 'shortdash' ie: Set the dotted line.
    ]
};
function main(){
    var ObjChart = Chart(chart);                      // Call the Chart function to initialize the chart.
    ObjChart.reset();                                 // Empty the chart
    while(true){
        var nowTime = new Date().getTime();           // Get the timestamp of this poll, which is a millisecond timestamp. Used to determine the position of the X axis written to the chart.
        var tickerOne = _C(exchanges[0].GetTicker);   // Get market data
        var tickerTwo = _C(exchanges[1].GetTicker);
        ObjChart.add([0, [nowTime, tickerOne.Last]]); // Use the timestamp as the X value and buy the price as the Y value to pass the index 0 data sequence.
        ObjChart.add([1, [nowTime, tickerTwo.Last]]); // Same as above
        ObjChart.update(chart);                       // Update the chart to show it.
        Sleep(2000);
    }
}

متعدد اعداد و شمار کی نمائش کی حمایت کرتا ہے، ایک مکمل مثال:https://www.fmz.com/strategy/136056 img

9.اسٹریٹیجی ٹیمپلیٹ

ٹیمپلیٹ ایک لائبریری ہے جس میں بہت ساری اعلی درجے کی خصوصیات شامل ہیں ، جو آپ کی حکمت عملی لکھنا آسان بناتی ہیں۔ ٹیمپلیٹ استعمال کرنے کے ل you ، آپ کو پہلے اس ٹیمپلیٹ کی کاپی کرنی چاہئے جس کی آپ کو ضرورت ہے۔ مثال کے طور پر جاوا اسکرپٹ پلاٹ لائبریری لیں ، اسے اس سے کاپی کریںhttps://www.fmz.com/strategy/27293اور محفوظ کریں. پھر حکمت عملی میں ترمیم کے صفحے پر اسے منتخب کریں.imgافعال کے بعد بلایا جاتا ہے$.جاوا اسکرپٹ ٹیمپلیٹ میں اور اس کے بعدext.پیتھون ٹیمپلیٹ میں.

function main() {
    var isFirst = true
    while (true) {
        var records = exchange.GetRecords();
        if (records && records.length > 0) {
            $.PlotRecords(records, 'BTC')
            if (isFirst) {
                $.PlotFlag(records[records.length - 1].Time, 'Start', 'S')
                isFirst = false
                $.PlotHLine(records[records.length - 1].Close, 'Close')
            }
        }
        var ticker = exchange.GetTicker()
        if (ticker) {
            $.PlotLine('Last', ticker.Last)
            $.PlotTitle('Last ' + ticker.Last)
        }
        Sleep(60000)
    }
}

یہاں ایک اور سادہ مثال ہے جو پلاٹ ٹیمپلیٹ کا استعمال کرتا ہے:https://www.fmz.com/strategy/121917


مزید

q25459768شکریہ

گھاسمیں اس ٹیوٹوریل پر کام کر رہا ہوں۔ اسے مکمل کرنے میں کچھ دن لگیں گے۔ کوئی سوال پوچھنے میں آزاد محسوس کریں۔