[TOC] इस ट्यूटोरियल में एपीआई परिचय, फीडबैक, चार्ट आदि सहित रणनीति लेखन का प्रारंभिक ज्ञान शामिल है। इस बुनियादी ट्यूटोरियल को सीखने के बाद, उपयोगकर्ता बुनियादी एपीआई का कुशल उपयोग करने में सक्षम होंगे और स्थिर रीयल-डिस्क रणनीति लिखेंगे। इस ट्यूटोरियल को सीखने से पहले, आपको सीखना होगाएफएमजेड आविष्कारक के लिए क्वांटिटेटिव प्लेटफॉर्म का उपयोग करना 。
पुराने ट्यूटोरियलःआविष्कारक मात्रा (FMZ.COM) रणनीति पूरी तरह से उपयोग मैनुअल 2.0 (ट्यूटोरियल), इस ट्यूटोरियल में कई पोस्ट इंडेक्स हैं, जिन्हें देखने की भी सलाह दी जाती है।
प्रोग्रामेटिक लेनदेन एपीआई और एक्सचेंजों के माध्यम से एक प्रोग्राम से जुड़ा होता है, जो डिजाइन के इरादे के अनुसार स्वचालित रूप से खरीदारी या अन्य कार्यों को पूरा करता है। एपीआई को एप्लीकेशन प्रोग्रामिंग इंटरफेस कहा जाता है।
वर्तमान में, डिजिटल मुद्रा एक्सचेंजों में मुख्य रूप से दो प्रकार के इंटरफ़ेस प्रोटोकॉल हैंः REST और Websocket। REST प्रोटोकॉल को प्रत्येक डेटा प्राप्त करने के लिए एक बार एक्सेस करने की आवश्यकता होती है। उदाहरण के लिए, एपीआई का उपयोग करके, एक्सचेंजों का अनुकरण करने के लिए wex.app, सीधे ब्राउज़र में https://api.wex.app/api/v1/public/ticker?market=BTC_USDT खोलें और परिणाम प्राप्त करेंः
{"data:{"buy":"11351.73","high":"11595.77","last":"11351.85","low":"11118.45","open":"11358.74","quoteVol":"95995607137.00903936","sell":"11356.02","time":1565593489318,"vol":"3552.5153"}}
यह BTC_USDT के साथ ट्रेडिंग के नवीनतम रुझानों को दिखाता है, जो हर बार अपडेट होते हैं।market=इसके बाद विशिष्ट ट्रेडिंग जोड़ी पैरामीटर होते हैं जिन्हें अन्य ट्रेडिंग जोड़ी डेटा प्राप्त करने के लिए संशोधित किया जा सकता है। सार्वजनिक इंटरफेस के लिए, जैसे कि बाजार की स्थिति, सभी के लिए उपलब्ध है, इसलिए प्रमाणीकरण की आवश्यकता नहीं है, जबकि कुछ इंटरफेस जैसे ऑर्डर और एक्सेस अकाउंट को उपयोगकर्ता की पहचान की आवश्यकता होती है, इस समय एपीआई-केई का उपयोग करके हस्ताक्षर करने की आवश्यकता होती है। वेबसॉकेट एक सदस्यता मोड है, सदस्यता की आवश्यकता वाली सामग्री भेजने के बाद, एक्सचेंज अपडेट किए गए डेटा को प्रोग्राम में भेजता है, इसलिए इसे हर बार फिर से देखने की आवश्यकता नहीं होती है, इसलिए यह अधिक कुशल है।
एफएमजेड क्वांटिफाइड ट्रेडिंग प्लेटफॉर्म ने विभिन्न एक्सचेंजों के लिए आरईएसटी इंटरफेस को पैक किया है, एक एकीकृत तरीके से कॉल और डेटा प्रारूप का उपयोग करके, रणनीति को सरल और सामान्य बनाने के लिए। एफएमजेड प्लेटफॉर्म में वेबसॉकेट का समर्थन करना सुविधाजनक है, जिसे अगले ट्यूटोरियल में विस्तार से बताया जाएगा।
FMZ मंच एपीआई प्रलेखन ज्यादातर जावास्क्रिप्ट के उदाहरण के रूप में, लेकिन क्योंकि पैकेजिंग, अलग अलग भाषाओं के बीच लगभग कोई अंतर नहीं है, केवल ध्यान देने की जरूरत है व्याकरण की समस्या है. C ++ थोड़ा विशेष है, बाद में ट्यूटोरियल विशेष परिचय होगा. क्योंकि जेएस अपेक्षाकृत सरल है और कोई संगतता की समस्या है, यह नए लोगों के लिए सिफारिश की है.
विभिन्न संस्करणों के कारण, Python को प्रोग्राम के प्रारंभ में निर्दिष्ट किया जा सकता है, जैसे#!Python2,#!Python3ध्यान दें कि जावास्क्रिप्ट ने हाल ही में ईएस 6 सिंटैक्स को अपग्रेड किया है, जो रुचि रखने वालों को पता चल सकता है। नीचे समान कार्य करने वाले पायथन और जावास्क्रिप्ट कोड दिखाए गए हैं, केवल सिंटैक्स में अंतर है, इसलिए एपीआई दस्तावेज़ केवल जावास्क्रिप्ट के उदाहरण देता है, यह ट्यूटोरियल पायथन के विशेष उपयोग के मामलों को भी ध्यान में रखेगा।
#python代码
def main():
while True:
Log(exchange.GetAccount().Balance)
Sleep(2000)
#相应的Js代码
function main(){
while(true){
Log(exchange.GetAccount().Balance)
Sleep(2000)
}
}
एफएमजेड क्वांटिटेटिव प्लेटफॉर्म एपीआई इंटरफेस को डिबग करने के लिए डिबग टूल प्रदान करता है, https://www.fmz.com/m/debug 。 डिबग टूल केवल जावास्क्रिप्ट का समर्थन करता है, केवल कुछ समय के लिए निष्पादित किया जा सकता है, एक्सचेंज इंटरफेस को डिबग करने के लिए एक वास्तविक डिस्क बनाने की आवश्यकता नहीं है。 रिटर्न का डेटा परिणाम के रूप में वापस आ जाएगा, और डिबग टूल का कोड सहेजा नहीं जाएगा。 इस ट्यूटोरियल के दौरान, डिबग टूल का उपयोग करके परीक्षण किया जा सकता है。

एक विशेष बात यह है कि एक मुख्य फ़ंक्शन होना चाहिए, क्योंकि रणनीति को निर्बाध रूप से चलाने की आवश्यकता होती है, आमतौर पर, एक चक्र के साथ-साथ नींद का समय भी आवश्यक होता है। क्योंकि लेनदेन के सभी एपीआई की आवृत्ति सीमित होती है, इसलिए नींद के समय को समायोजित करने की आवश्यकता होती है। यह वास्तुकला विशिष्ट निश्चित अंतराल निष्पादन है। घटना-संचालित रणनीतियों को लिखने के लिए वेबसॉक का उपयोग भी किया जा सकता है, जैसे कि गहराई में परिवर्तन के तुरंत बाद निष्पादन, जिसे प्रगति ट्यूटोरियल में प्रस्तुत किया जाएगा।
अन्य विशेष प्रकार के फ़ंक्शंस इस प्रकार हैंः
function onTick(){
var ticker = exchange.GetTicker()
var account = exchange.GetAccount()
//在这里写策略逻辑,将会每6s调用一次
}
function main(){
while(true){
onTick()
Sleep(6000)
}
}
यदि नेटवर्क एक्सेस त्रुटि के कारण नीति सीधे बंद हो सकती है, तो यदि आप एक ऐसी नीति चाहते हैं जो स्वचालित रूप से फिर से शुरू न हो, तो आप try catch त्रुटि-सहिष्णु मुख्य चक्र का उपयोग करके फिर से रीयल-टाइम नीति का उपयोग कर सकते हैं। बेशक, इस तरह के संचालन की सिफारिश केवल तभी की जाती है जब नीति स्थिर हो, अन्यथा सभी त्रुटियों की रिपोर्ट नहीं की जाएगी, और नीति की समस्याओं को खारिज करना मुश्किल होगा।
function onTick(){
var ticker = exchange.GetTicker()
var account = exchange.GetAccount()
//在这里写策略逻辑,将会每6s调用一次
}
function main(){
try{
while(true){
onTick()
Sleep(6000)
}
}catch(err){
Log(err)
}
}
किसी भी एक्सचेंज-संबंधित एपीआई को कॉल करने पर एक्सचेंज और ट्रेडिंग जोड़ी को स्पष्ट रूप से निर्दिष्ट करना आवश्यक है।exchangeइस ऑब्जेक्ट का प्रतिनिधित्व करें, जैसेexchange.GetTicker()यह एक एक्सचेंज-ट्रेडेड युग्म का ट्रेडिंग टिकर होगा।
FMZ प्लेटफ़ॉर्म एक साथ कई एक्सचेंजों को जोड़ने का समर्थन करता है - ट्रेडिंग जोड़े, जैसे कि एक ही एक्सचेंज खाते पर एक साथ BTC और ETH का संचालन करना। ध्यान दें कि एक ही एक्सचेंज पर अलग-अलग खातों को एक साथ जोड़ा जा सकता है, जो FMZ वेबसाइट पर जोड़े गए लेबल के आधार पर अलग-अलग हैं। जब कई एक्सचेंज-ट्रेडिंग जोड़े मौजूद होते हैं, तो इसका उपयोग किया जाता हैexchangesयह क्रम में लिखा गया हैexchanges[0]、exchanges[1]इस प्रकार, लेन-देन का प्रारूप इस प्रकार है:BTC_USDT, पूर्व में बीटीसी एक लेनदेन मुद्रा है, और यूएसडीटी एक मूल्य निर्धारण मुद्रा है।

जाहिर है, अगर हम बहुत सारे ट्रेडिंग जोड़े हैं, तो यह एक परेशानी होगी, और हम SetCurrency का उपयोग करके ट्रेडिंग जोड़े को बदल सकते हैं, जैसे किexchange.SetCurrency("BTC_USDT")इस समय,exchangeबंधे हुए लेन-देन के जोड़ेBTC_USDTयह अगले कॉल तक प्रभावी रहेगा।ध्यान दें कि रीट्रेसिंग नवीनतम समर्थन के लिए स्विच ट्रेडिंग जोड़ेएक उदाहरण नीचे दिया गया है।
var symbols = ["BTC_USDT", "LTC_USDT", "EOS_USDT", "ETH_USDT"]
var buyValue = 1000
function main(){
for(var i=0;i<symbols.length;i++){
exchange.SetCurrency(symbols[i])
var ticker = exchange.GetTicker()
var amount = _N(buyValue/ticker.Sell, 3)
exchange.Buy(ticker.Sell, amount)
Sleep(1000)
}
}
जैसा कि ऊपर उदाहरण दिया गया है, व्यापार इंटरफ़ेस आम तौर पर एक सार्वजनिक इंटरफ़ेस है, जो सभी के लिए उपलब्ध है। सामान्य व्यापार इंटरफ़ेस में शामिल हैंः व्यापार टिकर प्राप्त करें, गहराई गहराई प्राप्त करें, K लाइन रिकॉर्ड प्राप्त करें, ट्रेडों का लेनदेन रिकॉर्ड प्राप्त करें। व्यापार व्यापार निर्णय लेने के लिए रणनीति का आधार है, नीचे एक-एक परिचय दिया जाएगा, सबसे अच्छा अपने आप को डीबगिंग टूल में आज़माने में सक्षम होना चाहिए, विस्तृत व्याख्या के लिए एपीआई प्रलेखन देखें।
प्रत्येक इंटरफेस में सामान्य रूप सेInfoफ़ील्ड, जो एक्सचेंज द्वारा लौटाए गए मूल डेटा स्ट्रिंग को दर्शाता है, जो अतिरिक्त जानकारी के लिए उपयोग किया जा सकता है, जिसे पहले पार्स करने की आवश्यकता होती है, जावास्क्रिप्ट का उपयोग करकेJSON.parse()पायथन json लाइब्रेरी का उपयोग करता है।Timeफ़ील्ड अनुरोध के समय को इंगित करती है, जिसका उपयोग देरी को निर्धारित करने के लिए किया जा सकता है।
रीयल-डिस्क में एपीआई इंटरफेस का उपयोग करने के लिए एक विफलता के साथ वापसी की संभावना हैnullपायथन वापस आ गया हैNone, जो डेटा का उपयोग करते समय त्रुटि रिपोर्ट करता है और हार्ड डिस्क को बंद कर देता है, इसलिए त्रुटि सहिष्णुता बहुत महत्वपूर्ण है ↓ इस ट्यूटोरियल में इसे अलग से प्रस्तुत किया जाएगा ↓
बाजार की वर्तमान स्थिति प्राप्त करें, शायद सबसे अधिक उपयोग किया जाने वाला इंटरफ़ेस, पिछले लेनदेन की कीमत, खरीद और बेचने की कीमत, हाल ही में लेनदेन की मात्रा आदि की जानकारी प्राप्त करें। फिर से ऑर्डर करने से पहले, लेनदेन की कीमत को टिकर जानकारी के आधार पर निर्धारित किया जा सकता है।{"Info:{}, "High":5226.69, "Low":5086.37,"Sell":5210.63, "Buy":5208.5, "Last":5208.51, "Volume":1703.1245, "OpenInterest":0, "Time":1554884195976}。
function main() {
var ticker = exchange.GetTicker()
Log(ticker) //在调试工具中 return ticker 。可以看到具体的结果。
Log('上次成交价: ',ticker.Last, '买一价: ', ticker.Buy)
}
लटकन सूची की गहराई की जानकारी प्राप्त करें. हालांकि GetTicker में एक खरीद और एक बिक्री शामिल है, लेकिन यदि आप अधिक गहराई से पूछताछ करना चाहते हैं, तो आप इस इंटरफ़ेस का उपयोग कर सकते हैं, तो आप आम तौर पर अगले 200 लटकन सूची देख सकते हैं। आप इस इंटरफ़ेस का उपयोग करके झटका मूल्य की गणना कर सकते हैं। नीचे एक वास्तविक वापसी परिणाम है। जिसमें Asks लटकन सूची बेचने का संकेत देता है, क्रमशः एक लटकन बेचने और दो लटकन बेचने के लिए … इसलिए कीमतें क्रमशः बढ़ जाती हैं। Bids लटकन सूची खरीदने का संकेत देता है, क्रमशः एक लटकन खरीदने के लिए और दो लटकन खरीदने के लिए … कीमतें क्रमशः गिरती हैं।
{
"Info":null,
"Asks":[
{"Price":5866.38,"Amount":0.068644},
{"Price":5866.39,"Amount":0.263985},
......
]
"Bids":[
{"Price":5865.13,"Amount":0.001898},
{"Price":5865,"Amount":0.085575},
......
],
"Time":1530241857399
}
उदाहरण के लिए, डीप एक्सेस का उपयोग करकेः
function main() {
var depth = exchange.GetDepth()
Log('买一价个: ', depth.Bids[0].Price, '卖一价格: ', depth.Asks[0].Price)
}
K लाइन प्राप्त करें, सबसे अधिक उपयोग किए जाने वाले इंटरफेस में से एक, जो एक बार में अधिक समय की कीमत की जानकारी वापस कर सकता है, विभिन्न संकेतकों की गणना के लिए आधार। K लाइन की अवधि को निर्दिष्ट नहीं किया गया है, यह दर्शाता है कि डिफ़ॉल्ट अवधि का उपयोग किया जाएगा जब एक फिक्स्ड डिस्क जोड़ा जाएगा। K लाइन की लंबाई को निर्दिष्ट नहीं किया जा सकता है, यह समय के साथ बढ़ता रहता है, अधिकतम 2000 रूट, लगभग 200 रूट (विभिन्न एक्सचेंजों के लिए अलग-अलग) । अंतिम K लाइन नवीनतम K लाइन है, इसलिए डेटा बदलता रहता है, और पहली K लाइन सबसे पुरानी है।
exchange.SetMaxBarLen(Len)पहली बार K लाइन प्राप्त करने के लिए संख्या सेट की जा सकती है (कुछ एक्सचेंजों द्वारा समर्थित), और अधिकतम K लाइन की संख्या सेट की गई है।उदाहरण के लिएःexchange.SetMaxBarLen(500)
GetRecords अवधि निर्दिष्ट कर सकते हैंः PERIOD_M1:1 मिनट, PERIOD_M5:5 मिनट, PERIOD_M15:15 मिनट, PERIOD_M30:30 मिनट, PERIOD_H1:1 घंटे, PERIOD_D1:1 दिन.exchange.GetRecords(PERIOD_M1)。 नवीनतम होस्ट को अपग्रेड करने के बाद, कस्टम चक्र का समर्थन किया जाएगा, सीधे चक्र सेकंड को पैरामीटर के रूप में चलाया जाएगा, मिनट-स्तरीय कस्टम 1 मिनट के लाइन के आधार पर संश्लेषित किया जाएगा, 1 मिनट से कम के लाइन GetTrades के माध्यम से संश्लेषित किया जाएगा, कमोडिटी वायदा tick के आधार पर संश्लेषित किया जाएगा, 。ध्यान दें कि इस तरह के ट्यूटोरियल भी हैंPERIOD_M1इस तरह के सभी महालेखन चर, वे एफएमजेड में डिफ़ॉल्ट वैश्विक चर हैं, और जो लोग रुचि रखते हैं वे उनके विशिष्ट मानों को अपने आप लॉग कर सकते हैं, आमतौर पर सीधे उपयोग करने के लिए।
डेटा उदाहरण लौटाता है:
[
{"Time":1526616000000,"Open":7995,"High":8067.65,"Low":7986.6,"Close":8027.22,"Volume":9444676.27669432},
{"Time":1526619600000,"Open":8019.03,"High":8049.99,"Low":7982.78,"Close":8027,"Volume":5354251.80804935},
{"Time":1526623200000,"Open":8027.01,"High":8036.41,"Low":7955.24,"Close":7955.39,"Volume":6659842.42025361},
......
]
उदाहरण:
function main(){
var close = []
var records = exchange.GetRecords(PERIOD_H1)
Log('total bars: ', records.length)
for(var i=0;i<records.length;i++){
close.push(records[i].Close)
}
return close
}
कुछ एक्सचेंजों द्वारा समर्थित नहीं है. यह अपेक्षाकृत कम उपयोग किया जाता है। इसके बारे में अधिक जानकारी के लिए एपीआई दस्तावेज़ देखें।
क्योंकि ये इंटरफेस खातों से संबंधित हैं, उन्हें सीधे एक्सेस नहीं किया जा सकता है, उन्हें एपीआई-केई हस्ताक्षर का उपयोग करने की आवश्यकता है। एफएमजेड प्लेटफॉर्म ने बैकग्राउंड को एकीकृत किया है और इसे सीधे उपयोग किया जा सकता है।
खाते की जानकारी प्राप्त करना. सबसे अधिक उपयोग किए जाने वाले इंटरफेस में से एक, जिसे कम शेष राशि से बचने के लिए ऑर्डर करने से पहले कॉल करने की आवश्यकता होती है.{"Stocks":0.38594816,"FrozenStocks":0,"Balance":542.858308,"FrozenBalance":0,"Info":{}}जिसमें स्टॉक्स ट्रेडिंग जोड़ी के लिए ट्रेड करेंसी उपलब्ध शेष है, FrozenStocks अपूर्ण ऑर्डर के लिए फ्रीज शेष है, बैलेंस मूल्य निर्धारण मुद्रा के लिए उपलब्ध है, और FrozenBalance फ्रीज शेष है। यदि ट्रेडिंग जोड़ीBTC_USDTस्टॉक्स का मतलब बीटीसी है और बैलेंस का मतलब यूएसडीटी है।
ध्यान दें कि लौटाए गए परिणाम निर्दिष्ट लेनदेन जोड़े के परिणाम हैं, लेनदेन खाते में अन्य मुद्राओं की जानकारी जानकारी फ़ील्ड में है, और कई लेनदेन जोड़े को संचालित करने के लिए कई बार कॉल करने की आवश्यकता नहीं है।
एक स्थिर डिस्क जो वर्तमान लेनदेन के लिए कुल मूल्य को प्रिंट करती हैः
function main(){
while(true){
var ticker = exchange.GetTicker()
var account = exchange.GetAccount()
var price = ticker.Buy
var stocks = account.Stocks + account.FrozenStocks
var balance = account.Balance + account.FrozenBalance
var value = stocks*price + balance
Log('Account value is: ', value)
LogProfit(value)
Sleep(3000)//sleep 3000ms(3s), A loop must has a sleep, or the rate-limit of the exchange will be exceed
//when run in debug tool, add a break here
}
}
नीचे भुगतान किया गया है।exchange.Buy(Price, Amount)याexchange.Buy(Price, Amount, Msg)मूल्य मूल्य है, राशि राशि है, और एमएसजी एक अतिरिक्त स्ट्रिंग है जिसे रीयल-टाइम लॉग में प्रदर्शित किया जा सकता है, लेकिन यह आवश्यक नहीं है। इस तरह से ऑर्डर को लंबित किया जाता है, यदि यह तुरंत पूरी तरह से पूरा नहीं किया जा सकता है, तो एक अपूर्ण आदेश उत्पन्न होता है। ऑर्डर को सफलतापूर्वक ऑर्डर आईडी के रूप में लौटाया जाता है, और विफलता के रूप मेंnull, आदेश की स्थिति की जांच करने के लिए
यदि आप एक खरीद मूल्य पर एक आदेश देते हैं, तो Price -1 है, और Amount ऑर्डर मूल्य है, जैसेexchange.Buy(-1, 0.5)सौदा सही है.ETH_BTCकुछ एक्सचेंजों ने ईटीएच के लिए 0.5 बीटीसी की खरीद का समर्थन नहीं किया है।
सभी कीमतों और आंशिक लेनदेन की मात्रा की सटीकता की आवश्यकता है, उपलब्ध है_N()परिशुद्धता फ़ंक्शन को नियंत्रित करने के लिए. फ्यूचर्स ट्रेडिंग के लिए Buy और Sell के अतिरिक्त अर्थ हैं, जिन्हें अलग से प्रस्तुत किया जाएगा.
उदाहरण के लिए, अगर आप एक खरीदते हैं, तो आप एक मूल्य प्राप्त करते हैं।
function main(){
while(true){
var ticker = exchange.GetTicker()
var price = ticker.Sell
if(price >= 7000){
exchange.Buy(_N(price+5,2), 1, 'BTC-USDT')
break
}
Sleep(3000)//Sleep 3000ms
}
Log('done')
}
नीचे बेचने के लिए बोली ◊ पैरामीटर और खरीद के लिए एक ही ◊ बाजार मूल्य सूची के लिए पैरामीटर के अर्थ अलग है, बाजार मूल्य बिक्री के लिए बोली के रूप मेंexchange.Sell(-1, 0.2), 0.2 ETH की बिक्री के लिए बाजार मूल्य का प्रतिनिधित्व करता है।
ऑर्डर आईडी के आधार पर ऑर्डर की जानकारी प्राप्त करें।exchange.GetOrder(OrderId)ऑर्डर आईडी ऑर्डर आईडी है, जो ऑर्डर के समय वापस आ जाती है।ऑर्डर के प्रकार पर ध्यान देंTypeफ़ील्ड और आदेश स्थितिStatusवास्तविक मान संख्यात्मक होते हैं, जो अलग-अलग अर्थों का प्रतिनिधित्व करते हैं, लेकिन स्मृति के लिए प्रतिकूल होते हैं, एफएमजेड इन मानों को वैश्विक स्थिरांक के साथ दर्शाता है, जैसे कि अधूरे आदेशों के लिएStatusतो यह 0 है,ORDER_STATE_PENDINGये सभी वैश्विक स्थिरांक दस्तावेज में देखे जा सकते हैं।◦ परिणाम लौटाएं:
{
"Id":125723661, //订单id
"Amount":0.01, //订单数量
"Price":7000, //订单价格
"DealAmount":0, //已成交数量
"AvgPrice":0, //成交均价
"Status":0, // 0:未完全成交, 1:已成交, 2:已撤单
"Type":1,// 订单类型,0:买单, 1:卖单
"ContractType":"",//合约类型,用于期货交易
"Info":{} //交易所返回原始信息
}
}
एक रणनीति जो एक निश्चित संख्या में सिक्के खरीदती हैः
function main(){
while(true){
var amount = exchange.GetAccount().Stocks
var ticker = exchange.GetTicker()
var id = null
if(5-amount>0.01){
id = exchange.Buy(ticker.Sell, Math.min(5-amount,0.2))
}else{
Log('Job completed')
return //return the main function, bot will stop
}
Sleep(3000) //Sleep 3000ms
if(id){
var status = exchange.GetOrder(id).Status
if(status == 0){ //这里也可以用 status == ORDER_STATE_PENDING 来判断。
exchange.CancelOrder(id)
}
}
}
}
सभी अधूरे आदेशों की सूची प्राप्त करें। यदि कोई अधूरा आदेश नहीं है, तो एक खाली सरणी लौटाएं। आदेश सूची विशिष्ट परिणाम जैसे GetOrder।
सभी आदेशों के लिए वर्तमान सौदे को रद्द करने के उदाहरणः
function CancelAll(){
var orders = exchange.GetOrders()
for(var i=0;i<orders.length;i++){
exchange.CancelOrder(orders[i].Id) // cancel order by orderID
}
}
function main(){
CancelAll()
while(true){
//do something
Sleep(10000)
}
}
आदेश id के अनुसार आदेश को रद्द करनाexchange.CancelOrder(OrderId)。 रद्द करने में सफल होने पर true लौटाया जाता है, अन्यथा false लौटाया जाता है。
डिजिटल मुद्रा वायदा व्यापार और नकद व्यापार से अलग है, ऊपर नकद व्यापार के कार्य भी वायदा के लिए लागू होते हैं, एकल वायदा व्यापार के लिए एक विशेष कार्य है. डिजिटल मुद्रा वायदा प्रक्रिया ट्रेडिंग करने से पहले, साइट पर मैनुअल ऑपरेशन से परिचित होना चाहिए, बुनियादी अवधारणाओं को समझना, जैसे कि पोजीशन खोलना, पोजीशन कम करना, पूर्ण पोजीशन, पोजीशन कम करना, लीवरेज करना, पोजीशन कम करना, फ्लोटिंग रिटर्न, गारंटी और इसी तरह की गणना सूत्रों की अवधारणाओं को समझना। संबंधित ट्यूटोरियल प्रत्येक वायदा एक्सचेंज में पाए जा सकते हैं, जिन्हें स्वयं सीखने की आवश्यकता है।
स्थायी अनुबंध और वायदा अनुबंध के समान है, लेकिन एक ही समय में बहु-खाली होने की कोई अवधारणा नहीं है।
यदि एक्सचेंज एक साथ OKEX और Huobi फ्यूचर्स जैसे फ्यूचर्स को सपोर्ट करता है, तो एक्सचेंज इंटरफेस में OKEX फ्यूचर्स और Huobi फ्यूचर्स को अलग-अलग एक्सचेंजों के रूप में माना जाता है।
फ़्यूचर्स ट्रेडिंग का पहला कदम ट्रेड करने के लिए अनुबंध सेट करना है, उदाहरण के लिए, OKEX फ़्यूचर्स, एक निश्चित या रिवर्सिंग बनाने के लिए बीटीसी ट्रेडिंग जोड़ी का चयन करें, और कोड में सेट करें कि यह वर्तमान सप्ताह, अगले सप्ताह या तिमाही अनुबंध है। यदि सेट नहीं किया गया है तो संकेत दिया जाएगाinvalid contract type。नकद ट्रेडिंग जोड़े के विपरीत, वायदा अनुबंध अक्सर बीटीसी जैसे ट्रेडिंग-ट्रेडेड मुद्राओं के साथ संपार्श्विक होते हैं, ट्रेडिंग जोड़े जो बीटीसी को जोड़ते हैं वे आमतौर पर बीटीसी के साथ संपार्श्विक के रूप में बीटीसी_यूएसडी ट्रेडिंग जोड़े का प्रतिनिधित्व करते हैं। यदि यूएसडीटी के साथ संपार्श्विक के रूप में वायदा मौजूद है, तो यूएसडीटी ट्रेडिंग जोड़े को जोड़ने के लिए एक वास्तविक डिस्क बनाने की आवश्यकता होती है। जैसे कि ओकेएक्स वायदा जैसे मुद्राओं के साथ-साथ मुद्रा मूल और यूएसडीटी मूल के साथ एक स्थायी अनुबंध की आवश्यकता होती है।ट्रेडिंग जोड़ी की स्थापना के बाद, विशिष्ट अनुबंध प्रकारों की स्थापना की जानी चाहिए, जैसे कि स्थायी, साप्ताहिक, साप्ताहिक आदि। अनुबंध की स्थापना के बाद, प्रवृत्ति, खरीद और बिक्री आदि के लिए संचालन किया जा सकता है।
बिटकॉइन, ओकेएक्स, हुओबीडीएम जैसे कॉन्ट्रैक्ट्स जो बिटकॉइन और यूएसडीटी के आधार पर मौजूद हैं, उन्हें ठोस सेटअप कॉन्ट्रैक्ट जोड़ने के लिए अलग किया जाना चाहिए। विशिष्ट सेटिंग्स इस प्रकार हैंः
//OKEX期货
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") // 设置为季度合约
exchange.SetContractType("swap") // 设置为永续合约
//币安期货
exchange.SetContractType("swap") // 设置为永续合约,注意币本位和USDT本位都存在永续
exchange.SetContractType("quarter") // 设置为当季合约
exchange.SetContractType("next_quarter") // 设置为次季合约
//BitMEX
exchange.SetContractType("XBTUSD") // 设置为永续合约
exchange.SetContractType("XBTM19") // 具体某个时间结算的合约,详情登录BitMEX查询各个合约代码
//GateIO
exchange.SetContractType("swap") // 设置为永续合约,不设置默认为swap永续合约。
//Deribit
exchange.SetContractType("BTC-27APR18") // 具体某个时间结算的合约,详情参看Deribit官网。
वर्तमान होल्डिंग जानकारी की सूची प्राप्त करें, OKEX(OKCOIN) वायदा एक पैरामीटर में पारित किया जा सकता है, जो अनुबंध के प्रकार को प्राप्त करने के लिए निर्दिष्ट करता है। यदि कोई होल्डिंग नहीं है, तो खाली सूची वापस करें[]。 होल्डिंग जानकारी के रूप में वापस आ रहा है, बहुत सारी विशिष्ट जानकारी है, जिसे लेनदेन के लिए विशिष्ट विश्लेषण के साथ जोड़ा जाना चाहिए。
| डेटा प्रकार | चर का नाम | उदाहरण देकर स्पष्ट करना |
|---|
“object HDIDInfo HDID एक्सचेंज द्वारा लौटाई गई मूल संरचना” number Margin level lever size OKCoin 10 या 20 OK futures full-stock mode return fixed 10 क्योंकि मूल API इसका समर्थन नहीं करता number is the amount of holding, OKCoin का मतलब है अनुबंधों की संख्या (एक पूर्णांक जो 1 से अधिक है) “FrozenAmount” और “FrozenAmount” के बीच की संख्या ️️ [number] [Profit] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] [NAME] █ const ████████████████████████████████████████████████████████████████████████████████████████ string ContractType
function main(){
exchange.SetContractType("this_week");
var position = exchange.GetPosition();
if(position.length>0){ //特别要注意引用前要先判断position长度再引用,否则会出错
Log("Amount:", position[0].Amount, "FrozenAmount:", position[0].FrozenAmount, "Price:",
position[0].Price, "Profit:", position[0].Profit, "Type:", position[0].Type,"ContractType:", position[0].ContractType)
}
}
पहले, लीवर का आकार सेट करें और इसे कैसे कॉल करेंःexchange.SetMarginLevel(10)10 का मतलब है 10 गुना लीवरेज, लीवरेज का आकार जो कि समर्थित है, इसे संबंधित एक्सचेंजों पर देखें, और 10 का मतलब है 10 गुना लीवरेज।ध्यान दें कि लीवरेज को एक्सचेंज में सेट किया जाना चाहिए और कोड को एक्सचेंज से मेल खाना चाहिए, अन्यथा यह गलत होगा│ या डिफ़ॉल्ट लीवर का उपयोग करके सेट नहीं किया जा सकता │
फिर ट्रेडि