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

क्रिप्टोकरेंसी में लीड-लैग आर्बिट्रेज का परिचय (3)

लेखक:FMZ~Lydia, बनाया गयाः 2024-12-25 16:04:11, अद्यतन किया गयाः

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

निम्नलिखित हैसार्वजनिक संहिता का सरलीकरणइस मूल रणनीति का कोड सिद्धांत बहुत सरल है और एक बार बहुत लाभदायक था। यह वर्तमान में अनुपलब्ध है और केवल संदर्भ के लिए है।

लीड-लैग उच्च आवृत्ति रणनीति सिद्धांत

तथाकथित लीड-लैग को समझा जा सकता है क्योंकि कुछ एक्सचेंजों की कीमतें (या कुछ संकेतक) समग्र बाजार परिवर्तनों में अधिक अग्रणी होंगी, जबकि अन्य एक्सचेंजों या अन्य संकेतक अपेक्षाकृत पिछड़ेंगे। इस रणनीति में, Price_1, Price_2, Price_3 क्रमशः विभिन्न एक्सचेंजों की बाजार स्थितियों का प्रतिनिधित्व करते हैं। वे मुख्यधारा के एक्सचेंजेस हैं। क्योंकि वे बाजार की खबरों के प्रति अधिक संवेदनशील हैं, या उनकी ट्रेडिंग गहराई और प्रतिभागी प्रकार अलग हैं, एक बार बड़े खरीद या बिक्री ऑर्डर होने के बाद, इन एक्सचेंजों की कीमतें पहले उतार-चढ़ाव करेंगी। वास्तविक ट्रेडिंग एक्सचेंजेस मिलान तंत्र और ट्रेडिंग समूहों जैसे कारकों के कारण मूल्य उतार-चढ़ाव में थोड़ा पिछड़ जाएंगे। इस समय, एक्सचेंजों की स्थिति लीड, कुछ लेग दिखाई देती है।

मल्टी-एक्सचेंज ऑर्डर बुक क्रॉल करना

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

रुझान संकेत न्याय

रणनीति मुख्य रूप से तीन बाहरी एक्सचेंजों (okex, binance, huobipro) के मूल्य परिवर्तनों पर केंद्रित हैः

यहाँ, प्रत्येक रुझान X का निर्धारण वर्तमान मूल्य और पिछली कीमत के बीच एक निश्चित सीमा (स्तर * मूल्य_वृद्धि) से अधिक के अंतर से होता है। तीनों एक्सचेंजों के ऊपर/नीचे संकेतों को जोड़ने के बाद, यदि समग्र रुझान > 0 है, तो इसका मतलब है कि बाजार आम तौर पर बढ़ रहा है, और रणनीति खरीदना है; यदि रुझान < 0 है, तो इसका मतलब है कि बाजार आम तौर पर गिर रहा है, और रणनीति बेचना है।

एक दिशात्मक आदेश और जोखिम नियंत्रण

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

इसके अतिरिक्त, यह रणनीति एक उच्च आवृत्ति रणनीति है। आपको प्रत्येक आदेश के लाभ या हानि पर ध्यान देने की आवश्यकता नहीं है, न ही आपको हानि को रोकने की आवश्यकता है। आप तब तक जारी रख सकते हैं जब तक लाभ कमाने की संभावना है।

एफएमजेड रणनीति का कार्यान्वयन

पैरामीटर सेटिंग्स

// Hyperparameter settings
const SYMBOL = "BTC_USDT"; // Trading pair
const PRICE_INCREMENT = 0.1; // Price increment
const LEVEL = 10; // Sensitivity of trend judgment
const RATIO = 10; // Order price adjustment ratio
const INTERVAL = 200; // Time interval (milliseconds)
const S_AMOUNT = 0.02; // Default transaction volume
const MIN_AMOUNT = 0.005; // Minimum transaction volume

// Initial state
let buyOrders = [];
let sellOrders = [];
let previousPrices = [0, 0, 0]; // Store the previous price
let loop = 0;

मूल तर्कः डेटा प्राप्त करना और रुझानों का आकलन करना

