क्रिप्टोकरेंसी के लिए विस्तृत उच्च आवृत्ति व्यापार रणनीतियों का परिचय

लेखक:आविष्कारक मात्रा, बनाया गयाः 2023-03-19 19:56:11, अद्यतन किया गयाः 2023-09-18 19:55:58

img

मैंने 2020 में उच्च आवृत्ति व्यापार रणनीतियों का परिचय देने वाला एक लेख लिखा था (https://www.fmz.com/digest-topic/6228) हालांकि इसने कुछ ध्यान आकर्षित किया, लेकिन यह बहुत गहरा नहीं था। तब से ढाई साल बीत चुके हैं, और बाजार बदल गया है। उस लेख को प्रकाशित करने के बाद, मेरी उच्च आवृत्ति रणनीति लंबे समय तक स्थिर लाभ कमाने में सक्षम थी, लेकिन लाभ धीरे-धीरे गिर गया और एक बिंदु पर भी रुक गया। हाल के महीनों में, मैंने इसे नवीनीकृत करने में समय बिताया है, और यह अभी भी कुछ छोटे लाभ कमा सकता है। यह लेख मेरी उच्च आवृत्ति व्यापार रणनीति और कुछ सरलीकृत कोड का अधिक विस्तृत परिचय प्रदान करेगा, जो चर्चा और प्रतिक्रिया के लिए एक प्रारंभिक बिंदु के रूप में कार्य करता है।

उच्च आवृत्ति व्यापार के लिए शर्तें

आयोग के छूट खातों

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

गति

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

उपयुक्त बाजार

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

प्रतिस्पर्धा का सामना करें

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

उच्च आवृत्ति व्यापार के सिद्धांत

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

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

निम्नलिखित कोड बाइनेंस स्थायी अनुबंध के बुनियादी वास्तुकला पर आधारित है और मुख्य रूप से वेबसॉकेट गहराई ऑर्डर प्रवाह ट्रेडों और स्थिति की जानकारी की सदस्यता लेता है। चूंकि बाजार डेटा और खाता जानकारी को अलग से सदस्यता ली जाती है, इसलिए नवीनतम जानकारी प्राप्त की गई है या नहीं यह निर्धारित करने के लिए लगातार पढ़ने (-1) का उपयोग करने की आवश्यकता है। यहां, इवेंटलूप (1000) का उपयोग प्रत्यक्ष मृत लूप से बचने और सिस्टम लोड को कम करने के लिए किया जाता है। इवेंटलूप (1000) तब तक ब्लॉक करता है जब तक कि 1000ms के टाइमआउट के साथ wss या समवर्ती कार्य वापसी न हो।

var datastream = null
var tickerstream = null
var update_listenKey_time = 0

function ConncetWss(){
    if (Date.now() - update_listenKey_time < 50*60*1000) {
        return
    }
    if(datastream || tickerstream){
        datastream.close()
        tickerstream.close()
    }
    // need APIKEY
    let req = HttpQuery(Base+'/fapi/v1/listenKey', {method: 'POST',data: ''}, null, 'X-MBX-APIKEY:' + APIKEY) 
    let listenKey = JSON.parse(req).listenKey
    datastream = Dial("wss://fstream.binance.com/ws/" + listenKey + '|reconnect=true', 60)
    // Symbols is the pair of symbol
    let trade_symbols_string = Symbols.toLowerCase().split(',')
    let wss_url = "wss://fstream.binance.com/stream?streams="+trade_symbols_string.join(Quote.toLowerCase()+"@aggTrade/")+Quote.toLowerCase()+"@aggTrade/"+trade_symbols_string.join(Quote.toLowerCase()+"@depth20@100ms/")+Quote.toLowerCase()+"@depth20@100ms"
    tickerstream = Dial(wss_url+"|reconnect=true", 60)
    update_listenKey_time = Date.now()
}

function ReadWss(){
    let data = datastream.read(-1)
    let ticker = tickerstream.read(-1)
    while(data){
        data = JSON.parse(data)
        if (data.e == 'ACCOUNT_UPDATE') {
            updateWsPosition(data)
        }
        if (data.e == 'ORDER_TRADE_UPDATE'){
            updateWsOrder(data)
        }        
        data = datastream.read(-1)
    }
    while(ticker){
        ticker = JSON.parse(ticker).data
        if(ticker.e == 'aggTrade'){
            updateWsTrades(ticker)
        }
        if(ticker.e == 'depthUpdate'){
            updateWsDepth(ticker)
        }
        ticker = tickerstream.read(-1)
    }
    makerOrder()
}

function main() {
    while(true){
        ConncetWss()
        ReadWss()
        worker()
        updateStatus()
        EventLoop(1000)
    }
}

रणनीतिक संकेतकों

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

  • प्रति लेनदेन औसत व्यापारिक मात्रा, जो 100ms के भीतर एक ही दिशा, मूल्य और विभिन्न आदेशों में लेनदेन का संग्रह है। यह खरीद और बिक्री आदेशों के आकार को दर्शाता है और इसका वजन अधिक है। यदि खरीद आदेशों की व्यापारिक मात्रा बिक्री आदेशों से अधिक है, तो यह माना जा सकता है कि बाजार में खरीदारों का प्रभुत्व है।
  • ऑर्डर आवृत्ति या ऑर्डर अंतराल, लेनदेन के डेटा पर भी आधारित है, पिछले औसत लेनदेन की मात्रा ने समय की अवधारणा पर विचार नहीं किया और पूरी तरह से सटीक नहीं है। यदि एक दिशा में एक आदेश में एक छोटी औसत लेनदेन की मात्रा है लेकिन एक उच्च आवृत्ति है, तो यह उस दिशा की ताकत में भी योगदान देता है। औसत लेनदेन की मात्रा * ऑर्डर आवृत्ति एक निश्चित अंतराल पर कुल लेनदेन की मात्रा का प्रतिनिधित्व करती है और प्रत्यक्ष तुलना के लिए उपयोग की जा सकती है। ऑर्डर आगमन घटना एक पोइसन वितरण का पालन करती है, जिसका उपयोग एक विशिष्ट समय अंतराल के भीतर कुल ऑर्डर मूल्य तक पहुंचने का अनुमान लगाने के लिए किया जा सकता है, जो ऑर्डर लगाने के लिए एक संदर्भ प्रदान करता है।
  • औसत स्प्रेड, जो बिक्री मूल्य और खरीद मूल्य के बीच का अंतर है। वर्तमान स्प्रेड ज्यादातर एक टिक है, और यदि स्प्रेड बढ़ता है, तो यह अक्सर संकेत देता है कि एक प्रवृत्ति है। औसत खरीद और बिक्री मूल्य, जो क्रमशः खरीद और बिक्री लेनदेन की औसत कीमत की गणना करते हैं और उन्हें नवीनतम मूल्य के साथ तुलना करते हैं। यदि नवीनतम खरीद आदेश मूल्य औसत खरीद आदेश मूल्य से अधिक है, तो प्रारंभिक रूप से एक सफलता का न्याय किया जा सकता है।

रणनीति तर्क

अल्पकालिक रुझानों का आकलन करना

let bull =  last_sell_price > avg_sell_price && last_buy_price > avg_buy_price &&
            avg_buy_amount / avg_buy_time > avg_sell_amount / avg_sell_time;
let bear =  last_sell_price < avg_sell_price && last_buy_price < avg_buy_price && 
            avg_buy_amount / avg_buy_time < avg_sell_amount / avg_sell_time;

यदि अंतिम ऑर्डर मूल्य औसत ऑर्डर मूल्य से अधिक है और अंतिम ऑर्डर मूल्य औसत ऑर्डर मूल्य से अधिक है और खरीद आदेश का मूल्य एक निश्चित अंतराल पर बिक्री आदेश के मूल्य से अधिक है, तो यह एक अल्पकालिक तेजी वाला बाजार माना जाता है। मंदी वाले बाजारों के लिए विपरीत सच है।

ऑर्डर देना

function updatePrice(depth, bid_amount, ask_amount) {

    let buy_price = 0
    let sell_price = 0
    let acc_bid_amount = 0
    let acc_ask_amount = 0

    for (let i = 0; i < Math.min(depth.asks.length, depth.bids.length); i++) {
        acc_bid_amount += parseFloat(depth.bids[i][1])
        acc_ask_amount += parseFloat(depth.asks[i][1])
        if (acc_bid_amount > bid_amount  && buy_price == 0) {
            buy_price = parseFloat(depth.bids[i][0]) + tick_size
        }
        if (acc_ask_amount > ask_amount  && sell_price == 0) {
            sell_price = parseFloat(depth.asks[i][0]) - tick_size
        }
        if (buy_price > 0 && sell_price > 0) {
            break
        }
    }
    return [buy_price, sell_price]
}

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

10 सिक्कों की मात्रा के साथ हिट कर सकते हैं। विशिष्ट समय खिड़की का आकार स्वयं से सेट करने की जरूरत है।

आदेश मात्रा

let buy_amount = Ratio * avg_sell_amount / avg_sell_time
let sell_amount = Ratio * avg_buy_amount / avg_buy_time

यह अनुपात अंतिम बिक्री आदेश मात्रा का एक निश्चित अनुपात है, जो अंतिम बिक्री आदेश मात्रा के एक निश्चित अनुपात के रूप में खरीद आदेश मात्रा का प्रतिनिधित्व करता है। यह रणनीति को वर्तमान खरीद और बिक्री गतिविधि के अनुसार आदेश आकार को समायोजित करने की अनुमति देता है।

आदेश की शर्तें

if(bull && (sell_price-buy_price) > N * avg_diff) {
    trade('buy', buy_price, buy_amount)
}else if(position.amount < 0){
    trade('buy', buy_price, -position.amount)
}
if(bear && (sell_price-buy_price) >  N * avg_diff) {
    trade('sell', sell_price, sell_amount)
}else if(position.amount > 0){
    trade('sell', sell_price, position.amount)
}

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

समवर्ती वास्तुकला

var tasks = []
var jobs = []

function worker(){
    let new_jobs = []
    for(let i=0; i<tasks.length; i++){
        let task = tasks[i]
        jobs.push(exchange.Go.apply(this, task.param))
    }
    _.each(jobs, function(t){
        let ret = t.wait(-1)
        if(ret === undefined){
            new_jobs.push(t)//未返回的任务下次继续等待
        }
    })
    jobs = new_jobs
    tasks = []
}

/*
tasks.push({'type':'order','param': ["IO", "api", "POST","/fapi/v1/order",
        "symbol="+symbol+Quote+"&side="+side+"&type=LIMIT&timeInForce=GTX&quantity="+
        amount+"&price="+price+"&newClientOrderId=" + UUID() +"&timestamp="+Date.now()]})
*/

मॉनिटर किए गए डेटा

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

अन्य सुझाव

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

संबंधित

अधिक