एफएमजेड शुरुआती ट्यूटोरियल

लेखक:घास, बनाया गयाः 2019-04-09 11:29:07, अद्यतन किया गयाः 2024-02-06 17:35:38

[TOC]

img

1.एफएमजेड प्लेटफॉर्म से प्रारंभ करें

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

पूरे ट्यूटोरियल को सीखने के बाद, आप जानते हैं कि एफएमजेड कैसे काम करता है और कुछ बुनियादी रणनीतियों को लिखने में सक्षम होगा।

1.1 एफएमजेड प्लेटफॉर्म के बारे में

एफएमजेड प्लेटफार्म क्या है?

एफएमजेड क्रिप्टोक्यूरेंसी व्यापारियों के लिए एक स्वचालित ट्रेडिंग प्लेटफॉर्म है जिसमें कई बिटकॉइन / एथ / अल्टकोइन एक्सचेंज बाजारों का समर्थन है।

एफएमजेड आपके लिए क्या कर सकता है?

आप सीख सकते हैं कि कैसे अपने बॉट लिखने के लिए ((रणनीतियाँ) से हमारे रणनीतियों वर्ग जिसमें बहुत सारे खुला स्रोत कोड शामिल हैं, दूसरों के साथ अपनी रणनीतिs कोड साझा करें, किसी भी समय पेशेवर मदद के लिए पूछना, कई एक्सचेंजों पर अपनी रणनीति चलाने, कंप्यूटर या सेल फोन के साथ वेबसाइट पर अपने बॉट को नियंत्रित, अपनी रणनीतियों को बेचने के लिए यदि आप चाहते हैं, हमारे में कई अन्य ऑटो व्यापार प्रेमियों के साथ संवादसमूहएक शब्द में कहें तो, एफएमजेड उन लोगों के लिए एक आदर्श मंच है जो स्वचालित व्यापार करना चाहते हैं।

एफएमजेड कौन से क्रिप्टोकरेंसी एक्सचेंजों का समर्थन करता है?

FMZ लगभग सभी एक्सचेंजों का समर्थन करता है जो लोकप्रिय हैं, जैसे किBinance, Bitfinex, Bitstamp, OKEX, Huobi, Poloniex, आदि पर भी आप वायदा व्यापार कर सकते हैंOKEXऔरBitMEX. पर पूर्ण समर्थन सूची देखेंएपीआईआपको केवल एक रणनीति लिखने की आवश्यकता है और बिना किसी परिवर्तन के सभी एक्सचेंजों पर इसे चलाएं।

एफएमजेड किस प्रोग्रामिंग भाषा का समर्थन करता है?

एफएमजेड आपकी रणनीतियों को कोड करने के लिए जावास्क्रिप्ट, पायथन, सी ++ (जावास्क्रिप्ट और पायथन की सिफारिश की जाती है) का समर्थन करता है। पूरी भाषाओं का समर्थन करने से लाभ उठाते हुए ((एक कस्टम भाषा केवल एक मंच के लिए उपयोग की जा सकती है), आप अपने प्रोग्रामिंग कौशल में सुधार कर सकते हैं और साथ ही रणनीतियों को लिखना सीख सकते हैं।

क्या आपका एपीआई कुंजी सुरक्षित है?

वास्तव में. आपके एपीआई-कुंजी एन्क्रिप्शन के बाद सहेजे जाते हैं. यहाँ यह कैसे काम करता है.

  • आपको FMZ पासवर्ड दर्ज करने की आवश्यकता है जब कुंजी जोड़ते हैं. वेब ब्राउज़र आपके एपीआई कुंजी एन्क्रिप्ट करेगा और एन्क्रिप्टेड कुंजी को FMZ सर्वर को पास करेगाhttps.
  • जब आप अपने सर्वर या कंप्यूटर पर डॉकर चलाते हैं तो आपको FMZ पासवर्ड दर्ज करना होगा.
  • जब आप एक बॉट शुरू करते हैं तो FMZ आपके डॉकर को https का उपयोग करके एन्क्रिप्टेड कुंजी भेजेगा. डॉकर कुंजी प्राप्त करने के लिए डिक्रिप्ट करेगा.
  • FMZ आपका पासवर्ड नहीं सहेजता है (केवल पासवर्ड हैश) तो हम भी आपकी एपीआई कुंजी नहीं जानते हैं।
  • आपको अपने पासवर्ड और डॉकर सर्वर की सुरक्षा करने की आवश्यकता है. दूसरा सत्यापन लॉगिन FMZ का उपयोग करना सबसे अच्छा है.

वर्तमान सुविधा सूचीः

  • 1.क्रॉस-प्लेटफ़ॉर्म, सभी प्रमुख क्रिप्टोक्यूरेंसी एक्सचेंजों के लिए समर्थन जल्द ही अधिक आ रहा है
  • 2.सिमुलेटेड एक्सचेंज के लिए समर्थन। https://wex.app/
  • 3.एक प्रभावी सिमुलेट बैकटेस्टिंग प्रणाली है।
  • 4.ई-मेल भेजने, अपने टेलीग्राम खाते में संदेश भेजने के लिए समर्थन।
  • 5.वेब आधारित नियंत्रण जो आपके फोन के माध्यम से पहुँचा जा सकता है।
  • 6.पायथन\सी++\जावास्क्रिप्ट प्रोग्रामिंग के लिए समर्थन।
  • 7. लागत बहुत कम है। 0.125 RMB प्रति घंटे, लगभग 0.018 डॉलर।
  • 8.Noएपीआई-की या पासवर्ड हमारे सर्वर पर सहेजे जाते हैं। एफएमजेड किसी भी सुरक्षा समस्या के बिना चार साल से अधिक समय से चल रहा है।

1.2 एफएमजेड प्लेटफॉर्म का उपयोग करने के लिए एक त्वरित शुरुआत

एक बॉट चलाने के लिए, आप एक रणनीति की जरूरत है, एक विनिमय जोड़ें, पहले एक डॉकर तैनात. डॉकर अपने स्वयं के कंप्यूटर या सर्वर पर चल रही अपनी रणनीतिs निष्पादक है.

मुख्य पृष्ठ पर एक त्वरित नज़र

img

  • 1.आपका मुख्य नियंत्रण पृष्ठ
  • 2. अपने सभी बॉट्स का प्रबंधन करें (स्टार्ट,स्टॉप,डिलिट,ओपन आदि)
  • 3.अपनी सभी रणनीतियों का प्रबंधन करें
  • 4. अपने डॉकर को तैनात और प्रबंधित करें
  • 5.नए एक्सचेंजों को जोड़ें
  • 6.आपने जोड़े गए एक्सचेंजों पर मैनुअल ट्रेडिंग
  • 7. अपने बिल का भुगतान करें
  • 8.यहां कोई भी प्रश्न पूछें
  • 9.एफएमजेड का सिमुलेटेड एक्सचेंज
  • 10.डिबग टूल जहां आप एक बॉट शुरू किए बिना कोड का एक ब्लॉक चला सकते हैं।
  • 11.सभी प्रकार के संदेश
  • 12.ओपन-सोर्स और चार्जिंग रणनीतियों की सूची वाला रणनीति वर्ग
  • 13.लाइव रोबोट जहां सभी लाइव चल रहे रोबोट सूचीबद्ध हैं।
  • 14.फोरम जहां आप किसी भी संबंधित प्रश्न पर चर्चा करने के लिए एक पोस्ट पोस्ट कर सकते हैं।
  • 15. किसी से आपके लिए कोड लिखने या दूसरों के लिए यह सेवा प्रदान करने के लिए कहें।
  • 16.विनिमय और एजेंसियों के लिए उत्पाद।
  • 17.एपीआई प्रलेखन।
  • 18. कुछ उपयोगी उपकरण, स्वयं जांचें।
  • 19.आपके खाते की जानकारी।

एक विनिमय जोड़ें

में जोड़ेंhttps://www.fmz.com/m/add-platform, या क्लिक करेंPlatformलेबल। आपकी एक्सेस कुंजी और गुप्त कुंजी क्रिप्टोक्यूरेंसी एक्सचेंज पर लागू की जा सकती है। एपीआई-की का उपयोग एक्सचेंज से व्यापार और निजी जानकारी प्राप्त करने के लिए किया जाता है। हम अपने सर्वर पर कोई एपीआई-की या पासवर्ड नहीं सहेजते हैं। आप एफएमजेड पर पंजीकरण कर सकते हैंसिमुलेटेड एक्सचेंजऔर इसे परीक्षण के लिए जोड़ें।

img

एक डॉकर तैनात करें

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

खिड़कियों के लिए, यह काफी आसान है, बस निर्देशों का पालन करेंhttps://www.fmz.com/m/add-node

img

लिनक्स के लिए, आप हमारी वेबसाइट पर एक वीपीएस किराए पर ले सकते हैं, जो डॉकर को स्वचालित रूप से तैनात करेगा। यहां अपने स्वयं के लिनक्स सर्वर पर तैनात करने के लिए चरण दिए गए हैं (अनुशंसित):

  • 1.अमेज़न या गूगल से क्लाउड सर्वर (वीपीएस) खरीदें, सबसे कम और सबसे सस्ता कॉन्फ़िगरेशन पर्याप्त है। आप अक्सर लंबे समय तक निःशुल्क परीक्षण कर सकते हैं।
  • 2. अपने सर्वर में लॉग इन करें, अपने सर्वर प्रदाता के निर्देशों का पालन करें या इसे गूगल करें।
  • 3.आपके सिस्टम के संस्करण से मेल खाने वाला डॉकर चुनें, ज्यादातर समय, यह 64बिट है।
  • 4.सेंटो के लिए, दौड़ेंwget www.fmz.com/dist/robot_linux_amd64.tar.gz, कमांड नहीं मिला? पहले स्थापित करेंyum install wget -y.
  • 5.Run tar -xzvf robot_linux_amd64.tar.gzअनज़िप करने के लिए।
  • 6.Run ./robot -s node.fmz.com/xxxxx -p -p yourFMZpassword, आप कुछ इस तरह देखना चाहिए2018/07/05 05:04:10 Login OK, SID: 62086, PID: 7226, Name: host.localdomain, जिसका अर्थ है कि सब कुछ काम कर रहा है।node.fmz.com/xxxxxप्रत्येक उपयोगकर्ता के लिए अद्वितीय है, पर अपने स्वयं के खोजेंhttps://www.fmz.com/m/add-node.
  • 7. अब डॉकर पृष्ठभूमि में नहीं चलाया जाता है, यदि आप SHH क्लाइंट बंद करते हैं, तो डॉकर बंद हो जाएगा। प्रेस करेंctrl + Cडॉकर को रोकने के लिए।
  • 8.Run nohup ./robot -s node.fmz.com/xxxxx -p yourFMZpassword &पृष्ठभूमि में चलाने के लिए. यह कदम भी द्वारा किया जा सकता हैScreen command.
  • 9. जाँच करेंhttps://www.fmz.com/m/nodes, अगर सब कुछ ठीक है, आप वहाँ तैनात डॉकर पा सकते हैं।

एक रणनीति लिखें

आपको अपनी रणनीति लिखनी चाहिए या वर्ग से खरीदना चाहिए. यहाँ हम एक सरल जावास्क्रिप्ट रणनीति का उपयोग करेंगे एक डेमो के रूप में यह दिखाने के लिए कि संपादन पृष्ठ का उपयोग कैसे करें. रणनीति से कॉपी की जा सकती हैhttps://www.fmz.com/strategy/125482. यह ट्यूटोरियल जावास्क्रिप्ट का उपयोग करने के तरीके को कवर नहीं करेगा क्योंकि आप ऑनलाइन बहुत सारे ट्यूटोरियल पा सकते हैं.

img

  • 1. अपना कोड संपादित करें
  • 2.Backtesting, हम इस भाग को एक मध्यवर्ती ट्यूटोरियल पर कवर करेंगे
  • 3.आपके कोड के प्रोग्रामर भाषा, जावास्क्रिप्ट इस डेमो में इस्तेमाल किया गया था
  • 4.शीर्षक, चीनी और अंग्रेजी शीर्षक को विभाजित करता है, जो दिखाया जाएगा, FMZ वेबसाइट की भाषा द्वारा तय किया जाता है
  • 5.आपकी रणनीति का प्रकार, डिफ़ॉल्ट आम है
  • 6.आपकी रणनीति की श्रेणी। यदि आपके पास बहुत अधिक हैं तो आप अपनी रणनीतियों को विभिन्न श्रेणियों में विभाजित कर सकते हैं।
  • 7.हमारी वेबसाइट के बजाय अपने स्वयं के आईडीई से अपने कोड को दूरस्थ रूप से संपादित करें
  • 8.एपीआई दस्तावेज़ का लिंक
  • 9.नीति के नोट्स (केवल अपने द्वारा देखे जा सकते हैं) । आप यहाँ विचारों को रिकॉर्ड कर सकते हैं।
  • 10.रणनीति का विवरण. यदि आप स्क्वायर पर अपनी रणनीति साझा या बेचते हैं तो अन्य लोग विवरण देखेंगे।
  • 11. रणनीति का मैनुअल, केवल तभी देखा जा सकता है जब किसी ने आपकी रणनीति खरीदी हो।
  • 12. अपना कोड सहेजें, याCtrl+Sसंपादन मोड पर।
  • 13. बैकटेस्टिंग कॉन्फ़िगरेशन को कोड पर सहेजें.
  • 14.Downloadरणनीति फाइल
  • 15.सभी मापदंडों को बनाए रखते हुए रणनीति का निर्यात और आयात करें
  • 16.फ़ॉन्ट आकार बदलें और थीम संपादित करें
  • 17.कोड को स्वचालित रूप से प्रारूपित करें
  • 18.संपादित करने के लिए VIM मोड का प्रयोग करें।

नीचे रणनीति का पूरा विवरण दिया गया है. संदेश को अपने फ़ोन पर भेजने के लिए, आपको टेलीग्राम को अपने खाते से जोड़ना होगाhttps://www.fmz.com/m/account

/*
This strategy will send a message to your telegram when the price is higher or lower than
the set price.
All strategies must have a main function as the entrance.
*/
function main() {
     //change symbol,will cover the default symbol which was set when start a bot.Currency is a strategy arguments
    exchange.IO("currency", Currency)   
    var lastPushTime = 0    //the variable of last push timestamp.
    while(true){    //run a infinite loop, which is the basic structure
        //_C() function can retry the request automatically after failure. not necessary. var ticker = exchange.GetTicker() is ok.
        var ticker = _C(exchange.GetTicker) // for information about GetTicker, check on https://fmz-docs.readthedocs.io/en/latest/code_Instruction/Market%20API.html#getticker
        if(ticker.Last > UpPrice || ticker.Last < LowPrice){    //ticker.Last represents the last deal price
            if(Date.now() - lastPushTime > 300*1000){    //only push once in 5 mins, Date.now() return ms.
                lastPushTime = Date.now()    //update lastPushTime
                Log(Currency, 'Price is: ', ticker.Last, '@')    //Log the price on the bot's page and sent the message. '@' in the end means push message
            }
        }
        Log(Currency, 'Price is: ', ticker.Last) //just log the price
        Sleep(Interval*1000)    //check the last price again after Interval seconds
    }
}

बॉट चलाएँ

अंत में, यह एक बॉट चलाने का समय है. परRobotपृष्ठ, क्लिक करेंAdd robot, या यात्राhttps://www.fmz.com/m/add-robotसीधे एक बॉट जोड़ने के लिए।img

  • 1.बॉट का नाम
  • 2. इस बॉट को चलाने के लिए डॉकर
  • 3.कार्य करने की रणनीति
  • 4.पारामीटर, डिफ़ॉल्ट मान बदला जा सकता है।
  • 5.डिफ़ॉल्ट क्लाईन अवधि जब उपयोग विनिमय.GetRecords()
  • 6.Exchange
  • 7.Tradingप्रतीक या जोड़े
  • 8.यदि आपको जिस ट्रेडिंग प्रतीक की आवश्यकता है वह सूची में नहीं है, तो आप इसे स्वयं टाइप कर सकते हैं।
  • 9.Clickविनिमय जोड़ने के लिए
  • एक्सचेंज पहले ही जोड़ा जा चुका है। एक बॉट पर कई एक्सचेंजों को जोड़ा जा सकता है,exchanges[0], exchanges[1]
  • 11.Clickरोबोट चलाने के लिए!

बॉट प्रबंधित करें

परRobotपृष्ठ, आप देख सकते हैं कि बॉट चल रहा है।img

  • 1.बॉट का नाम, यहां क्लिक करके बॉट पेज पर जाएं.
  • 2.बॉट द्वारा चलायी जाने वाली रणनीति, रणनीति पृष्ठ पर जाने के लिए यहां क्लिक करें।
  • 3.बॉट की स्थिति. चल रही हो सकती है, रोक दी जा सकती है, त्रुटि हो सकती है.
  • 4.बॉट का मुनाफा, पारित किया गयाLogProfit(), जो भी संख्या आप चाहते हैं हो सकता है.
  • 5.निर्माण की तारीख, अंतिम संचार समय में बदला जा सकता है।
  • 6.बॉट की निगरानी करें. जब गलती से बॉट को रोक दिया गया तो FMZ आपको एक संदेश भेजेगा
  • 7. रोबोट को रोकें.

अधिक जानकारी के लिए बॉट पृष्ठ पर बॉट के नाम पर क्लिक करें:img

2.सबसे अधिक इस्तेमाल किया जाने वाला एपीआई परिचय

इस भाग में कुछ सबसे आम तौर पर इस्तेमाल एपीआई का परिचय होगा, हमारे एपीआई प्रलेखन के पूर्ण संस्करण के लिए, पर जाँच करेंएफएमजेड एपीआई. यह अत्यधिक शुरुआत के लिए डेमो कोड चलाने के लिए सिफारिश की है परडिबग पृष्ठ.

2.1 लॉग

प्रयोग करेंः Log(msg) पैरामीटरःस्ट्रिंग या संख्याएँविवरण:रोबोट लॉग पृष्ठ पर एक संदेश लॉग करें.वापसीःकोई नहींडेमोः

function main() {
    var msg = 'msg string'
    Log(msg)
    Log('hello', 'world', 123)
    Log("red color message", "#FF0000")
    Log("push this message to telegram!@") // won't push on debug page
}

2.2 GetTicker

प्रयोग करेंः exchange.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)
    Log('Last Price: ',ticker.Last, 'Bid Price: ', ticker.Buy)
}

