संसाधन लोड हो रहा है... लोड करना...

क्रिप्टोकरेंसी की मात्रात्मक व्यापारिक रणनीति विनिमय विन्यास

लेखक:अच्छाई, बनाया गयाः 2019-09-16 14:55:26, अद्यतन किया गयाः 2023-11-07 20:50:11

img

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

सीखने का मंच अभी भी FMZ क्वांट ट्रेडिंग प्लेटफॉर्म का उपयोग करता है (https://www.fmz.com), और बाजार को क्रिप्टोक्यूरेंसी बाजार के रूप में चुना जाता है।

बहु-क्रिप्टोक्यूरेंसी रणनीति डिजाइन

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

आमतौर पर इस तरह से डिजाइन किया जाता हैः

function Process (symbol) {
     exchange.IO("currency", symbol)
     var ticker = _C(exchange.GetTicker)
     Log("has switched trading pairs, processing trading pairs according to strategy logic:", symbol, "quotes: ", ticker)
     // ...
     // ..
     // .
}

function main(){
     var symbols = ["BTC_USDT", "LTC_USDT", "ETH_USDT"]
     while (true) {
         for (var i = 0 ; i < symbols.length; i++) {
             Process(symbols[i])
             Sleep(500)
         }
     }
}

हम रोबोट को कॉन्फ़िगर करते हैंः

img

img

यह देखा जा सकता है कि यह महसूस करता है कि रोबोट पर एक विनिमय वस्तु को कॉन्फ़िगर किया जाता है, और ट्रेडिंग जोड़ी स्विच की जाती है; विभिन्न ट्रेडिंग जोड़े का बाजार प्राप्त किया जाता है, और बहु-ट्रेडिंग विविधता बाजार निष्पादित किया जाता है; और यह एक रणनीति तर्क के तहत निष्पादित किया जाता है।

यह देखा जा सकता है कि तीन व्यापारिक जोड़े हम परिभाषित करते हैंः BTC_USDT, LTC_USDT, ETH_USDT, लूप में, पुनरावृत्ति बाजार उद्धरण प्राप्त करते हैं, और जानकारी प्राप्त करने के बाद, यह विशेष रूप से बाजार का पता लगा सकता है और रणनीति द्वारा डिज़ाइन किए गए ट्रेडिंग तर्क को ट्रिगर कर सकता है।

कुछ पाठक पूछ सकते हैं: मुझे ट्रेडिंग जोड़े बदलना पसंद नहीं है, यह थोड़ा परेशानी भरा लगता है, और रणनीति तर्क स्पष्ट नहीं है

वास्तव में अन्य डिजाइन विकल्प हैं, जिन्हें हम नीचे प्रस्तुत करेंगे।

एक ही विनिमय खाते में रोबोट के लिए कई विनिमय वस्तुओं को कॉन्फ़िगर करना

विभिन्न व्यापारिक जोड़े के बाजार डेटा को कई विनिमय वस्तुओं के माध्यम से प्राप्त किया जाता है, और पुनरावर्ती रणनीति तर्क में निष्पादित किया जाता है।

उदाहरण के लिए, रोबोट के लिए तीन विनिमय वस्तुओं को कॉन्फ़िगर करके रोबोट को कॉन्फ़िगर करें। ट्रेडिंग जोड़े क्रमशः BTC_USDT, LTC_USDT, और ETH_USDT पर सेट हैं।

img

नाम OKEX स्पॉट V3 टेस्ट विनिमय वस्तु है, डैशबोर्ड पृष्ठ पर, विनिमय विन्यास पृष्ठः

img

सब किया।

हमने इन कोड को थोड़ा बदल दिया है, क्योंकि इस बार हमने रोबोट में कई एक्सचेंज ऑब्जेक्ट जोड़े हैं, जो कि BTC_USDT, LTC_USDT, ETH_USDT ट्रेडिंग जोड़ी के एक्सचेंज ऑब्जेक्ट हैं।

function Process (e) {
    var ticker = _C(e.GetTicker)
    Log("exchange", e.GetName(), "Process trading pairs according to strategy logic:", e.GetCurrency(), "Quotes:", ticker)
    // ...
    // ..
    // .
}  

function main(){
    while (true) {
        for (var i = 0 ; i < exchanges.length; i++) {
            Process(exchanges[i])
            Sleep(500)
        }
    }
}

रोबोट चलाएँ:

img

उदाहरण हम ऊपर वर्णित है, चाहे व्यापार जोड़े स्विच या एक विन्यास खाते के कई अलग-अलग व्यापार जोड़े के लिए एक व्यापार वस्तु जोड़ने. ये सभी सिर्फ एक विनिमय खाता विन्यास का उपयोग कर रहे हैं (एक विनिमय विनिमय का उपयोग कर).

तो आप एक रणनीति में कई विनिमय खातों का उपयोग कैसे करते हैं?

एकाधिक विनिमय खातों का उपयोग करने की रणनीति

कुछ रणनीतियाँ जैसे बहु-विनिमय क्रॉस-मार्केट हेजिंग, एक ही विनिमय के भीतर बहु-खाता रणनीतियाँ।

  • विभिन्न एक्सचेंजों के साथ कई एक्सचेंजों का विन्यास

img

उदाहरण के लिए, हमने डैशबोर्ड -> एक्सचेंज -> एक्सचेंज पेज जोड़ने पर 2 एक्सचेंजों को कॉन्फ़िगर किया है.

हम रणनीति में इन दो एक्सचेंजों द्वारा कॉन्फ़िगर किए गए खातों की परिसंपत्ति जानकारी तक पहुंच सकते हैं।

img

function main(){
     Log(exchanges[0].GetAccount()) // Print the account asset information of the first exchange object.
     Log(exchanges[1].GetAccount()) // ... Print the asset information of the Bit-Z exchange
}

बेशक, मैं भी एक विनिमय के लिए एक दूसरे और तीसरे खाते विनिमय विन्यास जोड़ सकते हैं।

  • एक ही एक्सचेंज के साथ कई एक्सचेंज कॉन्फ़िगरेशन।

उदाहरण के लिए, हम Huobi वायदा के लिए एक और खाता जोड़ते हैं।

img

जैसा कि आप देख सकते हैं, यह दो हुओबी फ्यूचर्स एक्सचेंजों के खातों को कॉन्फ़िगर करता है।

img

जब रणनीति बनाई जाती है, तो चयन के लिए Robot के Modify Configuration विकल्प में Huobi फ्यूचर्स एक्सचेंज ऑब्जेक्ट दिखाई देता है।

img

उदाहरण के लिए, यह दो खातों को पहले बेचने और फिर विशिष्ट ग्रिड रणनीति (ऊपर) या पहले खरीदने और फिर बेचने (नीचे) के साथ खरीदने की अनुमति देता है।

उपरोक्त दो उदाहरणों के माध्यम से

यहाँ रोबोट पर कई विनिमय वस्तुओं को कॉन्फ़िगर करने और रोबोट के लिए एक ही विनिमय खाते के लिए कई विनिमय वस्तुओं को कॉन्फ़िगर करने के बीच अंतर हैः

एक ही विनिमय खाते में रोबोट के लिए कई विनिमय वस्तुएं हैं का यह स्लैमिंग और उपर्युक्त उदाहरण कुछ हद तक समान है, लेकिन अंतर हैं।

अंतर यह है कि उपरोक्त उदाहरण एक विनिमय विन्यास है, अर्थातः

img

जब रोबोट एक्सचेंज ऑब्जेक्ट को कॉन्फ़िगर करता है, तो वह हमेशा उपयोग करता हैः

img

यह विन्यास।

यह सिर्फ है कि जब आप एक विनिमय वस्तु जोड़ने, व्यापार जोड़ी सेटिंग अलग हैं।

यदि GetAccount फ़ंक्शन को बुलाया जाता है, तो उसी खाते की संपत्ति जानकारी हमेशा एक्सेस की जाती है.

तथापि:

img

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

  • एक्सचेंज कॉन्फ़िगरेशन का उपयोग क्रिप्टोक्यूरेंसी वायदा रणनीति के डिजाइन को आसान बनाता है।

कभी-कभी क्रिप्टोक्यूरेंसी अनुबंध हेजिंग की रणनीति में, क्षणिक व्यापारिक अवसरों को जब्त करने के लिए, कई परिदृश्यों को एक साथ रखने की आवश्यकता होती है। हालांकि, क्योंकि अनुबंध अलग है, जब आप बाजार उद्धरण प्राप्त करते हैं और ऑर्डर देते हैं तो आपको संबंधित अनुबंध पर स्विच करने की आवश्यकता होती है।exchange.Goऔर स्विच अनुबंध के डिजाइन भी तर्क इतना सरल नहीं बनाता है. वहाँ एक बेहतर तरीका है?

बेशक वहाँ कर रहे हैं, हम दो विनिमय रोबोट के लिए वस्तुओं जोड़ सकते हैं एक ही विनिमय खाते में रोबोट के लिए कई विनिमय वस्तुओं को कॉन्फ़िगर करें का पालन करके।

img

फिर एक और विनिमय वस्तु जोड़ने के लिए इस विनिमय विन्यास का उपयोग करें.

एक संकेत बॉक्स पॉप अप होगा!

img

एक विनिमय खाता विन्यास, आप एक ही मुद्रा या व्यापार जोड़ी के विनिमय वस्तुओं को जोड़ नहीं सकते।

मुझे क्या करना चाहिए? ऐसा लगता है कि रणनीति रोबोट दो एक्सचेंज ऑब्जेक्ट का उपयोग नहीं कर सकता है, और एक्सचेंज ऑब्जेक्ट एक एक्सचेंज खाता नंबर से जुड़ा हुआ है?

अभी भी एक रास्ता है!

चलो Dashboard -> Exchange पर जाएं, और फिर एक OKEX वायदा विनिमय विन्यास जोड़ें.

img

कॉन्फ़िगर होने पर सहेजें पर क्लिक करें.

img

इस तरह हम दो विनिमय विन्यास है, लेकिन एक ही एपीआई कुंजी विन्यास जानकारी का उपयोग किया जाता है.

img

इसका क्या लाभ है?

एक रणनीति लिखते समय, डिजाइन बहुत सरल होगा!

function main(){
    exchanges[0].SetContractType("quarter") // Set the first added exchange object. The current contract is a quarterly contract.
    exchanges[1].SetContractType("this_week") // Set the second added exchange object, the current contract is the current week contract
    
    while (true) {
        var beginTime = new Date().getTime() // Record the timestamp from which this time the market quote was taken.
        var rA = exchanges[0].Go("GetTicker") // Create a concurrent thread to get the first exchange object, which is the market data for the quarterly contract.
        var rB = exchanges[1].Go("GetTicker") // Create a concurrent thread to get the second exchange object, which is the market data for the weekly contract.
        
        var tickerA = rA.wait() // The two threads executing each other perform their own tasks, waiting to get the data. When A waits, the B task is also executing.
        var tickerB = rB.wait() // So it seems to be sequential execution, actually at the bottom of the concurrency. Only when you get the order is to get A first, and get B.
        var endTime = new Date().getTime() // Record the timestamp at the end of the two contract quotes.
        
        if (tickerA && tickerB) { // If there is no problem with the data obtained, execute the following logic.
            var diff = tickerA.Last - tickerB.Last // calculate the difference
            $.PlotLine("diff", diff) // Use the line drawing library to plot the difference on the chart.
            if (diff > 500) { // If the spread is greater than 500, hedge arbitrage (of course, the difference of 500 is relatively large, rarely seen.)
                // Hedging
                rA = exchanges[0].Go("Sell", tickerA.Buy, 1) // Concurrent threads create a selling order under the quarterly contract
                rB = exchanges[1].Go("Buy", tickerB.Sell, 1) // Concurrent thread create a buying order under the weekly contract
                
                var idA = rA.wait() // Waiting for the return of placing order results, returning the order ID
                var idB = rB.wait() // ...
            }
            
            // ...
        }
        
        LogStatus(_D(), "Concurrently get two contract quotes taking time:", endTime - beginTime, "millisecond.") // Shows the time on the status bar to know that the program is executing.
        Sleep(500)
    }

क्या यह डिजाइन रणनीति बहुत सरल और स्पष्ट है?

वास्तविक बाजार संचालन:

img

जैसा कि आप देख सकते हैं, प्रत्येक बार दो अनुबंधों की कीमत प्राप्त करने में केवल 50 मिलीसेकंड लगते हैं।


संबंधित

अधिक