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

डिजिटल मुद्रा उच्च आवृत्ति रणनीति विस्तृत परिचय

लेखक:FMZ~Lydia, बनाया गयाः 2023-03-27 16:46:14, अद्यतन किया गयाः 2023-09-18 20:12:59

img

डिजिटल मुद्रा उच्च आवृत्ति रणनीति विस्तृत परिचय

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

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

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

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

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

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

उच्च आवृत्ति सिद्धांत

विभिन्न उच्च आवृत्ति रणनीतियाँ हैंः

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

रणनीतिक ढांचा

निम्नलिखित कोड बिनेंस स्थायी अनुबंधों के बुनियादी ढांचे पर आधारित है, मुख्य रूप से वेबसॉकेट गहराई, गहराई ऑर्डर प्रवाह ट्रेड बाजार डेटा और स्थिति की जानकारी की सदस्यता लेता है। चूंकि बाजार डेटा और खाता जानकारी को अलग से सदस्यता ली जाती है, इसलिए यह निर्धारित करने के लिए लगातार पढ़ना आवश्यक है कि क्या नवीनतम जानकारी प्राप्त की गई है। यहां इवेंटलूप (EventLoop) का उपयोग प्रत्यक्ष अंतहीन लूप से बचने और सिस्टम लोड को कम करने के लिए किया जाता है। इवेंटलूप (EventLoop) 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 are the set trading pairs
    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 के भीतर एक ही दिशा और मूल्य के साथ विभिन्न आदेशों का संग्रह है, जो खरीद और बिक्री आदेशों के आकार को दर्शाता है। इस डेटा का एक उच्च वजन है, यह माना जा सकता है कि यदि खरीद आदेशों की मात्रा बिक्री आदेशों से अधिक है, तो यह एक खरीदार-प्रभुत्व वाला बाजार है।
  • ऑर्डर आवृत्ति या ऑर्डर अंतराल, यह लेनदेन-दर-लेनदेन डेटा पर भी आधारित है, पहले उल्लिखित औसत लेनदेन राशि समय की अवधारणा को ध्यान में नहीं रखती है और पूरी तरह से सटीक नहीं है। यदि एक दिशा में एक आदेश में एक छोटी औसत लेनदेन राशि है लेकिन एक उच्च आवृत्ति है, तो यह अभी भी उस दिशा की ताकत में योगदान देता है। औसत लेनदेन राशि * ऑर्डर आवृत्ति निश्चित अंतराल पर कुल लेनदेन राशि का प्रतिनिधित्व करती है और प्रत्यक्ष तुलना के लिए उपयोग की जा सकती है। आदेशों का आगमन एक पोइसन वितरण का पालन करता है, जिसका उपयोग केवल यह अनुमान लगाने के लिए किया जा सकता है कि एक विशिष्ट समय अंतराल के भीतर आने वाले आदेशों की कुल राशि कितनी है और ऑर्डर पदों को रखने के लिए संदर्भ प्रदान करता है।
  • औसत स्प्रेड, यह समझने के लिए अपेक्षाकृत आसान है, यानी, एक बेचना शून्य एक खरीदना। वर्तमान बाजार में ज्यादातर 1-टिक स्प्रेड होता है। यदि स्प्रेड बड़ा हो जाता है, तो इसका मतलब अक्सर होता है कि बाजार का रुझान है।
  • औसत खरीद और बिक्री मूल्य, प्रत्येक लेनदेन की औसत कीमत की गणना अलग से करें, और इसे नवीनतम मूल्य के साथ तुलना करें। यदि हालिया खरीद आदेश मूल्य औसत खरीद आदेश मूल्य से अधिक है, तो यह प्रारंभिक रूप से न्याय किया जा सकता है कि एक सफलता हुई है।

रणनीतिक तर्क

अल्पकालिक प्रवृत्ति निर्धारित करें

//bull represents short-term bullish, bear represents short-term bearish
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]
}

यहाँ, हम अभी भी पुराने दृष्टिकोण को अपनाते हैं, आवश्यक गहराई तक पुनरावृत्ति करते हैं। यह मानते हुए कि 10 सिक्के 1 सेकंड में कारोबार किए जा सकते हैं, नए लंबित आदेशों पर विचार किए बिना, बिक्री मूल्य उस स्थिति पर निर्धारित किया जाता है जहां 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)//Unreturned tasks will continue to wait next time
        }
    })
    jobs = new_jobs
    tasks = []
}

/*
Write the required task parameters in param
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% से अधिक का हिसाब रखना संभव है।
  • बंद होने वाली पोजीशनों की लाभ दर, औसत बंद होने वाली पोजीशन की लाभ दर की गणना करने से यह तय होता है कि रणनीति प्रभावी है या नहीं।
  • छूट अनुपात, कुल राजस्व में छूट का अनुपात, रणनीति द्वारा छूट पर निर्भरता की डिग्री को दर्शाता है। एक्सचेंज प्लेटफार्मों में छूट के अलग-अलग स्तर होते हैं, और अधिक छूट के साथ लाभदायक रणनीति लाभदायक हो सकती है।
  • ऑर्डर विफलता दर, ऑर्डर केवल ऑर्डर देकर ही कारोबार किया जाता है। ऑर्डर देने में देरी के कारण, इसे नहीं रखा जा सकता है। यदि यह अनुपात अधिक है, तो इसका मतलब है कि रणनीति की गति फायदेमंद नहीं है।
  • पूर्ण किए गए आदेशों का अनुपात, प्लेटफार्मों में अक्सर लेनदेन दर के लिए आवश्यकताएं होती हैं। यदि यह बहुत कम है, तो इसका मतलब है कि रणनीति आदेशों को बहुत बार रद्द करती है और इसे हल करने की आवश्यकता होती है।
  • औसत खरीद और बिक्री आदेश दूरी, जो आदेश रखने की रणनीति और बाजार के बीच के अंतर को दर्शाता है, हम देख सकते हैं कि उनमें से अधिकांश अभी भी एक खरीदने और एक बेचने की स्थिति में हैं।

अन्य सुझाव

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

संबंधित

अधिक