2.3 गहराई प्राप्त करें

प्रयोग करेंः exchange.GetDepth() पैरामीटरःकोई नहींविवरण:वर्तमान बाजार की ऑर्डर बुक प्राप्त करें।वापसीः

{
    "Info":null,
    "Asks":[
        {"Price":5866.38,"Amount":0.068644},
        {"Price":5866.39,"Amount":0.263985},
        {"Price":5866.73,"Amount":0.05},
        {"Price":5866.77,"Amount":0.05},
        {"Price":5867.01,"Amount":0.15},
        {"Price":5875.89,"Amount":0.05},
        ......
        ]
    "Bids":[
        {"Price":5865.13,"Amount":0.001898},
        {"Price":5865,"Amount":0.085575},
        {"Price":5864.15,"Amount":0.013053},
        {"Price":5863.65,"Amount":0.016727},
        {"Price":5863.51,"Amount":0.128906},
        {"Price":5863.15,"Amount":0.2}
        ......
        ],
    "Time":1530241857399
}

डेमोः

function main() {
    var depth = exchange.GetDepth()
    Log(depth)
    Log('Bid one: ', depth.Bids[0].Price, 'Ask one: ', depth.Asks[0].Price)
}

2.4 GetRecords

प्रयोग करेंः exchange.GetRecords(), exchange.GetRecords(Period) पैरामीटरः

