[TOC]
یہ سبق ایف ایم زیڈ پلیٹ فارم کے بارے میں مزید تفصیلات ،ای پی آئی کے استعمال کے بارے میں زیادہ عملی مہارتوں پر مشتمل ہوگا۔ آپ کو اس انٹرمیڈیٹ سبق کو سیکھنے سے پہلے ابتدائی سبق کو پڑھنا چاہئے اور ایف ایم زیڈ کی بنیادی تفہیم حاصل کرنی چاہئے۔
پورے سبق کو سیکھنے کے بعد، آپ FMZ کا مکمل استعمال کریں گے اور زیادہ اپنی مرضی کے مطابق، زیادہ موثر اور زیادہ پیچیدہ حکمت عملی لکھنے کے قابل ہو جائے گا.
آپ ایک روبوٹ کے اندر متعدد تبادلے اور متعدد علامتوں پر آسانی سے تجارت کرسکتے ہیں۔ یہ کیسے کام کرتا ہے:
exchange.GetTicker()
جب ایک تبادلہ شامل کیا جاتا ہےexchanges[0].GetTicker()
, exchanges[1].GetTicker()
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)
}
}
اب تک ، ایف ایم زیڈ تمام بڑے فیوچر ایکسچینجز ، جیسے اوکیکس ، ہووبی ڈی ایم ، بٹ ایم ای ایکس ، گیٹ آئی او اور ڈیریبٹ ، اور ان کے سواپ معاہدوں کی حمایت کرتا ہے۔
ایف ایم زیڈ پر فیوچر کی تجارت کرنے کے لیے، آپ کو پہلے فیوچر ایکسچینج شامل کرنے کی ضرورت ہے، روبوٹ شروع کرتے وقت علامت مقرر کریں اور اپنے کوڈ میں معاہدے کی قسم مقرر کریں.
اگر ایک ایکسچینج اسپاٹ اور فیوچر دونوں کو سپورٹ کرتا ہے تو انہیں FMZ میں الگ الگ شامل کیا جانا چاہئے۔
ذیل کی تصویر میں دکھایا گیا ہے کہ بوٹ شروع کرتے وقت فیوچر علامت کو بی ٹی سی میں کیسے ترتیب دیا جائے۔
ذیل میں ہر تبادلے کے لئے ایک معاہدے کی قسم مقرر کرنے کا طریقہ ہے.
exchange.SetContractType("swap")
exchange.SetContractType("this_week")
exchange.SetContractType("next_week")
exchange.SetContractType("quarter")
exchange.SetContractType("this_week")
exchange.SetContractType("next_week")
exchange.SetContractType("quarter")
exchange.SetContractType("XBTUSD")
exchange.SetContractType("XBTM19")
exchange.SetContractType("swap")
exchange.SetContractType("BTC-PERPETUAL")
exchange.SetContractType("BTC-27APR18")
بنیادی تعارف
ایف ایم زیڈ میں بیک ٹسٹنگ کے دو موڈ ہیں:real tick
اورsimulate tick
. اصل ٹِک لیول میں تمام مکمل شدہ تاریخی ڈیٹا (ایک ٹِک فی سیکنڈ) شامل ہوتا ہے ، لہذا بیک ٹسٹنگ کے نتائج زیادہ قابل اعتماد ہوتے ہیں۔ نقلی سطح آپ کی حکمت عملی کے ذریعہ استعمال ہونے والے وقفے پر ہسٹری کلینس ڈیٹا کا استعمال کرتی ہے۔ ایک کلین کے اندر ٹِک ایک الگورتھم کے ذریعہ تیار کیے جاتے ہیں جو ایم ٹی 4 کی طرح ہی ہے ، آپ مزید تفصیلات تلاش کرسکتے ہیںhttps://www.mql5.com/en/articles/75اس دوران، ایک مختصر وقفہ ٹکس پیدا کرنے کے لئے بیس-کلین کے طور پر منتخب کیا جا سکتا ہے.
تخروپن ٹاک موڈ حقیقی ٹک موڈ کے مقابلے میں بہت تیز لیکن کم درست ہے۔ تخروپن ٹک موڈ میں ایک مختصر کلین وقفہ جانچ کی درستگی اور رفتار کے مابین سمجھوتہ ہے۔
بیک ٹیسٹ کی ترتیب
یہاں ڈیفالٹ کی ترتیبات ہیں:پوشیدہ پٹ:
بیک ٹیسٹ کا نتیجہ
تبادلے API تک رسائی حاصل ہے کہ کسی بھی افعال کو بلاتے وقت (جیسےGetTicker
, Buy
, CancelOrder
، وغیرہ...) ، آپ کو ایک ایکسچینج سرور کی دشواری، غلط پیرامیٹرز، نیٹ ورک ٹرانسمیشن کے مسئلے، وغیرہ کی وجہ سے رسائی کی ناکامی مل سکتی ہے. اس صورت میں، فنکشن واپس آ جائے گاnull
، جو روبوٹ کو روک سکتا ہے۔ لہذا آپ کو غلطیوں سے نمٹنے کا طریقہ جاننے کی ضرورت ہے۔
غلطی کیا ہے؟
بوٹ ایک غلطی کا پیغام واپس کرے گا جب ایک غلطی واقع ہوتی ہے. صرف تبادلہ نام + غلطی msg تلاش کرنے سے، آپ کو پتہ چل سکتا ہے کہ مسئلہ کیا ہے. مثال کے طور پر، ایک غلطی{"result":false,"error_code":20049}
کال کے وقت واپس کیا جاتا ہےexchange.GetAccount()
OKEX پر. گوگلOKEX 20049
، یہاں نتیجہ ہے:آپ کو بھی ایکسچینج 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
}
ایف ایم زیڈ تمام مختلف تبادلے کے ڈیٹا کو ایک ہی فارمیٹ میں لپیٹتا ہے ، جس سے کراس پلیٹ فارم حکمت عملی لکھنا آسان ہوجاتا ہے۔ تاہم ، آپ کسی خاص 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 کے ذریعہ تعاون یافتہ نہیں ہیں۔
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")
بنیادی طور پر تمام ڈیجیٹل کرنسی تبادلے ویب ساکٹ کے ذریعے مارکیٹ کے اعداد و شمار بھیجنے کی حمایت کرتے ہیں ، اور کچھ تبادلے اکاؤنٹ کی معلومات کو اپ ڈیٹ کرنے کی بھی حمایت کرتے ہیں۔ باقی API کے مقابلے میں ، ویب ساکٹ کے عام طور پر کم تاخیر ، اعلی تعدد کے فوائد ہوتے ہیں ، اور پلیٹ فارم کے باقی API درخواست کی تعدد سے محدود نہیں ہوتے ہیں۔ نقصان یہ ہے کہ اس میں خلل پڑ سکتا ہے اور پروسیسنگ بدیہی نہیں ہے۔
جاوا اسکرپٹ کے لئے، آپ استعمال کر سکتے ہیںDial
ویب ساکٹ سے رابطہ قائم کرنے کے لئے تقریب، پائیتھون کے لئے، آپ استعمال کر سکتے ہیںDial
یاwebsocket_client
libray.
اس سبق میں جاوا سکرپٹ کا استعمال کرتے ہوئے ویب ساکٹ کو مربوط کرنے پر توجہ مرکوز کرے گا اورDial
ایف ایم زیڈ کوانٹائزیشن پلیٹ فارم پر فنکشن۔ مختلف استعمالات کو بڑھانے کے ل Di ، ڈائل فنکشن کو کئی بار اپ ڈیٹ کیا گیا ہے۔ یہ سبق ویب ساکٹ پر مبنی ایونٹ سے چلنے والی حکمت عملی اور متعدد تبادلے سے رابطہ قائم کرنے کا طریقہ دکھائے گا۔
ویب ساکٹ سے منسلک
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")
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()
}
آپ نے محسوس کیا ہو سکتا ہے کہ تمام کوڈ ہم اب ہے واحد دھاگہ، تسلسل پر عملدرآمد ہیں. خام جاوا اسکرپٹ 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 تک جمع ہو جائے گا اور ایک غلطی واپس آئے گا.
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
ٹیمپلیٹ ایک لائبریری ہے جس میں بہت ساری اعلی درجے کی خصوصیات شامل ہیں ، جو آپ کی حکمت عملی لکھنا آسان بناتی ہیں۔ ٹیمپلیٹ استعمال کرنے کے ل you ، آپ کو پہلے اس ٹیمپلیٹ کی کاپی کرنی چاہئے جس کی آپ کو ضرورت ہے۔ مثال کے طور پر جاوا اسکرپٹ پلاٹ لائبریری لیں ، اسے اس سے کاپی کریںhttps://www.fmz.com/strategy/27293اور محفوظ کریں. پھر حکمت عملی میں ترمیم کے صفحے پر اسے منتخب کریں.افعال کے بعد بلایا جاتا ہے$.
جاوا اسکرپٹ ٹیمپلیٹ میں اور اس کے بعد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شکریہ
گھاسمیں اس ٹیوٹوریل پر کام کر رہا ہوں۔ اسے مکمل کرنے میں کچھ دن لگیں گے۔ کوئی سوال پوچھنے میں آزاد محسوس کریں۔