Type/to search
3
Follow
1504
Followers
FMZ मात्रात्मक मंच रणनीति लेखन बुनियादी ट्यूटोरियल (जरूर पढ़ें)
Tutorials
Created 2019-08-13 17:47:27  Updated 2026-01-27 17:22:09
 33
 71696

इस ट्यूटोरियल में एपीआई परिचय, फीडबैक, चार्ट आदि सहित रणनीति लेखन का प्रारंभिक ज्ञान शामिल है। इस बुनियादी ट्यूटोरियल को सीखने के बाद, उपयोगकर्ता बुनियादी एपीआई का कुशल उपयोग करने में सक्षम होंगे और स्थिर रीयल-डिस्क रणनीति लिखेंगे। इस ट्यूटोरियल को सीखने से पहले, आपको सीखना होगाएफएमजेड आविष्कारक के लिए क्वांटिटेटिव प्लेटफॉर्म का उपयोग करना 。

पुराने ट्यूटोरियलःआविष्कारक मात्रा (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/api
  • यदि आप ट्रेडिंगव्यू के सिग्नल प्राप्त करना चाहते हैं, तो एफएमजेड पर ऑर्डर करें और इस लेख को देखेंः https://www.fmz.com/digest-topic/5533
  • जावास्क्रिप्ट, पायथन के लिए त्वरित परिचय, सरल रणनीतियों को लिखने के लिए कोई जटिल व्याकरण की आवश्यकता नहीं है, बस कुछ बुनियादी अवधारणाओं को मास्टर करने की आवश्यकता है, और आप इस ट्यूटोरियल को सीखते हुए प्रोग्रामिंग सीख सकते हैंः https://www.fmz.com/bbs-topic/382 https://www.fmz.com/bbs-topic/417
  • मैक भाषा प्रलेखन, ट्रेंडिंग रणनीतियों के लिए मैक भाषा बहुत सुविधाजनक है।
  • C++ में रुचि रखने वालों के लिए एक C++ कॉल उदाहरण, लेकिन यह व्याख्यात्मक भाषा नहीं है, इसलिए इसे डिबग करना मुश्किल है और इसका उपयोग करने की अनुशंसा नहीं की जाती हैः https://www.fmz.com/strategy/61533
  • NetEase क्लाउड क्लासरूम, FMZ आधिकारिक उत्पाद, केवल 20 युआन, सामग्री विस्तृत है, आरंभ करने के लिए उपयुक्त है।पाठ्यक्रम लिंक
  • कुछ शिक्षण रणनीतियाँ, प्रारंभिक चरण के लिए उपयुक्त, और सीखते समय बुनियादी परिधि लेखन रणनीतियाँःhttps://www.fmz.com/square/s:tag:教学/1
  • रणनीति का विस्तृत स्रोत वर्णनः https://www.fmz.com/bbs/s:tag:源码解析/1

डिबगिंग उपकरण

एफएमजेड क्वांटिटेटिव प्लेटफॉर्म एपीआई इंटरफेस को डिबग करने के लिए डिबग टूल प्रदान करता है, https://www.fmz.com/m/debug 。 डिबग टूल केवल जावास्क्रिप्ट का समर्थन करता है, केवल कुछ समय के लिए निष्पादित किया जा सकता है, एक्सचेंज इंटरफेस को डिबग करने के लिए एक वास्तविक डिस्क बनाने की आवश्यकता नहीं है。 रिटर्न का डेटा परिणाम के रूप में वापस आ जाएगा, और डिबग टूल का कोड सहेजा नहीं जाएगा。 इस ट्यूटोरियल के दौरान, डिबग टूल का उपयोग करके परीक्षण किया जा सकता है。
img

नीति कार्यक्रम वास्तुकला

एक विशेष बात यह है कि एक मुख्य फ़ंक्शन होना चाहिए, क्योंकि रणनीति को निर्बाध रूप से चलाने की आवश्यकता होती है, आमतौर पर, एक चक्र के साथ-साथ नींद का समय भी आवश्यक होता है। क्योंकि लेनदेन के सभी एपीआई की आवृत्ति सीमित होती है, इसलिए नींद के समय को समायोजित करने की आवश्यकता होती है। यह वास्तुकला विशिष्ट निश्चित अंतराल निष्पादन है। घटना-संचालित रणनीतियों को लिखने के लिए वेबसॉक का उपयोग भी किया जा सकता है, जैसे कि गहराई में परिवर्तन के तुरंत बाद निष्पादन, जिसे प्रगति ट्यूटोरियल में प्रस्तुत किया जाएगा।

अन्य विशेष प्रकार के फ़ंक्शंस इस प्रकार हैंः

  • onexit ((() सामान्य से बाहर निकलने के लिए क्वेरी फ़ंक्शन के लिए, अधिकतम निष्पादन समय 5 मिनट है, यदि समय समाप्त हो जाता है तो यह घोषित नहीं किया जा सकता है कि यह एक इंटरप्ट त्रुटि को रिपोर्ट करेगा। कुछ परिणामों को बाहर निकलने के लिए सहेजा जा सकता है।
  • onerror() अपवाद के रूप में एक्जिट फंक्शन, अधिकतम निष्पादन समय 5 मिनट है, जिसे घोषित नहीं किया जा सकता है。
  • init (() एक आरंभिकरण फ़ंक्शन के रूप में, नीति प्रोग्राम स्वचालित रूप से शुरू होने पर बुलाया जाता है, लेकिन घोषित नहीं किया जा सकता है।
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, पूर्व में बीटीसी एक लेनदेन मुद्रा है, और यूएसडीटी एक मूल्य निर्धारण मुद्रा है।

img

जाहिर है, अगर हम बहुत सारे ट्रेडिंग जोड़े हैं, तो यह एक परेशानी होगी, और हम 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, जो डेटा का उपयोग करते समय त्रुटि रिपोर्ट करता है और हार्ड डिस्क को बंद कर देता है, इसलिए त्रुटि सहिष्णुता बहुत महत्वपूर्ण है ↓ इस ट्यूटोरियल में इसे अलग से प्रस्तुत किया जाएगा ↓

GetTicker

बाजार की वर्तमान स्थिति प्राप्त करें, शायद सबसे अधिक उपयोग किया जाने वाला इंटरफ़ेस, पिछले लेनदेन की कीमत, खरीद और बेचने की कीमत, हाल ही में लेनदेन की मात्रा आदि की जानकारी प्राप्त करें। फिर से ऑर्डर करने से पहले, लेनदेन की कीमत को टिकर जानकारी के आधार पर निर्धारित किया जा सकता है।{"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) }

GetDepth

लटकन सूची की गहराई की जानकारी प्राप्त करें. हालांकि 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) }

GetRecords

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 }

GetTrades

कुछ एक्सचेंजों द्वारा समर्थित नहीं है. यह अपेक्षाकृत कम उपयोग किया जाता है। इसके बारे में अधिक जानकारी के लिए एपीआई दस्तावेज़ देखें।

लेनदेन के लिए खाता प्राप्त करें

क्योंकि ये इंटरफेस खातों से संबंधित हैं, उन्हें सीधे एक्सेस नहीं किया जा सकता है, उन्हें एपीआई-केई हस्ताक्षर का उपयोग करने की आवश्यकता है। एफएमजेड प्लेटफॉर्म ने बैकग्राउंड को एकीकृत किया है और इसे सीधे उपयोग किया जा सकता है।

GetAccount खाता प्राप्त करें

खाते की जानकारी प्राप्त करना. सबसे अधिक उपयोग किए जाने वाले इंटरफेस में से एक, जिसे कम शेष राशि से बचने के लिए ऑर्डर करने से पहले कॉल करने की आवश्यकता होती है.{"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 } }

Buy के तहत भुगतान करें

नीचे भुगतान किया गया है।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 की बिक्री के लिए बाजार मूल्य का प्रतिनिधित्व करता है।

GetOrder ऑर्डर प्राप्त करें

ऑर्डर आईडी के आधार पर ऑर्डर की जानकारी प्राप्त करें।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) } } } }

GetOrders ने आदेश नहीं दिया

सभी अधूरे आदेशों की सूची प्राप्त करें। यदि कोई अधूरा आदेश नहीं है, तो एक खाली सरणी लौटाएं। आदेश सूची विशिष्ट परिणाम जैसे 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 फ्यूचर्स को अलग-अलग एक्सचेंजों के रूप में माना जाता है।

SetContractType अनुबंध सेट करें