नाम प्रकार अनिवार्य विवरण
अवधि वैश्विक वारबल नहीं रोबोट को चालू करते समय क्लाईन्स चक्र, वैकल्पिक पैरामीटर, डिफ़ॉल्ट के लाइन चक्र सेट किया जाता है।

सभी संभावित पैरामीटरःPERIOD_M11 मिनट,PERIOD_M5पांच मिनट,PERIOD_M1515:15 मिनट,PERIOD_M30:30 मिनट,PERIOD_H11 घंटा,PERIOD_D11d.विवरण:वर्तमान बाजार के लिए क्लाईन / कैंडलस्टिक बार प्राप्त करें।वापसीः

[
    {"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},
    ......
]

डेमोः

//A useful JavaScript example using Records to get a close array:
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
}

2.5 GetAccount

प्रयोग करेंः exchange.GetAccount() पैरामीटरःकोई नहींविवरण:खाता जानकारी प्राप्त करेंवापसीः

{
    "Stocks":0.38594816,// free base asset
    "FrozenStocks":0,    //locked base asset
    "Balance":542.858308,//free quote asset
    "FrozenBalance":0     //locked quote asset
    "Info":{} //the raw data
}

डेमोः

//A useful JavaScript example of Log your account value for a certain trading pair:
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
    }
}