// Get order book data
function fetchOrderBooks() {
    let orderBooks = [];
    let tasks = [];

    // Start asynchronous order book acquisition tasks for all exchanges
    for (let i = 0; i < exchanges.length; i++) {
        // Assume that each exchange object can call the Go method
        let task = exchanges[i].Go("GetDepth");
        tasks.push({ index: i, task: task });
    }

    // Wait for all tasks to complete and collect results
    for (let i = 0; i < tasks.length; i++) {
        let { index, task } = tasks[i];
        try {
            // Waiting for an asynchronous task to return a result
            let depth = task.wait(1000);

            // Check if the returned data is valid
            if (!depth || !depth.Bids || !depth.Asks) {
                throw new Error("The returned order book data is invalid");
            }

            // Add valid order book data to the result array
            orderBooks[index] = depth;
        } catch (error) {
            // Recording error logs
            Log(`Failed to obtain the order book of exchange ${index}: ${error.message}`);

            // Added default order book data to avoid crashes
            orderBooks[index] = {
                Bids: [[0, 0]],
                Asks: [[0, 0]]
            };
        }
    }

    return orderBooks;
}


// Judge the trends
function calculateTrend(orderBooks) {
    let trends = [];
    for (let i = 0; i < orderBooks.length; i++) {
        const midPrice = (orderBooks[i].Bids[0][0] + orderBooks[i].Asks[0][0]) / 2;
        if (midPrice > previousPrices[i] + LEVEL * PRICE_INCREMENT) {
            trends.push(1); // Upward trend
        } else if (midPrice < previousPrices[i] - LEVEL * PRICE_INCREMENT) {
            trends.push(-1); // Downward trend
        } else {
            trends.push(0); // No significant trend
        }
        previousPrices[i] = midPrice; // Update price record
    }
    return trends.reduce((a, b) => a + b, 0); // Return to overall trend
}

ऑर्डर देने और रद्द करने की प्रक्रिया

// Cancel all pending orders
function cancelOrders(orders) {
    for (let orderId of orders) {
        try {
            exchanges[0].CancelOrder(orderId); // Use the main exchange by default
            Log(`Cancel order: ${orderId}`);
        } catch (error) {
            Log(`Failed to cancel order: ${error.message}`);
        }
    }
}

// Create a buy order
function createBuyOrder(price, amount) {
    try {
        const orderId = exchanges[0].Buy(price, amount);
        buyOrders.push(orderId);
        Log(`Create a buy order: price ${price}, quantity ${amount}`);
    } catch (error) {
        Log(`Failed to create buy order: ${error.message}`);
    }
}

// Create a sell order
function createSellOrder(price, amount) {
    try {
        const orderId = exchanges[0].Sell(price, amount);
        sellOrders.push(orderId);
        Log(`Create a sell order: price ${price}, quantity ${amount}`);
    } catch (error) {
        Log(`Failed to create sell order: ${error.message}`);
    }
}

मुख्य रणनीति तर्क

function main() {
    while (true) {
        try {
            // Get order book data
            const orderBooks = fetchOrderBooks();

            // Calculate trends
            const trend = calculateTrend(orderBooks);
            Log(`Current trend: ${trend}`);

            // Cancel pending order
            cancelOrders(buyOrders);
            cancelOrders(sellOrders);
            buyOrders = [];
            sellOrders = [];

            // Order based on trends
            if (trend > 0 && loop > 0) {
                const price = _N(orderBooks[0].Bids[0][0] + RATIO * PRICE_INCREMENT, 2);
                const amount = _N(Math.max(S_AMOUNT, MIN_AMOUNT), 4);
                createBuyOrder(price, amount);
            } else if (trend < 0 && loop > 0) {
                const price = _N(orderBooks[0].Asks[0][0] - RATIO * PRICE_INCREMENT, 2);
                const amount = _N(Math.max(S_AMOUNT, MIN_AMOUNT), 4);
                createSellOrder(price, amount);
            }

            // Loop count and interval
            loop++;
            Sleep(INTERVAL);

        } catch (error) {
            Log(`Main logic error: ${error.message}`);
        }
    }
}

रणनीति की विफलता के कारणों का विश्लेषण

बाजार कुशल होते जा रहे हैं

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

विनिमय प्रतिबंध या शुल्क परिवर्तन

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

तरलता में गिरावट और फिसलन

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

बाजार की अस्थिरता में परिवर्तन

कुछ रणनीतियाँ उच्च अस्थिरता या विशिष्ट अवधि के तहत बहुत अच्छी तरह से काम करती हैं। जब बाजार फ्लैट होता है या अस्थिरता कम हो जाती है और लाभप्रदता कम हो जाती है, तो रणनीति अपना उपयुक्त वातावरण खो देती है और यहां तक कि अक्सर नुकसान भी हो सकता है।

सारांश

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


अधिक