फ़्यूचर्स ट्रेडिंग का पहला कदम ट्रेड करने के लिए अनुबंध सेट करना है, उदाहरण के लिए, 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 एक्सचेंज द्वारा लौटाई गई मूल संरचना"
<unk> number <unk> Margin <unk> level <unk> lever <unk> size <unk> OKCoin <unk> 10 <unk> या 20 <unk> OK futures <unk> full-stock mode <unk> return <unk> fixed 10 <unk> क्योंकि मूल API इसका समर्थन नहीं करता <unk>
<unk>number is the amount of holding, OKCoin का मतलब है अनुबंधों की संख्या (एक पूर्णांक जो 1 से अधिक है)
"FrozenAmount" और "FrozenAmount" के बीच की संख्या
<unk>️<unk>️<unk>
<unk> <unk> <unk> <unk>
[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 <unk>ContractType <unk> <unk> <unk> <unk> <unk> <unk> <unk> <unk> <unk> <unk> <unk> <unk> <unk> <unk> <unk> <unk>

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 गुना लीवरेज।ध्यान दें कि लीवरेज को एक्सचेंज में सेट किया जाना चाहिए और कोड को एक्सचेंज से मेल खाना चाहिए, अन्यथा यह गलत होगा│ या डिफ़ॉल्ट लीवर का उपयोग करके सेट नहीं किया जा सकता │
फिर ट्रेडिंग की दिशा सेट करें और कॉल करेंःexchange.SetDirection(Direction) उन्होंने कहा, "हमारे पास कोई विकल्प नहीं है।**फ्यूचर्स के विपरीत, यदि एक स्थायी अनुबंध में एक ही समय में बहु-खाली अवधारणा नहीं होती है, तो एक एकल स्थिति रखने की अनुमति नहीं है, और बहु-खाली होने पर स्वचालित रूप से बहु-स्थिति खाली हो जाती है, सभी को केवल सेट करने की आवश्यकता होती हैbuyऔरsellयदि द्वि-दिशात्मक होल्डिंग समर्थित है, तो सेटअप की आवश्यकता हैclosebuy,closebuy。**विशिष्ट संबंध:

संचालित करेंSetDirection के लिए पैरामीटरनीचे की ओर कार्य
पोजीशन खोलेंexchange.SetDirection("buy")exchange.Buy()
पिन्तो पोहांगexchange.SetDirection("closebuy")exchange.Sell()
रिक्त स्थानexchange.SetDirection("sell")exchange.Sell()
रिक्त स्थानexchange.SetDirection("closesell")exchange.Buy()

अंत में, विशिष्ट खुले और बंद पोजीशन कोड है, जो विभिन्न एक्सचेंजों के लिए अलग-अलग ऑर्डर की मात्रा है, जैसे कि हुओबी वायदा संख्या के आधार पर है, एक 100 डॉलर। ध्यान दें कि वायदा प्रतिक्रिया बाजार मूल्य सूची का समर्थन नहीं करती है

function main(){ exchange.SetContractType("this_week") // 举例设置 为OKEX期货 当周合约 price = exchange.GetTicker().Last exchange.SetMarginLevel(10) //设置杠杆为10倍 exchange.SetDirection("buy") //设置下单类型为做多 exchange.Buy(price+10, 20) // 合约数量为20下单 pos = exchange.GetPosition() Log(pos) Log(exchange.GetOrders()) //查看是否有未成交订单 exchange.SetDirection("closebuy"); //如果是永续合约,直接设置exchange.SetDirection("sell") exchange.Sell(price-10, 20) }

नीचे दिए गए उदाहरणों में से एक पूर्ण बकाया के लिए एक विशिष्ट रणनीति है।

function main(){ while(true){ var pos = exchange.GetPosition() var ticker = exchange.GetTicekr() if(!ticker){ Log('无法获取ticker') return } if(!pos || pos.length == 0 ){ Log('已无持仓') return } for(var i=0;i<pos.length;i++){ if(pos[i].Type == PD_LONG){ exchange.SetContractType(pos[i].ContractType) exchange.SetDirection('closebuy') exchange.Sell(ticker.Buy, pos[i].Amount - pos[i].FrozenAmount) } if(pos[i].Type == PD_SHORT){ exchange.SetContractType(pos[i].ContractType) exchange.SetDirection('closesell') exchange.Buy(ticker.Sell, pos[i].Amount - pos[i].FrozenAmount) } } var orders = exchange.Getorders() Sleep(500) for(var j=0;j<orders.length;j++){ if(orders[i].Status == ORDER_STATE_PENDING){ exchange.CancelOrder(orders[i].Id) } } } }

डिजिटल मुद्रा का लीवरेज ट्रेडिंग

कोड में लीवरेज्ड अकाउंट में स्विच करने की आवश्यकता होती है, अन्य सभी नकद लेनदेन के समान हैं।

exchange.IO (("trade_margin") का उपयोग करके, खाते को लीवरेज मोड में स्विच करें, और खाते की परिसंपत्तियों को प्राप्त करने के लिए एक्सचेंज के लीवरेज इंटरफ़ेस पर जाएं।
exchange.IO (("trade_normal") का उपयोग करके सामान्य खाता मोड पर वापस स्विच करें।

समर्थित एक्सचेंजः

  • OKEX V3: लीवरेज्ड खाता मोड में ट्रेडिंग जोड़े सामान्य से अलग हैं, कुछ ट्रेडिंग जोड़े नहीं हो सकते हैं।
  • बिटकॉइनः लीवरेज्ड खाता पैटर्न में ट्रेडिंग जोड़े सामान्य से अलग हैं, कुछ ट्रेडिंग जोड़े नहीं हो सकते हैं।
  • ZB: धन केवल QC के रूप में स्थानांतरित किया जा सकता है, लीवरेज्ड ट्रेडिंग प्लेटफ़ॉर्म, विभिन्न ट्रेडिंग जोड़े के बीच धन की स्वतंत्रता, यानी ETH_QC ट्रेडिंग जोड़े के तहत QC सिक्के की संख्या, जो BTC_QC में नहीं देखी जाती है
  • FCoin
  • बिनेंस

कमोडिटी फ्यूचर ट्रेडिंग

कमोडिटी फ्यूचर ट्रेडिंग और डिजिटल मुद्रा फ्यूचर ट्रेडिंग में एक बड़ा अंतर है। सबसे पहले, कमोडिटी फ्यूचर का ट्रेडिंग समय बहुत कम है, डिजिटल मुद्रा 24h ट्रेडिंग; कमोडिटी फ्यूचर का अनुबंध भी सामान्य REST API नहीं है; कमोडिटी फ्यूचर का ट्रेडिंग आवृत्ति और लिंक्ड मात्रा सीमा, डिजिटल मुद्रा बहुत ढीली है, आदि। इसलिए, कमोडिटी फ्यूचर ट्रेडिंग में बहुत सी जगहें हैं जिन पर विशेष ध्यान देने की आवश्यकता है, और यह सलाह दी जाती है कि इसमें समृद्ध ऑपरेशन मैनुअल ऑपरेशन अनुभव हो। एफएमजेड सिमनोव कमोडिटी फ्यूचर सिमुलेशन डिस्क का समर्थन करता है, संदर्भः https://www.fmz.com/bbs-topic/325 。 कमोडिटी फ्यूचर कंपनी ने जोड़ाः https://www.fmz.com/bbs-topic/371

एफएमजेड मात्रात्मक मंच एक प्रोग्रामेटिक ट्रेडिंग प्रदाता के रूप में विभिन्न वायदा सेवा प्रदाताओं के लिए सॉफ्टवेयर लाइसेंस के लिए आवेदन किया है, उपयोगकर्ता सीधे आवेदन करने की आवश्यकता के बिना उपयोग कर सकते हैं, एफएमजेड वायदा जोड़ा गया है खोज फ्यूचर फ्यूचर ब्राउज़र एफएमजेड द्वारा आवेदन की गई सूची को देख सकते हैं। विशिष्ट संदर्भ पोस्टः https://www.fmz.com/bbs-topic/3860 。 यदि आपका वायदा आपूर्तिकर्ता सूची में नहीं है, तो केवल स्वयं आवेदन कर सकता है, या फिर से समर्थित ट्रेडिंग ओपनर पर, सामान्यतः 2 दिन की आवश्यकता होती है। एफएमजेड और कुछ व्यापारियों के साथ गहन सहयोग संबंध हैं, जैसे कि एंटाई मोंगकुंग, जिन्होंने वायदा मंच के संस्करण को खरीदा है, उपयोगकर्ता को एफएमजेड प्लेटफॉर्म का उपयोग कर सकते हैं, और स्वचालित रूप से न्यूनतम शुल्क के साथ शुरू कर सकते हैं। एफएमजेड वीआईपीः https://www.fmz.com/bbs-topic/3860।

एफएमजेड प्लेटफॉर्म आर्किटेक्चर के फायदे के कारण, उपयोगकर्ता कई वायदा व्यापारी खाते भी जोड़ सकते हैं, और कुछ ऐसी सुविधाओं को प्राप्त कर सकते हैं जो अन्य कमोडिटी वायदा प्रोग्रामेटिक ट्रेडिंग सॉफ्टवेयर नहीं कर सकते हैं, जैसे कि उच्च आवृत्ति टिक का संश्लेषण, संदर्भः https://www.fmz.com/bbs-topic/1184

नीति ढांचा

सबसे पहले, चूंकि यह एक 24 घंटे का लेनदेन नहीं है और लॉगिंग की आवश्यकता है, इसलिए लेनदेन करने से पहले लिंक की स्थिति का आकलन करना आवश्यक है।exchange.IO("status")के लिएtrueयदि लॉग इन सफल नहीं होता है तो एपीआई को बुलाया जाता है, 'नॉट लॉगिन' को संकेत नहीं दिया जाता है। रणनीति शुरू होने के बाद सो सकते हैं, लॉग इन करने के लिए कुछ समय दें। आप सदस्यता को फिर से आज़मा सकते हैं।_C(exchange.SetContractType,"MA888")इस प्रकार लैंडिंग की सफलता सुनिश्चित की जा सकती है।

कमोडिटी फ्यूचर्स के लिए ट्रेडिंग कोड और एक्सेस कोड डिजिटल मुद्रा फ्यूचर्स के समान हैं, यहां अलग-अलग और ध्यान देने योग्य हैं।

function main(){ _C(exchange.SetContractType,"MA888") //没登陆成功是无法订阅合约的,最好重试一下 while(true){ if(exchange.IO("status")){ var ticker = exchange.GetTicker() Log("MA888 ticker:", ticker) LogStatus(_D(), "已经连接CTP !")//_D获取事件 } else { LogStatus(_D(), "未连接CTP !") Sleep(1000) } } }

कमोडिटी फ्यूचर्स लाइब्रेरी ट्रेडिंग का उपयोग करने की सिफारिश की जाती है (इसे बाद में समझाया गया है), इस समय कोड बहुत सरल है, आपको बोझिल विवरणों को संभालने की आवश्यकता नहीं है। स्रोत कॉपी करेंः https://www.fmz.com/strategy/57029

function main() { // 使用了商品期货类库的CTA策略框架 $.CTA(Symbols, function(st) { var r = st.records var mp = st.position.amount var symbol = st.symbol /* r为K线, mp为当前品种持仓数量, 正数指多仓, 负数指空仓, 0则不持仓, symbol指品种名称 返回值如为n: n = 0 : 指全部平仓(不管当前持多持空) n > 0 : 如果当前持多仓,则加n个多仓, 如果当前为空仓则平n个空仓,如果n大于当前持仓, 则反手开多仓 n < 0 : 如果当前持空仓,则加n个空仓, 如果当前为多仓则平n个多仓,如果-n大于当前持仓, 则反手开空仓 无返回值表示什么也不做 */ if (r.length < SlowPeriod) { return } var cross = _Cross(TA.EMA(r, FastPeriod), TA.EMA(r, SlowPeriod)); if (mp <= 0 && cross > ConfirmPeriod) { Log(symbol, "金叉周期", cross, "当前持仓", mp); return Lots * (mp < 0 ? 2 : 1) } else if (mp >= 0 && cross < -ConfirmPeriod) { Log(symbol, "死叉周期", cross, "当前持仓", mp); return -Lots * (mp > 0 ? 2 : 1) } }); }

सीटीपी डेटा अधिग्रहण मोड

कमोडिटी फ्यूचर्स सीटीपी प्रोटोकॉल का उपयोग करते हैं, सभी ट्रेडों और ऑर्डर लेनदेन को केवल तब सूचित किया जाता है जब कोई बदलाव होता है, जबकि ऑर्डर, खाता और स्थिति पूछताछ सक्रिय पूछताछ है। इसलिए घटना-संचालित उच्च-आवृत्ति रणनीति के लिए उपयुक्त है। डिफ़ॉल्ट मोड ट्रेडों को प्राप्त करने के लिए इंटरफ़ेस जैसेGetTickerGetDepthGetRecordsसभी डेटा को कैश किया जाता है ताकि नवीनतम डेटा प्राप्त किया जा सके, यदि कोई डेटा नहीं है तो डेटा का इंतजार किया जाता है, इसलिए रणनीति को नींद के बिना किया जा सकता है। जब स्थिति बदलती है, तो टिकर, गहराई, रिकॉर्ड्स को अपडेट किया जाता है, इस समय इनमें से किसी भी इंटरफ़ेस को तुरंत वापस बुलाया जाता है, जिसे इंटरफेस की स्थिति को अपडेट अपडेट मोड के लिए रखा जाता है, अगली बार उसी इंटरफ़ेस को बुलाया जाता है, जब तक कि नया डेटा वापस नहीं आता है। कुछ ठंडे दरवाजे या सौदे की गिरावट के मामले में लंबे समय तक कोई लेनदेन नहीं होता है, यह सामान्य है कि रणनीति को लंबे समय तक चिपकाया जाता है।

यदि आप चाहते हैं कि आप हर बार जब आप एक स्थिति प्राप्त करते हैं, तो आप डेटा प्राप्त कर सकते हैं, यहां तक कि पुराने डेटा, आप स्थिति को तुरंत अद्यतन मोड में बदल सकते हैं।exchange.IO("mode", 0)❚ इस समय रणनीति को इवेंट-ड्राइव के रूप में नहीं लिखा जा सकता है, एक स्लीप इवेंट को जोड़ना आवश्यक है, ताकि तेजी से मृत चक्र से बचा जा सके। ❚ कुछ कम आवृत्ति वाली रणनीतियों में इस मोड का उपयोग किया जा सकता है, रणनीति डिजाइन सरल है।exchange.IO("mode", 1)डिफ़ॉल्ट कैश मोड से कटौती करें

एकल अनुबंध संचालित करते समय, डिफ़ॉल्ट मोड का उपयोग किया जा सकता है। लेकिन यदि यह कई अनुबंध हैं, तो यह संभव है कि एक अनुबंध को अपडेट नहीं किया गया है, जिसके कारण स्थिति प्राप्त करने वाला इंटरफ़ेस अवरुद्ध हो गया है, अन्य अनुबंध स्थिति अपडेट भी प्राप्त नहीं किए जा सकते हैं। इस समस्या को हल करने के लिए, तत्काल अद्यतन मोड का उपयोग किया जा सकता है, लेकिन उच्च आवृत्ति रणनीति लिखने के लिए सुविधाजनक नहीं है। इस समय घटना पुश मोड का उपयोग किया जा सकता है, आदेश और स्थिति प्राप्त करने के लिए पुशिंग।exchange.IO("wait")यदि आप एक से अधिक एक्सचेंज ऑब्जेक्ट जोड़ते हैं, जो कमोडिटी फ्यूचर्स में दुर्लभ है, तो इसका उपयोग किया जा सकता हैexchange.IO("wait_any")इस समय लौटाया गया इंडेक्स एक्सचेंज इंडेक्स को दर्शाता है।

इस घटना के बाद, घटनाक्रम में बदलाव हुआ है।{Event:"tick", Index:交易所索引(按实盘上交易所添加顺序), Nano:事件纳秒级时间, Symbol:合约名称}
आदेश अग्रेषितः{Event:"order", Index:交易所索引, Nano:事件纳秒级时间, Order:订单信息(与GetOrder获取一致)}

इस बिंदु पर रणनीति संरचना इस प्रकार लिखी जा सकती है:

function on_tick(symbol){ Log("symbol update") exchange.SetContractType(symbol) Log(exchange.GetTicker()) } function on_order(order){ Log("order update", order) } function main(){ while(true){ if(exchange.IO("status")){ //判断链接状态 exchange.IO("mode", 0) _C(exchange.SetContractType, "MA888")//订阅MA,只有第一次是真正的发出订阅请求,接下来都是程序切换,不耗时间。 _C(exchange.SetContractType, "rb888")//订阅rb while(true){ var e = exchange.IO("wait") if(e){ if(e.event == "tick"){ on_tick(e.Symbol) }else if(e.event == "order"){ on_order(e.Order) } } } }else{ Sleep(10*1000) } } }

कमोडिटी वायदा और डिजिटल मुद्रा के बीच अंतर

इसके अलावा, यह ध्यान दिया जाना चाहिए कि कमोडिटी वायदा डिजिटल मुद्रा एक्सचेंजों से अलग है। जैसे कि GetDepth वास्तव में केवल एक गहरी गहराई है ((5 गहरी गहराई शुल्क महंगा है), GetTrades भी लेनदेन इतिहास प्राप्त नहीं करता है ((यह सभी भंडारण परिवर्तन पर आधारित है, कोई वास्तविक लेनदेन रिकॉर्ड नहीं है) । कमोडिटी वायदा में उतार-चढ़ाव की सीमा होती है, जब उतार-चढ़ाव होता है, तो गहरी बिक्री की बोली की बिक्री की कीमत स्टॉप प्राइस होती है, ऑर्डर की मात्रा 0 होती है, जब यह गिरती है, तो खरीद और खरीद की कीमत स्टॉप प्राइस होती है, ऑर्डर की मात्रा 0 होती है। इसके अलावा, कमोडिटी वायदा पूछताछ इंटरफेस की आवृत्ति, जैसे कि खाता, ऑर्डर, स्टॉक स्थान, सख्त सीमाएं, आमतौर पर 2s एक बार। कमोडिटी ऑर्डर की मात्रा और निकासी की सीमाएं आदि।

अनुबंध की स्थापना

exchange.IO (("instruments"): सभी एक्सचेंजों के अनुबंधों की सूची को वापस करता है {अनुबंध का नामः विवरण} शब्दकोश के रूप में, केवल फिक्स्ड डिस्क को समर्थन देता है।
exchange.IO (("products"): एक्सचेंज के सभी उत्पादों की सूची {उत्पाद का नामः विवरण} को शब्दकोश के रूप में लौटाता है, केवल फिक्स्ड डिस्क का समर्थन करता है।
exchange.IO (("subscribed"): रिटर्न सब्सक्राइब किए गए कॉन्ट्रैक्ट, प्रारूप में समान, केवल फिक्स्ड डिस्क को सपोर्ट करता है।

पारंपरिक सीटीपी वायदाContractTypeउदाहरण के लिए, यदि आप किसी अनुबंध के आईडी को देखते हैं, तो आप इसे बड़े या छोटे अक्षरों में अलग कर सकते हैं।exchange.SetContractType("au1506")अनुबंध सेटअप सफलता के बाद अनुबंध वापस लौटने की जानकारी, जैसे कि एक बार में कम से कम कितना खरीदा गया, प्रसंस्करण शुल्क, डिलीवरी समय, आदि। जब कई अनुबंधों की सदस्यता ली जाती है, तो केवल पहली बार एक वास्तविक सदस्यता अनुरोध भेजा जाता है, और फिर केवल कोड स्तर पर लेनदेन जोड़े को बदलना, समय नहीं लगता है। मुख्य रूप से अनुक्रमिक अनुबंध 888 जैसे MA888 के लिए कोड है, अनुक्रमिक सूचकांक अनुबंध 000 जैसे MA000, 888 और 000 केवल आभासी अनुबंधों के लिए समर्थन करते हैं, वास्तविक डिस्क केवल अधिग्रहण की स्थिति का समर्थन करते हैं।लेकिन मैक भाषा के लिए, जब आप एक प्रमुख अनुबंध को संचालित करते हैं, तो प्रोग्राम स्वचालित रूप से स्थिति को बदल देता है, गैर-प्रमुख स्थिति को हटा देता है और एक प्रमुख स्थिति पर एक नया स्थान बनाता है।

अनुबंध स्थापित नहीं किया जा सकता है, लेकिन यह तुरंत वापस आ जाएगा, इसलिए आप CTP लॉग इन करने के लिए C ++ के साथ फिर से प्रयास कर सकते हैं। सफल लॉग इन के बाद, अनुबंध स्थापित करने में कोई समय नहीं लगता है और वास्तविक नेटवर्क एक्सेस नहीं होता है।

पोजीशन खोलना और पोजीशन खाली करना

SetDirectionदिशा के लिए उपलब्धbuy, closebuy, sell, closesellचार पैरामीटर, कमोडिटी फ्यूचर्सclosebuy_todayऔरclosesell_todayइस तरह के बयानों से यह स्पष्ट हो जाता है कि यह गलत है।closebuy/closesellकल के लिए, केवल पिछले दिन की किस्मों को कल और आज के बीच विभाजित किया जाता है, जो कि प्रक्रिया शुल्क को प्रभावित कर सकता है, इसलिए कल के लिए प्राथमिकता देने की आवश्यकता होती है। सीटीपी पारंपरिक वायदा के लिए, एक दूसरा पैरामीटर 1 या 2 या 3 सेट किया जा सकता है, क्रमशः सट्टा सट्टा, सट्टा लाभ, सट्टा गार्ड, कोई डिफ़ॉल्ट सट्टा नहीं।खरीद और बिक्री, स्थिति प्राप्त करना, ऑर्डर प्राप्त करना, चालान निकालना, खाता प्राप्त करना आदि जैसे संचालन डिजिटल मुद्रा वायदा लेनदेन के समान हैं।

संचालित करेंSetDirection के लिए पैरामीटरनीचे की ओर कार्य
पोजीशन खोलेंexchange.SetDirection("buy")exchange.Buy()
पिन्तो पोहांगexchange.SetDirection("closebuy")exchange.Sell()
रिक्त स्थानexchange.SetDirection("sell")exchange.Sell()
रिक्त स्थानexchange.SetDirection("closesell")exchange.Buy()

नीचे दिए गए उदाहरण में एक विशिष्ट बियर पोजीशन फ़ंक्शन है, ध्यान दें कि यह उदाहरण बहुत सरल है, और यह भी विचार करना है कि क्या यह व्यापार के समय में है, पूरी तरह से व्यापार नहीं किया गया है, आदेश को कैसे रोकना है, अधिकतम आदेश की मात्रा क्या है, क्या आवृत्ति बहुत अधिक है, विशेष रूप से, पारी की कीमत या बंदरगाह आदि जैसे कई सवाल हैं। केवल संदर्भ के लिए।**फिक्स्ड डिस्क के लिए स्टोरेज खोलने के लिए एक प्लेटफ़ॉर्म-एंडेक्ड क्लासरूम का उपयोग करने की सिफारिश की जाती है, https://www.fmz.com/strategy/12961**。 पुस्तकालय अनुभाग में इसके बारे में विस्तृत जानकारी दी गई है।

function Cover(contractType, amount, slide) { for (var i = 0; i < positions.length; i++) { if (positions[i].ContractType != contractType) { continue; } var depth = _C(e.GetDepth); if (positions[i].Type == PD_LONG || positions[i].Type == PD_LONG_YD) { exchange.SetDirection(positions[i].Type == PD_LONG ? "closebuy_today" : "closebuy"); exchange.Sell(depth.Bids[0]-slide, amount, contractType, positions[i].Type == PD_LONG ? "平今" : "平昨", 'Bid', depth.Bids[0]); } else { exchange.SetDirection(positions[i].Type == PD_SHORT ? "closesell_today" : "closesell"); exchange.Buy(depth.Asks[0]+slide, amount, contractType, positions[i].Type == PD_SHORT ? "平今" : "平昨", 'Ask', depth.Asks[0]); } } }

कमोडिटी फ्यूचर्स कस्टम ऑर्डर प्रकार का समर्थन करता है (फिक्स्ड डिस्क का समर्थन करता है, बैकपैकिंग का समर्थन नहीं करता है), बाद में फ़िल्टर मोड निर्दिष्ट करता है, फ़िल्टर में संलग्न होता है_और फिर पीछे की तरफ

exchange.SetDirection("buy_ioc"); exchange.SetDirection("sell_gtd-20170111")

विशेष उपसर्गों में शामिल हैंः

  • ioc तुरंत पूरा करें, अन्यथा THOST_FTDC_TC_IOC को रद्द करें
  • gfs यह खंड मान्य है THOST_FTDC_TC_GFS
  • gfd THOST_FTDC_TC_GFD वर्तमान में मान्य है
  • gtd निर्दिष्ट तिथि से पहले मान्य THOST_FTDC_TC_GTD
  • gtc रद्द करने से पहले मान्य THOST_FTDC_TC_GTC
  • gfa सेट बोली मान्य THOST_FTDC_TC_GFA

सहज इंटरफेस

डिफ़ॉल्ट रूप से, सीटीपी इंटरफेस को कमोडिटी फ्यूचर ट्रेडर्स में खोला जाता है, यदि आवश्यक हो, तो इसे इशिन इंटरफेस के लिए बदला जा सकता है। एफएमजेड के माध्यम से पैकेजिंग, कॉल करने का तरीका समान है। अंतर यह है कि खाते, ऑर्डर, और होल्डिंग सभी पुश मोड हैं, इसलिए संरक्षक इन डेटा को स्थानीय रूप से बनाए रखता है, और जब संबंधित इंटरफेस को कॉल किया जाता है, तो यह तुरंत वापस आ जाता है, वास्तविक अनुरोध नहीं किया जाता है।

इशिन प्रोटोकॉल कस्टम ऑर्डर प्रकार इस प्रकार हैः

  • gfd वर्तमान में मान्य TAPI_ORDER_TIMEINFORCE_GFD
  • TAPI_ORDER_TIMEINFORCE_GTC जीटीसी को रद्द करने से पहले मान्य
  • gtd निर्दिष्ट तिथि से पहले मान्य TAPI_ORDER_TIMEINFORCE_GTD
  • FAK के लिए आंशिक सौदा, शेष को रद्द करें TAPI_ORDER_TIMEINFORCE_FAK
  • ioc तुरंत पूरा करें, अन्यथा TAPI_ORDER_TIMEINFORCE_FAK को रद्द करें
  • TAPI_ORDER_TIMEINFORCE_FOK को पूरी तरह से रद्द करने के लिए fok को पूरी तरह से बंद करने में विफलता

सामान्य रूप से उपयोग किए जाने वाले वैश्विक फ़ंक्शन

लॉग लॉग और वीकेम

लॉग एक लॉग है, @ अक्षर के बाद एक स्ट्रिंग जोड़ा जाता है, तो संदेश एक पुश कतार में प्रवेश करता है, जिसे सीधे WeChat या Telegram को बांधने के बाद भेजा जाता हैLog('推送到微信@')

लॉग का रंग भी अनुकूलित हैLog('这是一个红色字体的日志 #ff0000')#ff0000RGB रंगों के लिए 16 अंकों का प्रतिनिधित्व

सभी लॉग फ़ाइलें होस्ट की निर्देशिका में एक स्थैतिक sqlit डेटाबेस में मौजूद हैं, जिन्हें डेटाबेस सॉफ़्टवेयर के साथ खोलने के लिए डाउनलोड किया जा सकता है, या बैकअप को पुनर्स्थापित करने के लिए कॉपी किया जा सकता है (डेटाबेस का नाम और स्थैतिक डिस्क id समान है) ।

LogProfit मुद्रण लाभ

आय को रिकॉर्ड करें और आय वक्र को फिक्स्ड डिस्क इंटरफेस पर खींचें, जिसे फिक्स्ड डिस्क को पुनरारंभ करने के बाद भी संरक्षित किया जा सकता है।LogProfit(1000)ध्यान देंLogProfitयह किसी भी संख्या हो सकती है और इसे स्वयं भरना होगा।

LogStatus स्थिति तालिका प्रदर्शित करता है (टेबल के साथ)

फिक्स्ड डिस्क स्थिति, क्योंकि लॉग को पहले से सहेजा जाता है और लगातार अपडेट किया जाता है, यदि केवल एक ही जानकारी प्रदर्शित करने की आवश्यकता है जो सहेजा नहीं गया है, तो इसका उपयोग किया जा सकता हैLogStatusसमारोह।LogStatusके पैरामीटर एक स्ट्रिंग है, जो तालिका जानकारी को प्रदर्शित करने के लिए भी इस्तेमाल किया जा सकता है.

एक विशिष्ट स्थैतिक स्थिति स्थिति को दिखाने वाले तालिका का उदाहरणः

var table = {type: 'table', title: '持仓信息', cols: ['列1', '列2'], rows: [ ['abc', 'def'], ['ABC', 'support color #ff0000']]}; LogStatus('`' + JSON.stringify(table) + '`'); // JSON序列化后两边加上`字符, 视为一个复杂消息格式(当前支持表格) LogStatus('第一行消息\n`' + JSON.stringify(table) + '`\n第三行消息'); // 表格信息也可以在多行中出现 LogStatus('`' + JSON.stringify([table, table]) + '`'); // 支持多个表格同时显示, 将以TAB显示到一组里 LogStatus('`' + JSON.stringify(tab1) + '`\n' + '`' + JSON.stringify(tab2) + '`\n'); // 上下排列显示多个表

नींद नींद

पैरामीटर मिलीसेकंड में है, जैसेSleep(1000)एक सेकंड के लिए निद्रा. व्यापार की सभी पहुंच आवृत्ति की सीमाओं के कारण, सामान्य रणनीति में मृत चक्र में निद्रा का समय शामिल किया जाता है.

_जी डेटा सहेजें

यदि आप कुछ स्थायी जानकारी को सहेजना चाहते हैं, तो आप इसे अपने कंप्यूटर पर रख सकते हैं, और यदि आप कुछ स्थायी जानकारी चाहते हैं, तो आप इसे अपने कंप्यूटर पर रख सकते हैं।_Gयह बहुत ही सुविधाजनक है और JSON क्रमबद्ध सामग्री को सहेजने में मदद करता है।_Gफ़ंक्शन लिखा हैonexit()इस प्रकार, जब भी आप रणनीति को रोकते हैं, तो आप स्वचालित रूप से आवश्यक जानकारी को सहेजते हैं।
यदि आप अधिक प्रारूपित डेटा रखना चाहते हैं, तो आप इसे अपने पास रख सकते हैं।_G फ़ंक्शन का उपयोग कम किया जाता है, इसे सीधे पायथन के साथ डेटाबेस में लिखा जा सकता है।

function onexit(){ _G('profit', profit) } function main(){ _G("num", 1); // 设置一个全局变量num, 值为1 s _G("num", "ok"); // 更改一个全局变量num, 值为字符串ok _G("num", null); // 删除全局变量 num _G("num"); // 返回全局变量num的值,如果不存在返回null var profit = 0 if(_G('profit')){ profit = _G('profit') } }

_N परिशुद्धता फ़ंक्शन

ऑर्डर करते समय, अक्सर कीमत और मात्रा की सटीकता को नियंत्रित करने के लिए, एफएमजेड में एक अंतर्निहित _N फ़ंक्शन है जो छोटे अंक के अंकों को संग्रहीत करता है, जैसे कि_N(4.253,2)यह 4.25 है।

_C स्वचालित पुनः प्रयास

और यह भी कहा गया है कि जब भी आप किसी को कॉल करते हैं, तो यह सुनिश्चित नहीं किया जा सकता है कि यह हर बार कामयाब होगा।_C एक स्वतः पुनः प्रयास करने वाला फ़ंक्शन है. यह निर्दिष्ट फ़ंक्शन को सफलतापूर्वक वापस करने के लिए बुलाता रहता है (यदि फ़ंक्शन null या false लौटाता है तो यह पुनः प्रयास करेगा), जैसे_C(exchange.GetTicker), डिफ़ॉल्ट पुनः प्रयास अंतराल 3 सेकंड है, पुनः प्रयास अंतराल को नियंत्रित करने के लिए _CDelay फ़ंक्शन को बुलाया जा सकता है, जैसे कि _CDelay(1000), 1 सेकंड के लिए पुनः प्रयास अंतराल को बदलने के लिए _C फ़ंक्शन को बदलने की सिफारिश की जाती हैGetTicker(),exchange.GetDepth,GetTrade,GetRecords,GetAccount,GetOrders, GetOrderC_C त्रुटि को स्वीकार करता है, ताकि प्रोग्राम को विफल होने से रोका जा सके।

CancelOrder_C फ़ंक्शन का उपयोग नहीं किया जा सकता है, क्योंकि निकासी विफलता विभिन्न कारणों से होती है, यदि एक एकल सौदा हो गया है, तो निकासी विफलता वापस आ जाएगी, और _C फ़ंक्शन का उपयोग करने से लगातार पुनः प्रयास होगा।

_C फ़ंक्शंस को पैरामीटर्स में भी डाला जा सकता है और कस्टम फ़ंक्शंस में भी इस्तेमाल किया जा सकता है।

function main(){ var ticker = _C(exchange.GetTicker) var depth = _C(exchange.GetDepth) var records = _C(exchange.GetRecords, PERIOD_D1) //传入参数 }

_D दिनांक फलन

सीधे बुलाना_D()वर्तमान समय स्ट्रिंग लौटाता है, जैसेः2019-08-15 03:46:14यदि यह एक प्रतिक्रिया में बुलाया जाता है तो प्रतिक्रिया समय वापस करें। समय का आकलन करने के लिए _D फ़ंक्शन का उपयोग किया जा सकता है, जैसेः _D().slice(11) > '09:00:00':

_D(timestamp,fmt), तो यह समय स्ट्रिंग के लिए समय स्ट्रिंग में बदल जाता है, जैसे कि_D(1565855310002)समय प्रारूप, डिफ़ॉल्ट रूप सेyyyy-MM-dd hh:mm:ss

टीए सूचक फ़ंक्शन

कुछ सामान्य रूप से उपयोग किए जाने वाले संकेतक फ़ंक्शंस, जैसे MA\MACD\KDJ\BOLL, सीधे FMZ प्लेटफ़ॉर्म में अंतर्निहित हैं। विशिष्ट समर्थित संकेतक एपीआई दस्तावेज़ में देखे जा सकते हैं।

संकेतक फ़ंक्शन का उपयोग करने से पहले, K लाइन की लंबाई का न्याय करना सबसे अच्छा है। जब पहले की K लाइन की लंबाई गणना के लिए आवश्यक अवधि को पूरा नहीं करती है, तो परिणाम होता हैnull。 यदि इनपुट K लाइन की लंबाई 100 है, और गणना MA की अवधि 10 है, तो पहले 9 मान शून्य हैं, और बाद में सामान्य गणना की जाती है 。

जावास्क्रिप्ट पूर्ण तालिब का भी समर्थन करता है, जो तृतीय-पक्ष पुस्तकालय समर्थन के रूप में, जैसे किtalib.CCI(records)。 संदर्भ http://ta-lib.org/function.html 。 पायथन के लिए तालिब लाइब्रेरी को स्वयं स्थापित किया जा सकता है, क्योंकि इसे संकलित करने की आवश्यकता है, पाइप का उपयोग करके सरल स्थापना नहीं की जा सकती है, स्वयं स्थापना के तरीके की खोज की जा सकती है 。

सूचकांक फ़ंक्शन K-लाइन डेटा के अलावा किसी भी सरणी में जा सकता है

function main(){ var records = exchange.GetRecords(PERIOD_M30) if (records && records.length > 9) { var ma = TA.MA(records, 14) Log(ma) } }

जावास्क्रिप्ट फ़ंक्शंस

यहाँ कुछ जावास्क्रिप्ट फ़ंक्शंस का परिचय दिया गया है जिनका उपयोग अक्सर किया जाता है।

  • Date.now()वर्तमान समय को लौटें
  • parseFloat()स्ट्रिंग को संख्या में परिवर्तित करें, जैसेparseFloat("123.21")
  • parseInt()स्ट्रिंग को पूर्णांक में परिवर्तित करें
  • num.toString()संख्याओं को स्ट्रिंग में परिवर्तित करें, संख्याओं को चर में परिवर्तित करें
  • JSON.parse()Json स्ट्रिंग को स्वरूपित करें, जैसेJSON.parse(exchange.GetRawJSON())
  • जावास्क्रिप्ट में मैथ लाइब्रेरी फ़ंक्शंस इस प्रकार हैंMath.max(),Math.abs()सामान्य गणितीय संचालन, संदर्भः https://www.w3school.com.cn/jsref/jsref_obj_math.asp
  • FMZ द्वारा उद्धृत जावास्क्रिप्ट तृतीय-पक्ष गणित, संदर्भः https://mathjs.org/
  • FMZ ने जावास्क्रिप्ट तृतीय-पक्ष अंडरस्कोर लाइब्रेरी का उपयोग किया है, जो कई Js के लिए आसान है।

टेम्पलेट लाइब्रेरी

एक स्थिर रणनीति लिखने के लिए कई स्थितियों को ध्यान में रखना पड़ता है, जैसे कि 5 सिक्के खरीदने के लिए एक साधारण सुविधा, हमें इस पर विचार करना होगाः क्या वर्तमान शेष पर्याप्त है? आदेश की कीमत क्या है? सटीकता क्या है? बाजार को झटका देने से बचने के लिए ऑर्डर को विभाजित करने की आवश्यकता नहीं है? अधूरे आदेशों को कैसे संभालना है? आदि विवरण। विभिन्न रणनीतियों में, ये विशेषताएं समान हैं, एक टेम्पलेट के रूप में बनाई जा सकती हैं। आधिकारिक टेम्पलेट का अनुकरण करने वाले उपयोगकर्ता, आप खुद भी टेम्पलेट रणनीति लिख सकते हैं। यहां आधिकारिक ZFM द्वारा जारी किए गए कुछ सबसे अधिक उपयोग किए जाने वाले टेम्पलेट क्लासरूम का परिचय दिया गया है, ताकि उपयोगकर्ता अपनी रणनीति को जल्दी से बना सकें।

जावास्क्रिप्ट डिजिटल मुद्रा ट्रेडिंग और कमोडिटी फ्यूचर ट्रेडिंग क्लासरूम डिफ़ॉल्ट रूप से अंतर्निहित हैं और उन्हें कॉपी करने की आवश्यकता नहीं है। अन्य टेम्पलेट क्लासरूम https://www.fmz.com/square/20/1 पर पाये जा सकते हैं। टेम्पलेट क्लासरूम को कॉपी और सहेजा जा सकता है और अपनी रणनीति बनाते समय उपयोग करने के लिए चयनित क्लासरूम का उपयोग किया जा सकता है।

जावास्क्रिप्ट टेम्पलेट फ़ंक्शन$शुरुआत के लिए, पायथनextशुरुआत

डिजिटल मुद्रा लेन-देन वर्गीकरण

स्रोत कोड पताःhttps://www.fmz.com/strategy/10989 , पहले से ही अंतर्निहित है, कॉपी करने की कोई आवश्यकता नहीं है। विशिष्ट कार्यों के कार्यान्वयन के तरीके सीधे स्रोत को संदर्भित कर सकते हैं।

खाता प्राप्त करेंः

$.GetAccount(e) Log($.GetAccount()); // 获取账户信息, 带容错功能 Log($.GetAcccount(exchanges[1]));

इस लेख को डाउनलोड करेंः

$.Buy/Sell(e, amount) $.Buy(0.3); // 主交易所买入0.3个币 $.Sell(0.2); // 主交易所卖出0.2个币 $.Sell(exchanges[1], 0.1); // 次交易所卖出0.1个币 $.CancelPendingOrders(e, orderType) $.CancelPendingOrders(); // 取消主交易所所有委托单 $.CancelPendingOrders(ORDER_TYPE_BUY); // 取消主交易所所有的买单 $.CancelPendingOrders(exchanges[1]); // 取消第二个交易所所有订单 $.CancelPendingOrders(exchanges[1], ORDER_TYPE_SELL); // 取消第二个交易所所有的卖单

क्रॉस-रिजर्वः

$.Cross(periodA, periodB) / $.Cross(arr1, arr2); var n = $.Cross(15, 30); var m = $.Cross([1,2,3,2.8,3.5], [3,1.9,2,5,0.6]) 如果 n 等于 0, 指刚好15周期的EMA与30周期的EMA当前价格相等 如果 n 大于 0, 比如 5, 指15周期的EMA上穿了30周期的EMA 5个周期(Bar) 如果 n 小于 0, 比如 -12, 指15周期的EMA下穿了30周期的EMA 12个周期(Bar) 如果传给Cross不是数组, 则函数自动获取K线进行均线计算 如果传给Cross的是数组, 则直接进行比较

$.withdraw(e, currency, address, amount, fee, password) निकासी फ़ंक्शनः

$.withdraw(exchange, "btc", "0x.........", 1.0, 0.0001, "***")

कमोडिटी फ्यूचर ट्रेडिंग क्लासरूम

कमोडिटी फ्यूचर्स ट्रेडिंग क्लासरूम का उपयोग स्थिर है, इसका उपयोग करने की सिफारिश की जाती है। स्रोत कोड का पताः https://www.fmz.com/strategy/12961 。 यह अंतर्निहित है, इसे कॉपी करने की आवश्यकता नहीं है।

सीटीए

  • फिक्स्ड ड्राइव स्वचालित रूप से सूचकांक को मुख्य धारा में मैप करता है
  • स्वचालित रूप से स्थानांतरण को संसाधित करता है
  • रिटेक्शन को मैप किया जा सकता है जैसे कि rb000/rb888 जो कि rb सूचकांक लेनदेन को मुख्य धारा में मैप करता है
  • आप अन्य अनुबंधों को भी मैप कर सकते हैं, जैसे कि rb000/MA888 जो कि rb सूचकांक की K लाइन को देखता है और MA मुख्य शक्ति को लगातार व्यापार करता है
function main() { $.CTA("rb000,M000", function(r, mp) { if (r.length < 20) { return } var emaSlow = TA.EMA(r, 20) var emaFast = TA.EMA(r, 5) var cross = $.Cross(emaFast, emaSlow); if (mp <= 0 && cross > 2) { Log("金叉周期", cross, "当前持仓", mp); return 1 } else if (mp >= 0 && cross < -2) { Log("死叉周期", cross, "当前持仓", mp); return -1 } }); }

क्लास लाइब्रेरी कॉल उदाहरण

function main() { var p = $.NewPositionManager(); p.OpenShort("MA609", 1); p.OpenShort("MA701", 1); Log(p.GetPosition("MA609", PD_SHORT)); Log(p.GetAccount()); Log(p.Account()); Sleep(60000 * 10); p.CoverAll("MA609"); LogProfit(p.Profit()); Log($.IsTrading("MA609")); // 多品种时使用交易队列来完成非阻塞的交易任务 var q = $.NewTaskQueue(); q.pushTask(exchange, "MA701", "buy", 3, function(task, ret) { Log(task.desc, ret) }) while (true) { // 在空闲时调用poll来完成未完成的任务 q.poll() Sleep(1000) } }

चित्र संग्रह

चूंकि मूल आरेख फ़ंक्शन अधिक जटिल है, और अगले ट्यूटोरियल में प्रस्तुत किया जाएगा, इसलिए शुरुआती लोगों को सीधे आरेख वर्ग पुस्तकालय, बहुत ही सरल रेखाचित्र रेखाचित्र, K रेखाचित्र आदि का उपयोग करने की सलाह दी जाती है। एफएमजेड में एक सरल वर्ग पुस्तकालय है, जिसे नीति संपादन पृष्ठ पर देखा जा सकता है, यदि कोई अंतर्निहित नहीं है, तो उपयोगकर्ता को अपनी प्रतिलिपि बनाने और सहेजने की आवश्यकता होती है।

img

जावास्क्रिप्ट चित्रकारी नक्शा पुस्तकालय में कॉपी करें
पायथन चित्र रेखा वर्ग को फिर से बनाना

उदाहरण के लिएः

function main() { while (true) { var ticker = exchange.GetTicker() if (ticker) { $.PlotLine('Last', ticker.Last) //可以同时画两条线,Last是这条线的名字 $.PlotLine('Buy', ticker.Buy) } Sleep(6000) } }

नीति पैरामीटर सेट करें

नीति संपादक के नीचे एक नीति पैरामीटर सेटिंग है, जो नीति के वैश्विक चर के बराबर है, जिसे कोड के किसी भी स्थान पर पहुँचा जा सकता है। नीति पैरामीटर को रीयल-डिस्क इंटरफेस में संशोधित किया जा सकता है, जो पुनः आरंभ करने पर लागू होता है। इसलिए कुछ चर को पैरामीटर के रूप में सेट किया जा सकता है, बिना नीति को संशोधित किए पैरामीटर को बदल सकता है।
img

  • चर का नामउदाहरण के लिए, ऊपर दिए गए नंबर, स्ट्रिंग, कॉमबॉक्स आदि का उपयोग सीधे रणनीति समूह में किया जा सकता है।
  • वर्णन करना: पैरामीटर का नाम नीति इंटरफ़ेस में, पैरामीटर का अर्थ समझने में मदद करता है।
  • टिप्पणी: पैरामीटर का विस्तृत विवरण, जो माउस पर रुकने पर प्रदर्शित होता है।
  • प्रकार: इस पैरामीटर का प्रकार, नीचे विस्तार से बताया गया है।
  • डिफ़ॉल्टइस पैरामीटर का डिफ़ॉल्ट मान:

स्ट्रिंग प्रकार और संख्या प्रकार को समझने में आसान है और सबसे अधिक उपयोग किया जाता है। ड्रॉडाउन ड्रॉडाउन विकल्पों को प्रदर्शित करता है, जैसे कि ड्रॉडाउन SYMBOL पैरामीटर को सेट करनाBTC|USDT|ETH, यदि पैरामीटर पृष्ठ पर ड्रॉप डाउन में USDT का चयन किया जाता है, तो नीति में SYMBOL का मान USDT का सूचकांक 1 होगा। एक विकल्प एक वैकल्पिक बॉक्स है, जो सही है, अन्यथा गलत है।

पैरामीटर के लिए और भी कई सेटिंग्स उपलब्ध हैं, देखें https://www.fmz.com/bbs-topic/1306

रणनीति बैकटेस्टिंग

एक बार जब आप एक रणनीति की मात्रा को पूरा कर लेते हैं, तो आप अपनी रणनीति का परीक्षण करने के लिए ऐतिहासिक डेटा का उपयोग कर सकते हैं और देख सकते हैं कि आपकी रणनीति ऐतिहासिक डेटा में कितनी कमाई करती है। निश्चित रूप से, परिणाम केवल संदर्भ के लिए हैं। एफएमजेड क्वांटिटेटिव प्लेटफॉर्म डिजिटल मुद्रा नकद, वायदा, बिटमेक्स टिकाऊ अनुबंध, और कमोडिटी वायदा का समर्थन करता है, जिसमें डिजिटल मुद्रा मुख्य रूप से मुख्यधारा की किस्मों का समर्थन करती है।
जावास्क्रिप्ट को ब्राउज़र में रीसेट किया जाता है, पाइथन को होस्ट पर रीसेट करने की आवश्यकता होती है, और प्लेटफ़ॉर्म को सार्वजनिक होस्टिंग प्रदान करने के लिए उपयोग किया जाता है। मैक भाषा को रीसेट करने के लिए और अधिक मापदंडों की आवश्यकता होती है, मैक भाषा दस्तावेज़ देखें।

प्रतिक्रिया तंत्र

onbar रीमेकिंग तंत्र K लाइन पर आधारित है, यानी प्रत्येक K लाइन एक रीमेकिंग समय बिंदु उत्पन्न करती है, इस समय बिंदु पर वर्तमान K लाइन के उच्च और निम्न खरीद मूल्य, लेन-देन की मात्रा और अन्य जानकारी प्राप्त की जा सकती है, साथ ही इस समय बिंदु से पहले की ऐतिहासिक K लाइन जानकारी। इस तंत्र का नुकसान स्पष्ट हैः एक K लाइन पर, केवल एक बार खरीद और बिक्री उत्पन्न की जा सकती है, आमतौर पर कीमत K लाइन के समापन मूल्य है। और एक K लाइन केवल चार कीमतों को उच्च और निम्न तक प्राप्त कर सकती है, इसलिए एक लाइन के भीतर कीमत कैसे बदलती है, यह कोई जानकारी नहीं है कि उच्चतम मूल्य पहले, निम्नतम मूल्य पहले या पहले कैसे होता है। उदाहरण के लिए, 1 घंटे के K लाइन से, वास्तविक समय डिस्क निश्चित रूप से हर कुछ सेकंड में स्थिति की जानकारी प्राप्त करती है, और व्यापार के निर्देश भी डिस्क में जारी किए जाते हैं, न कि लाइन के अंत की प्रतीक्षा करने के लिए।

FMZ प्लेटफार्म दो प्रकार के एनालॉग-स्तरीय और फिक्स्ड-डिस्क-स्तरीय प्रतिक्रिया को पुनः प्राप्त करता है। एनालॉग-स्तरीय प्रतिक्रिया 14 प्रतिक्रिया समय बिंदुओं को उत्पन्न करेगी, प्रत्येक आधारभूत K-लाइन चक्र पर, जो कि आधारभूत K-लाइन चक्र के आधार पर उत्पन्न होती है।**जबकि वास्तविक डिस्क स्तर वास्तविक संग्रहण टिक है, जो लगभग एक सेकंड में एक बार होता है, जो वर्तमान में वास्तविक गहराई का समर्थन करता है (इसमें 20 फ़ील्ड शामिल हैं), वास्तविक लेनदेन के लिए।**डेटा की मात्रा बहुत बड़ी है, और प्रतिक्रिया की गति धीमी है, इसलिए विशेष रूप से लंबे समय तक प्रतिक्रिया नहीं की जा सकती है। एफएमजेड की प्रतिक्रिया तंत्र रणनीति को एक के-लाइन पर कई बार व्यापार करने में सक्षम बनाता है, जो केवल समापन मूल्य लेनदेन की स्थिति से बचता है, और अधिक सटीक और प्रतिक्रिया की गति को ध्यान में रखता है।

पुनरावृत्ति के लिए नीति ढांचे और रीयल डिस्क के समान है, एक मृत लूप है। चूंकि पुनरावृत्ति अलग-अलग पुनरावृत्ति बिंदुओं पर कूदती है, इस समय नींद का उपयोग किए बिना किया जा सकता है, एक चक्र के अंत में स्वचालित रूप से अगले समय बिंदु पर कूद जाएगा। लेकिन पायथन को प्रोग्रामिंग तंत्र के कारण एक को मजबूर करने की आवश्यकता हैSleep(10)और यह भी कहा गया है कि

फ़ोटोग्राफ़

रिटेस्टिंग इंजन उपयोगकर्ता के आदेश मूल्य और रिटेस्टिंग समय के आधार पर बोली मूल्य को जोड़ता है, यदि खरीद मूल्य एक बेचने से अधिक है, तो एक लेनदेन बेचने के लिए। यदि लेनदेन नहीं किया जा सकता है, तो एक सूची बनाई जाएगी। लेनदेन की गारंटी देने के लिए स्लाइडिंग बिंदु की आवश्यकता होती है। यदि रिटेस्टिंग के दौरान कोई स्थिति नहीं खुलती है या समतल नहीं होती है, तो यह जांचें कि क्या कोई अनसुलझा आदेश के कारण स्थिति फ्रीज है।

पृष्ठ सेटिंग्स का पता लगाएं

img

    1. समीक्षा पृष्ठ का चयन करें, बाईं ओर नीति संपादन पृष्ठ है <unk>
    1. समय जब यह शुरू और समाप्त होता है, क्योंकि डेटा अपूर्ण है, यह डेटा के समय से सीधे शुरू हो सकता है।
    1. पुनर्विचारGetRecords()फ़ंक्शन की डिफ़ॉल्ट अवधि, आप कोड में अवधि पैरामीटर भी निर्दिष्ट कर सकते हैं।
    1. प्रतिक्रिया तंत्र का चयन
    1. दिखाएँ या छुपाएँ और बहु-उपयोगी सेटिंग्स।
    1. अधिकतम लॉग संख्या, रिटर्न डेटा संख्या, चार्ट डेटा संख्या आदि, ताकि डेटा की अधिकता को रोकने के लिए ब्राउज़र को बंद कर दिया जाए।
    1. नीचे की रेखाओं को K-लाइन चक्र के आधार पर उत्पन्न किया जाता है।
    1. लेन-देन स्लाइडिंग
    1. त्रुटि सहनशीलता, एपीआई अनुरोधों की त्रुटि की नकल करता है, नीति की त्रुटि सहनशीलता की जांच करता है।
    1. क्या ट्रेडिंग आइकन को चित्रित किया गया है, यदि TA सूचक फ़ंक्शन का उपयोग किया गया है, तो यह आइकन पर प्रदर्शित होगा, और खरीदारी को भी चिह्नित किया जाएगा।
    1. शुल्क सेटअप
    1. एक्सचेंजों को जोड़ें - ट्रेडिंग जोड़े और संपत्ति
    1. एक-कुंजी अनुकूलन पैरामीटर का समर्थन करता है यदि पैरामीटर संख्यात्मक है, तो स्वचालित रूप से एक निश्चित सीमा के अनुसार पैरामीटर को फिर से जांचें।

वास्तविक डिस्क से अलग

    1. केवल GetTicker और GetRecords ही प्रतिक्रिया के समय प्रभावी हैं, अन्य जैसे कि गहराई और लेनदेन इतिहास वास्तविक नहीं है ((क्योंकि डेटा की मात्रा बहुत बड़ी है, रीयल-डिस्क स्तर की प्रतिक्रिया वर्तमान में इन आंकड़ों का समर्थन करती है, लेकिन केवल हाल के आंकड़े) ।)
    1. जोड़े गए एक्सचेंजों को अलग-अलग खातों के रूप में देखा गया है, जो वर्तमान में ट्रेडिंग जोड़े को बदलने का समर्थन नहीं करते हैं। इसलिए एक खाते में दो ट्रेडिंग जोड़े संचालित नहीं किए जा सकते हैं।
    1. फीडबैक में नेटवर्क अनुरोधों का उपयोग नहीं किया जा सकता।
    1. आईओ एक्सटेंशन का उपयोग करने में असमर्थता, केवल सबसे बुनियादी एपीआई को संचालित करना।
    1. केवल मानक डेटा प्राप्त किया जा सकता है, इन्फो जैसे फिक्स्ड-डिस्क डेटा नहीं है।
    1. एक बार फिर से जांच करने के बाद, आप को आदेशों को फ्रीज करने की आवश्यकता हो सकती है
    1. कमोडिटी फ्यूचर रिटर्न्स बाजार मूल्य सूची का समर्थन नहीं करते हैं

नीतिगत त्रुटियां और आम गलतियाँ

पहले कहा गया है कि रीयल-डिस्क में एपीआई का उपयोग करने के लिए एक विफलता के साथ वापसी की संभावना हैnullइस प्रकार, यदि आप किसी भी डेटाबेस में किसी भी डेटाबेस में किसी भी डेटाबेस का उपयोग कर रहे हैं, तो यह एक त्रुटि का कारण बन सकता है और हार्ड डिस्क को बंद कर सकता है, इसलिए रणनीति को त्रुटि-सहिष्णु होना चाहिए।

आम तौर पर इस्तेमाल किया जाने वाला त्रुटि-सहायक तरीका

सामान्य गलत कारण:

  • एपीआई एक्सेस नेटवर्क त्रुटि, इंटरफेस एक्सेस ओवरटाइम null लौटाता है, इस समय उपयोग त्रुटि रिपोर्ट करेगा।
  • एक्सचेंज प्रतिबंध त्रुटि, जैसे कि आईपी प्रतिबंध, ऑर्डर सटीकता, एक्सेस आवृत्ति, पैरामीटर त्रुटि, अपर्याप्त संपत्ति, बाजार व्यापार नहीं कर सकता, समाप्त ऑर्डर को रद्द कर सकता है, आदि। एपीआई दस्तावेज़ को त्रुटि कोड के अनुसार विशेष रूप से खोजा जा सकता है।
  • एक्सचेंज ने कभी-कभी गलत डेटा लौटाया, जैसे कि रिक्त गहराई, देरी से खाता जानकारी, देरी से ऑर्डर की स्थिति आदि।
  • प्रोग्राम लॉजिक त्रुटि

एपीआई का उपयोग करने से पहले, यह निर्धारित करना आवश्यक है कि क्या यह शून्य है या नहीं, और नीचे एक केंद्रीकृत सामान्य विधि दी गई हैः

//1.判断为null进行处理 var ticker = exchange.GetTicker(); while(ticker == null){ Log('ticker 获取出错'); ticker = exchange.GetTicker(); } Log(ticker.Last); // 2.判断不为null再进行引用 var ticker = exchange.GetTicker(); if(!ticker){ Log(ticker.Last); } // 3._C()函数重试 var ticker = _C(exchange.GetTicker); Log(ticker.Last); // 4. try catch容错 try{ var ticker = exchange.GetTicker(); Log(ticker.Last); } catch(err){ Log('ticker 获取出错'); }

यदि आप गलत जानकारी प्राप्त करना चाहते हैं, तो इसका उपयोग करें।GetLastError(), पिछले त्रुटि संदेश स्ट्रिंग को लौटाता है, जो त्रुटि के लिए अंतर प्रसंस्करण प्रदान करता है.

FAQ

फोरम के शीर्षलेख में कई सामान्य गलतियाँ हैं, जो यहां संक्षेप में प्रस्तुत की गई हैंः https://www.fmz.com/bbs-topic/1427 。 यहाँ कुछ सारांश दिए गए हैं, यदि आपको कोई समस्या हो तो Ctrl+F खोजें।

संरक्षक की नियुक्ति कैसे करें?

अधिक जानकारी के लिए, "प्रबंधक जोड़ें" पर जाएँ

क्या हम किसी को अपनी रणनीति बता सकते हैं?

https://www.fmz.com/markets पर कुछ लोगों ने प्रतिलेखन सेवाएं प्रदान की हैं, या समूह में परामर्श किया है।

सभी इंटरफेस का उपयोग करने के लिए समय समाप्त हो गया

इसका मतलब है कि एक्सचेंज के इंटरफेस का समय समाप्त हो गया है, यदि कभी-कभी ऐसा होता है तो यह समस्या नहीं है, यदि यह संकेत दिया जाता है कि नेटवर्क तक पहुंच नहीं है, तो विदेशी सर्वर का उपयोग करने की आवश्यकता है।

त्रुटि

प्रतिक्रिया प्रणाली रिपोर्टिंग त्रुटि, आम तौर पर रणनीति के लिए त्रुटि लिखना, जब कोई स्टॉक नहीं है या स्टॉक की कम संख्या नहीं है, तो स्टॉक को कम करने का प्रयास करें, जो रिपोर्टिंग त्रुटि का कारण बनता है।

symbol not set

फ्यूचर्स एक्सचेंजों के लिए, कोड में कोई अनुबंध सेट नहीं किया गया है, देखें exchange.SetContractType फ़ंक्शन

BITMEX 429 त्रुटि,{"error":{"message": "Rate limit exceeded retry in 1 seconds"...}}

एक्सचेंजों के इंटरफेस तक पहुंच की आवृत्ति बहुत अधिक है।

{"status":6004,"msg":"timestamp is out of range"}

सर्वर समय सीमा से परे सर्वर समय को अद्यतन करने की आवश्यकता है, बहुत विचलित नहीं होना चाहिए

GetOrder(455284455): Error: invalid order id or order cancelled.

कुछ एक्सचेंजों ने ऑर्डर रद्द कर दिए हैं, और एक्सचेंजों ने इस ऑर्डर की जानकारी को बनाए नहीं रखा है, और इसे प्राप्त नहीं किया जा सकता है।

GetOrders: 400: {"code":-1121,"msg":"Invalid symbol."}

अमान्य लेन-देन जोड़ी, जांचें कि क्या लेन-देन जोड़ी सेटअप त्रुटि है.

Secret key decrypt failed

API KEY को पार्स करने में विफल, यदि APIKEY को कॉन्फ़िगर करने के बाद FMZ पासवर्ड को संशोधित किया गया है, तो FMZ में एक्सचेंज पेज जोड़ने और एक्सचेंज APIKEY को फिर से कॉन्फ़िगर करने का प्रयास करें।

Signature not valid: Invalid submission time or incorrect time format [अवैध प्रस्तुत समय, या समय प्रारूप त्रुटि]

Linux सर्वर का उपयोग करने की सलाह दी जाती है, या उन विंडोज सिस्टम पर समय सिंक्रनाइज़ेशन सॉफ़्टवेयर स्थापित किया जाता है जिनमें समस्या होती है।

तो, क्यों एक वैश्विक एजेंट स्थापित किया गया है, और प्रशासक को एक्सचेंज एपीआई तक पहुंच नहीं है?

वैश्विक एजेंटों के पास एजेंट होस्टिंग नेटवर्क पोर्ट नहीं हैं, जो विलंबता के कारण बेहतर है कि वे अपने सर्वरों को विदेशों में तैनात करें

यह कैसे संभव है कि रणनीति को स्थानीय रूप से संग्रहीत किया जाए, अपलोड किए गए एफएमजेड पर नहीं?

पायथन का उपयोग स्थानीय फ़ाइलों को आयात करने के लिए किया जा सकता है, जो एफएमजेड के एपीआई के अनुसार लिखी जाने वाली रणनीतियों के अनुसार फाइलों को सहेजते हैं और अपने सर्वर पर निष्पादन पथ के तहत निष्पादन को सीधे पढ़ सकते हैं।

#!python2.7 def run(runfile): with open(runfile,"r") as f: exec(f.read()) def main(): run('my.py')

एक्सचेंजों के परीक्षण नेटवर्क का उपयोग कैसे करें या एपीआई आधार पते को कैसे बदलें

Exchange.SetBase () का उपयोग करके सीधे संबंधित API आधार पते पर स्विच करें। जैसेः

exchange.SetBase("https://www.okex.me")
Related Recommendations
Comment
All comments (27)

    api

    3 years ago

    如何在本地实现策略运行呢?我写了一个简单的Log输出语句,并且按照文末的操作。
    第一步,先用一台笔记本作为服务器,运行托管者程序;
    第二步,写一个简单的Log输出信息的test.py程序(FMZ 的API接口函数);
    第三步,按文末那样,写个runfile,通过run.py调用test.py运行。 img

    4 years ago

    我买的网易云量化交易课程怎么没了,现在去哪里看

    5 years ago

    谢谢

    5 years ago

    many

    5 years ago

    hi

    5 years ago

    学习ing

    5 years ago

    有一个小的文字错误,GetAccount 获取账户 介绍中,FrozenStocks应该是冻结余额而不是可用余额吧

    5 years ago

    改了

    5 years ago

    有没有做BTB的实盘教程,

    a year ago

    大佬麻烦问下咱们有官方交流群吗?有时候遇到问题不知道该在哪提问

    5 years ago

    加首页微信,拉你入群

    5 years ago

    加我进群,我的实盘执行不起来

    a year ago

    getorder outtime 获取订单超时,okex的交易所,怎么办

    5 years ago

    再次获取

    5 years ago

    担保资产率获取不到吗,到0%会被强制平仓的担保资产率

    5 years ago

    原始信息里有,可以用GetRawJSON或者查看字段里的info信息

    5 years ago

    我是看1分钟k线图操作的,所以Python死循环的sleep time 可以设置为0.1s,也就是sleep(100)吗,我看你其中写过一个sleep(10),也就是0.1s不会超过huobi HM的API限制吗?

    6 years ago

    exchange.SetDirection("closebuy"); //如果是永续合约,直接设置exchange.SetDirection("sell")

    这儿我试了OKex的永续合约,如果设置成 sell,直接开空了,平不是平多

    6 years ago

    exchange.SetDirection("closebuy"); //如果是永续合约,直接设置exchange.SetDirection("sell")

    这儿我试了OKex的永续合约,如果设置成 sell,直接开空了,平不是平多

    6 years ago

    有些永续合约允许双向持仓的,需要设置平仓。我更新一下,原来只有bitmex

    6 years ago

    不错不错,还有管理回复。。我发现代码里好多拼写错误,哈哈

    6 years ago

    GetOrders 的代码里面有两个拼写错误。。。一个是 function写成了 fuction,另一个是for循环的条件里 ; 打成了 ,

    6 years ago

    嗯嗯,已改正,感谢指出错误

    6 years ago

    是我错了。。。
    exchange.Buy(-1, 0.5),交易对是ETH_BTC,市价单代表买入0.5BTC的ETH
    exchange.Buy(price, 0.5),如果是这种限价单,则代表用price的价格买入 0.5ETH

    6 years ago

    exchange.Buy(-1, 0.5),交易对是ETH_BTC,则代表市价买入0.5BTC的ETH

    这里应该是【代表市价买入0.5ETH】

    6 years ago
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)