2.6 खरीदें

प्रयोग करेंः exchange.Buy(Price, Amount), exchange.Buy(Price, Amount, Msg) पैरामीटरः

नाम प्रकार अनिवार्य विवरण
मूल्य संख्या हाँ सीमा आदेश की खरीद मूल्य
राशि संख्या हाँ सीमा आदेश की खरीद राशि
Msg स्ट्रिंग नहीं लॉग पृष्ठ पर अतिरिक्त संदेश जोड़ें

विवरण:बॉट्स के पृष्ठ पर खरीद आदेश और खरीद लॉग भेजेंवापसीःसफलता के मामले में OrderID लौटाएँ,nullयदि नहीं।डेमोः

//A useful JavaScript example of Buy for buy certain amount of bitcoin at a certain price:
function main(){
    while(true){
        var ticker = exchange.GetTicker()
        var price = ticker.Sell
        if(price >= 7000){
            exchange.Buy(price+5, 1, 'BTC-USDT')
        }
        Sleep(3000)//Sleep 3000ms
    }
}

2.7 बेचना

प्रयोग करेंः exchange.Sell(Price, Amount), exchange.Sell(Price, Amount, Msg) पैरामीटरः

नाम प्रकार अनिवार्य विवरण
मूल्य संख्या हाँ सीमा आदेश की बिक्री मूल्य
राशि संख्या हाँ लिमिट ऑर्डर की मात्रा बेचना
Msg स्ट्रिंग नहीं लॉग पृष्ठ पर अतिरिक्त संदेश जोड़ें

विवरण:बॉट्स के पृष्ठ पर एक बिक्री आदेश और एक बिक्री लॉग भेजेंवापसीःसफलता के मामले में OrderID लौटाएँ,nullयदि नहीं।डेमोः

//A useful JavaScript example of Buy for buy certain amount of bitcoin at a certain price:
function main(){
    while(true){
        var ticker = exchange.GetTicker()
        var price = ticker.Buy
        if(price >= 7000){
            var id = exchange.Sell(price-5, 1, 'BTC-USDT')
            Log('OrderId: ', id)
        }
        Sleep(3000)
    }
}

2.8 GetOrder

प्रयोग करेंः exchange.GetOrder(OrderId) पैरामीटरः

नाम प्रकार अनिवार्य विवरण
आदेश संख्या हाँ आदेश आईडी

विवरण:आदेश आईडी द्वारा आदेश विवरण प्राप्त करें।वापसीः

{
    "Id":125723661,
    "Amount":0.01,
    "Price":7000,
    "DealAmount":0,
    "AvgPrice":0,
    "Status":0, // 0:Not filled, 1:Filled, 2:Canceled
    "Type":1,// 0:Buy, 1:Sell
    "ContractType":"",//just for futures contract orders
    "Info":{} //raw info from exchange
    }
}

डेमोः

//A JavaScript example of using this API, which will buy until your account has 5 coins:
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(10-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){
                exchange.CancelOrder(id)
            }
        }
    }
}

2.9 GetOrders

प्रयोग करेंः exchange.GetOrders() पैरामीटरःकोई नहींविवरण:अपने ट्रेडिंग प्रतीकों के लिए सभी खुले आदेश प्राप्त करें.वापसीःखुले आदेशों की एक सूची, परिणाम का एक ही अर्थ हैGetOrder()

[
    {
        "Info":{},
        "Id":16387538,
        "Amount":1123,
        "Price":0.00012826,
        "DealAmount":0,
        "AvgPrice":0,
        "Status":0,
        "Type":1,
        "ContractType":""
    }
]

डेमोः

//A JavaScript example of using this API, which will cancel all open orders for trading symbol:
fuction 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)
    }
}

2.10 आदेश रद्द करें

प्रयोग करेंः exchange.CancelOrder(OrderId) पैरामीटरः

नाम प्रकार अनिवार्य विवरण
आदेश संख्या हाँ आदेश आईडी

विवरण:ऑर्डर आईडी से ऑर्डर रद्द करें।वापसीःbool प्रकार,trueइसका अर्थ है कि आदेश अनुरोध को रद्द करने में सफलता मिली।falseआदेश अनुरोध रद्द करने में विफलता का अर्थ है।

2.11 SetContractType

प्रयोग करेंः exchange.SetContractType(ContractType) पैरामीटरः

नाम प्रकार अनिवार्य विवरण
अनुबंध प्रकार स्ट्रिंग हाँ अनुबंध प्रकार

विवरण:वायदा व्यापार के लिए अनुबंध प्रकार सेट करें. अन्य निजी एपीआई का उपयोग करने से पहले पहले सेट किया जाना चाहिए.वापसीःकोई नहींडेमोः

exchange.SetContractType("this_week") //OKEX future has “this_week”, “next_week”, “quarter” , "swap"
exchange.SetContractType("XBTUSD") //BitMEX future has "XBTUSD","XBTM19",etc

2.12 स्थिति प्राप्त करें

प्रयोग करेंः exchange.GetPosition() पैरामीटरःकोई नहींविवरण:वर्तमान स्थिति की जानकारी प्राप्त करें, केवल वायदा व्यापार के लिए।वापसीःपदों की सूची, रिक्त सूची लौटाएगा यदि खाते में कोई पद नहीं है।डेमोः

// Note: GetPosition function obtains all positions.
function main(){
    exchange.SetContractType("this_week") //for OKEX future
    var position = exchange.GetPosition()
    if(position.length>0){
        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)
    }
}

2.13 दिशा निर्धारित करें

प्रयोग करेंः exchange.SetDirection(Direction) पैरामीटरः

नाम प्रकार अनिवार्य विवरण
दिशा स्ट्रिंग हाँ हो सकता हैbuy, closebuy, sell, closesell.

विवरण:केवल वायदा व्यापार के लिए खरीद या बिक्री आदेश प्रकार सेट करें।वापसीःकोई नहींडेमोः

function main(){
    exchange.SetContractType("this_week");
    exchange.SetMarginLevel(5) // Set the leverage to 5 times
    exchange.SetDirection("buy") // Set the order type to buy long
    exchange.Buy(5000, 2) //buy long at the price 1000, quantity of 2
    exchange.SetDirection("closebuy")
    exchange.Sell(4999, 2) //close long position
}

2.14 अन्य सामान्य रूप से उपयोग किया जाने वाला कार्यः

एफएमजेड पर उन कार्यों के बारे में अधिक जानकारी की जाँच करेंएपीआई दस्तावेज

नाम विवरण उदाहरण
LogStatus बॉट की स्थिति पट्टी पर संदेश या तालिकाओं को लॉग करें,हर बार ताज़ा होगा LogStatus('msg')
_C पुनः प्रयास फ़ंक्शन _C(exchange.GetRecords,PERIOD_H1),_C(exchange.GetTicker)
_N स्थिति फलन _N(4001.512,2),_N(num,0)
_G वैश्विक शब्दकोश जिसे रोबोट को पुनरारंभ करने के बाद सहेजा जा सकता है। _G('initValue', 1000);_G('initValue')
_D टाइमस्टैम्प लौटाता है _D(), _D(1478570053241)
TA टीए-लिब इंडिकेटर लाइब्रेरी. समर्थनMACD, EMA, KDJआदि... TA.MACD(records)
Math मैथ्स फंक्शन का समर्थन करें, जाँच करेंhttps://mathjs.org/ Math.min(1,2), Math.sqrt(2)

3.दो पूर्ण वास्तविक रणनीति

शिक्षा में बहुत सी रणनीति हैhttps://www.fmz.com/square/s:tag:Study/1, जो शुरुआती लोगों के लिए सरल और आसान है।

3.1 उच्च आवृत्ति बाजार निर्माता की स्पॉट रणनीति

यह एक सरल लेकिन शक्तिशाली रणनीति है जो वास्तविक बीटीसी स्पॉट बाजारों में सैकड़ों गुना कमाई करती थी। यह उच्च व्यापार शुल्क वाले एक्सचेंजों पर नहीं चल सकती है।

var floatAmountBuy = 20
var floatAmountSell = 20
var diffPrice = 3
var Interval = 3000

function CancelPendingOrders() {
    var orders = _C(exchange.GetOrders);
    for (var j = 0; j < orders.length; j++) {
        exchange.CancelOrder(orders[j].Id, orders[j])
    }
}

function GetPrice(depth) {
    var price = {buy:0, sell:0}
    var askAmount = 0
    var bidAmount = 0
    for(var i=0; i<depth.Bids.length; i++){
        askAmount += depth.Asks[i].Amount
        bidAmount += depth.Bids[i].Amount
        if(askAmount >= floatAmountBuy && !price.buy){
            price.buy = depth.Asks[i].Price
        }
        if(bidAmount >= floatAmountSell && !price.sell){
            price.sell = depth.Bids[i].Price
        }
    }
    if(!price.buy || !price.sell){
        price = {buy:depth.Asks[depth.Asks.length-1].Price, sell:depth.Bids[depth.Bids.length-1].Price}
    }
    return price
}

function onTick() {
    var price = GetPrice(_C(exchange.GetDepth))
    var buyPrice = price.buy + 0.01
    var sellPrice = price.sell - 0.01
    if ((sellPrice - buyPrice) <= diffPrice){
        buyPrice -= 10
        sellPrice += 10
    }
    CancelPendingOrders()
    var account = _C(exchange.GetAccount)
    var amountBuy = _N((account.Balance / buyPrice-0.01), 2)
    var amountSell = _N((account.Stocks), 2)
    if (amountSell > 0.02) {
        exchange.Sell(sellPrice, amountSell)
    }
    if (amountBuy > 0.02) {
        exchange.Buy(buyPrice, amountBuy)
    }
}

function main() {
    while (true) {
        onTick()
        Sleep(Interval)
    }
}

3.2 दोहरी धक्का OKEX सुविधा

एक क्लासिक भागने की रणनीति, चेक परhttps://www.fmz.com/strategy/103247कॉन्फ़िगरेशन के लिए। आप सीख सकते हैं कि स्रोत कोड से सुविधाओं का व्यापार कैसे करें और चार्ट कैसे बनाएं।

var ChartCfg = {
    __isStock: true,
    title: {
        text: 'Dual Thrust Up-Down Track'
    },
    yAxis: {
        plotLines: [{value: 0,
            color: 'red',
            width: 2,
            label: {
                text: 'Up Track',
                align: 'center'}
                },
            {value: 0,
            color: 'green',
            width: 2,
            label: {
                text: 'Down Track',
                align: 'center'},
            }
        ]
    },
    series: [{type: 'candlestick',
        name: 'current cycle',
        id: 'primary',
        data: []
        },
        {type: 'flags',
        onSeries: 'primary',
        data: [],
        }
    ]
};

var STATE_IDLE = 0;
var STATE_LONG = 1;
var STATE_SHORT = 2;
var State = STATE_IDLE;

var LastBarTime = 0;
var UpTrack = 0;
var BottomTrack = 0;
var chart = null;
var InitAccount = null;
var LastAccount = null;
var Counter = {
    w: 0,
    l: 0
};

function GetPosition(posType) {
    var positions = exchange.GetPosition();
    for (var i = 0; i < positions.length; i++) {
        if (positions[i].Type === posType) {
            return [positions[i].Price, positions[i].Amount];
        }
    }
    return [0, 0];
}

function CancelPendingOrders() {
    while (true) {
        var orders = exchange.GetOrders();
        for (var i = 0; i < orders.length; i++) {
            exchange.CancelOrder(orders[i].Id);
            Sleep(Interval);
        }
        if (orders.length === 0) {
            break;
        }
    }
}

function Trade(currentState, nextState) {
    var pfn = nextState === STATE_LONG ? exchange.Buy : exchange.Sell;
    if (currentState !== STATE_IDLE) {
        exchange.SetDirection(currentState === STATE_LONG ? "closebuy" : "closesell");
        while (true) {
            var amount = GetPosition(currentState === STATE_LONG ? PD_LONG : PD_SHORT)[1];
            if (amount === 0) {
                break;
            }
            // pfn(amount);
            pfn(nextState === STATE_LONG ? _C(exchange.GetTicker).Sell * 1.001 : _C(exchange.GetTicker).Buy * 0.999, amount);
            Sleep(Interval);
            CancelPendingOrders();
        }
        var account = exchange.GetAccount();

        if (account.Stocks > LastAccount.Stocks) {
            Counter.w++;
        } else {
            Counter.l++;
        }

        LogProfit(_N(account.Stocks - InitAccount.Stocks), "Profit rate:", _N((account.Stocks - InitAccount.Stocks) * 100 / InitAccount.Stocks) + '%');
        LastAccount = account;
    }
    exchange.SetDirection(nextState === STATE_LONG ? "buy" : "sell");
    while (true) {
        var pos = GetPosition(nextState === STATE_LONG ? PD_LONG : PD_SHORT);
        if (pos[1] >= AmountOP) {
            Log("Average Price", pos[0], "amount:", pos[1]);
            break;
        }
        // pfn(AmountOP-pos[1]);
        pfn(nextState === STATE_LONG ? _C(exchange.GetTicker).Sell * 1.001 : _C(exchange.GetTicker).Buy * 0.999, AmountOP-pos[1]);
        Sleep(Interval);
        CancelPendingOrders();
    }
}

function onTick(exchange) {
    var records = exchange.GetRecords();
    if (!records || records.length <= NPeriod) {
        return;
    }
    var Bar = records[records.length - 1];
    if (LastBarTime !== Bar.Time) {
        var HH = TA.Highest(records, NPeriod, 'High');
        var HC = TA.Highest(records, NPeriod, 'Close');
        var LL = TA.Lowest(records, NPeriod, 'Low');
        var LC = TA.Lowest(records, NPeriod, 'Close');

        var Range = Math.max(HH - LC, HC - LL);

        UpTrack = _N(Bar.Open + (Ks * Range));
        DownTrack = _N(Bar.Open - (Kx * Range));
        if (LastBarTime > 0) {
            var PreBar = records[records.length - 2];
            chart.add(0, [PreBar.Time, PreBar.Open, PreBar.High, PreBar.Low, PreBar.Close], -1);
        } else {
            for (var i = Math.min(records.length, NPeriod * 3); i > 1; i--) {
                var b = records[records.length - i];
                chart.add(0, [b.Time, b.Open, b.High, b.Low, b.Close]);
            }
        }
        chart.add(0, [Bar.Time, Bar.Open, Bar.High, Bar.Low, Bar.Close]);
        ChartCfg.yAxis.plotLines[0].value = UpTrack;
        ChartCfg.yAxis.plotLines[1].value = DownTrack;
        ChartCfg.subtitle = {
            text: 'Up Track: ' + UpTrack + '  Down Track: ' + DownTrack
        };
        chart.update(ChartCfg);
        chart.reset(PeriodShow);

        LastBarTime = Bar.Time;
    } else {
        chart.add(0, [Bar.Time, Bar.Open, Bar.High, Bar.Low, Bar.Close], -1);
    }

    LogStatus("Price:", Bar.Close, "Up:", UpTrack, "Down:", DownTrack, "Wins: ", Counter.w, "Losses:", Counter.l, "Date:", new Date());
    var msg;
    if (State === STATE_IDLE || State === STATE_SHORT) {
        if (Bar.Close >= UpTrack) {
            msg  = 'Long Price: ' + Bar.Close + ' Up Track:' + UpTrack;
            Log(msg);
            Trade(State, STATE_LONG);
            State = STATE_LONG;
            chart.add(1, {x:Bar.Time, color: 'red', shape: 'flag', title: 'Long', text: msg});
        }
    }

    if (State === STATE_IDLE || State === STATE_LONG) {
        if (Bar.Close <= DownTrack) {
            msg = 'Short Price: ' + Bar.Close + ' Down Track:' + DownTrack;
            Log(msg);
            Trade(State, STATE_SHORT);
            chart.add(1, {x:Bar.Time, color: 'green', shape: 'circlepin', title: 'Short', text: msg});
            State = STATE_SHORT;
        }
    }
}

function onexit() {
    var pos = exchange.GetPosition();
    if (pos.length > 0) {
        Log("Warning, has positions when exiting", pos);
    }
}

function main() {
    if (exchange.GetName() !== 'Futures_OKCoin') {
        throw "Only support OKEX features";
    }
    exchange.SetRate(1);
    exchange.SetContractType(["this_week", "next_week", "quarter"][ContractTypeIdx]);
    exchange.SetMarginLevel([10, 20][MarginLevelIdx]);

    if (exchange.GetPosition().length > 0) {
        throw "Can't have Positions when start.";}

    CancelPendingOrders();

    InitAccount = LastAccount = exchange.GetAccount();
    LoopInterval = Math.min(1, LoopInterval);
    Log('Exchange Name:', exchange.GetName(), InitAccount);
    LogStatus("Ready...");

    LogProfitReset();
    chart = Chart(ChartCfg);
    chart.reset();

    LoopInterval = Math.max(LoopInterval, 1);
    while (true) {
        onTick(exchange);
        Sleep(LoopInterval * 1000);
    }
}


अधिक

घासइस पोस्ट पर अपडेट रखें, कोई भी सवाल पूछने के लिए स्वतंत्र महसूस करें