2
ध्यान केंद्रित करना
439
समर्थक

स्पॉट-डिलीवरी आर्बिट्रेज रणनीतियों का एक व्यावहारिक अन्वेषण: आदर्श से वास्तविकता तक के सफर में आने वाली चुनौतियाँ

में बनाया: 2025-11-28 14:22:49, को अपडेट: 2025-12-16 11:31:06
comments   0
hits   345

स्पॉट-डिलीवरी आर्बिट्रेज रणनीतियों का एक व्यावहारिक अन्वेषण: आदर्श से वास्तविकता तक के सफर में आने वाली चुनौतियाँ

प्रस्तावना

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

यह लेख इस आर्बिट्रेज रणनीति के विकास के दौरान सामने आई व्यावहारिक समस्याओं और विकसित किए गए समाधानों का दस्तावेजीकरण करता है।यह केवल सीखने और संदर्भ के उद्देश्यों के लिए है; इसका कोई व्यावहारिक निवेश मूल्य नहीं है।

रणनीति का मूल तर्क

डिलीवरी अनुबंध और स्पॉट मूल्य के बीच मूल्य अंतर होता है, जो सामान्यतः एक निश्चित औसत के आसपास घटता-बढ़ता रहता है। जब मूल्य अंतर बहुत अधिक बढ़ जाता है, तो सैद्धांतिक रूप से आर्बिट्रेज के अवसर मौजूद होते हैं।

शुरुआती विचार सरल था:

  • स्पॉट और डिलीवरी अनुबंधों के बीच मूल्य अंतर पर नज़र रखें।
  • जब मूल्य अंतर मानक विचलन के 2 गुना से अधिक हो जाए तो पोजीशन खोलें।
  • जब मूल्य अंतर अपने मूल मूल्य पर वापस आ जाए तो पोजीशन बंद करके लाभ कमाएं।

सुनने में तो बहुत अच्छा लगता है, है ना? लेकिन व्यवहार में, आपको पता चलेगा कि “एक पद खोलना” जैसे चरण को संभालने के लिए भी अनगिनत बारीकियाँ हैं।

पहली खामी: मूल्य अंतर की स्थिरता

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

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

function adfTest(series, maxLag=null){
  const n = series.length;
  if(n<10) throw new Error('series too short');
  if(maxLag===null) maxLag = Math.floor(12*Math.pow(n/100, 1/4));
  
  // ... ADF检验的核心计算逻辑
  
  const res = ols(rows, Ys);
  const tstat = tStat(res.beta, res.cov, 1);
  return { tStat: tstat, pValue: pval, usedLag: p };
}

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

इससे भी महत्वपूर्ण बात यह है कि एक अतिरिक्त चीज जोड़ दी गई।निरंतर विफलता प्रतिकार

if (!adfPass) {
  stationarityFailCount[deliverySymbol] = (stationarityFailCount[deliverySymbol] || 0) + 1;
} else {
  stationarityFailCount[deliverySymbol] = 0;
}

let consecutiveFails = stationarityFailCount[deliverySymbol];
let canTrade = consecutiveFails < CONFIG.consecutiveFailThreshold;

यदि परीक्षण लगातार तीन बार विफल हो जाता है तो ट्रेडिंग प्रतिबंधित है। इससे बाजार की असामान्य स्थिति में अंधाधुंध पोजीशन खोलने से बचा जा सकता है।

दूसरी समस्या: वास्तविक समय के लाभ और हानि आंकड़ों को लेकर भ्रम की स्थिति।

फ्यूचर्स अकाउंट के लिए लाभ और हानि की गणना करना आसान है; बस USDT में होने वाले बदलावों को देखें। लेकिन स्पॉट अकाउंट अलग होते हैं; उनमें USDT और क्रिप्टोकरेंसी दोनों शामिल होते हैं। इसकी गणना कैसे की जाती है?

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

सही तरीका यह हैऑर्डर ऑब्जेक्ट से औसत वास्तविक लेनदेन मूल्य निकालें।

let openSpotPrice = (openSpotOrder && openSpotOrder.AvgPrice) ? 
  openSpotOrder.AvgPrice : record.openSpotPrice;
let closeSpotPrice = closeSpotOrder.AvgPrice || currentPair.spotPrice;

फिर, वास्तविक लेनदेन मूल्य के आधार पर प्रतिफल की दर की गणना की जाती है:

// 正套:买现货+卖期货
if (record.direction === 'positive') {
  spotReturnRate = (closeSpotPrice - openSpotPrice) / openSpotPrice;
  deliveryReturnRate = (openDeliveryPrice - closeDeliveryPrice) / openDeliveryPrice;
} else {
  // 反套:卖现货+买期货
  spotReturnRate = (openSpotPrice - closeSpotPrice) / openSpotPrice;
  deliveryReturnRate = (closeDeliveryPrice - openDeliveryPrice) / openDeliveryPrice;
}

let totalReturnRate = spotReturnRate + deliveryReturnRate;
let requiredUSD = openSpotPrice * record.spotAmount;
let actualTotalPnl = totalReturnRate * requiredUSD;

यहां लाभ और हानि की गणना के तर्क पर ध्यान दें:

  • नियमित सेटउस समय स्पॉट मार्केट में लॉन्ग पोजीशन थी और फ्यूचर्स मार्केट में शॉर्ट पोजीशन थी, इसलिए स्पॉट मार्केट का लाभ/हानि = (क्लोजिंग प्राइस - ओपनिंग प्राइस) / ओपनिंग प्राइस, और फ्यूचर्स मार्केट का लाभ/हानि = (ओपनिंग प्राइस - क्लोजिंग प्राइस) / ओपनिंग प्राइस।
  • रिवर्सउस समय, स्पॉट ट्रेडिंग में शॉर्टिंग शामिल होती है जबकि फ्यूचर्स ट्रेडिंग में लॉन्ग जाना शामिल होता है, जो कि विपरीत दिशाओं में होता है।

अंत में, प्रत्येक लेन-देन के वास्तविक लाभ या हानि को जोड़कर कुल लाभ या हानि निकाली जाती है:

accumulatedProfit += actualTotalPnl;
_G('accumulatedProfit', accumulatedProfit);

तीसरी बड़ी समस्या: तरलता का जाल

असली समस्या तो यही है। 10 साल के संचालन के बाद भी, इन्वेंटर क्वांटिटेटिव प्लेटफॉर्म में वायदा अनुबंधों के लिए इतनी कम आर्बिट्रेज रणनीतियाँ क्यों हैं? इसका उत्तर सरल है:डिलीवरी अनुबंध बाजार में अपर्याप्त तरलता

प्रश्न 1: एकल-चरण लेनदेन

आर्बिट्रेज कोई काल्पनिक कहानी नहीं है जहाँ आप एक साथ कई पोजीशन खोलते हैं। वास्तविकता यह है:

  • स्पॉट ऑर्डर निष्पादित हो चुका है, लेकिन फ्यूचर्स ऑर्डर अभी भी लंबित है।
  • या फिर फ्यूचर्स ऑर्डर निष्पादित हो गया, लेकिन स्पॉट ऑर्डर रद्द कर दिया गया।

यह “एकतरफा जोखिम” का एक उत्कृष्ट उदाहरण है। एक पक्ष निवेश में है, जबकि दूसरा अभी भी निवेश से बाहर है। इस स्थिति में, कीमतों में कोई भी उतार-चढ़ाव अब आर्बिट्रेज नहीं बल्कि एकतरफा स्थिति बन जाता है।

इसका समाधान जुड़ना है।रोलबैक तंत्र

if (!deliveryOrder) {
  Log('❌ 期货卖单失败,回滚现货');
  exchanges[0].CreateOrder(pair.spotSymbol, 'sell', -1, spotAmount);
  addCooldown(pair.deliverySymbol, pair.coin, '期货卖单失败,已回滚现货');
  return false;
}

यदि कोई भी चरण विफल हो जाता है, तो पहले से निष्पादित चरण को बंद करने के लिए तुरंत एक मार्केट ऑर्डर दें, जिससे उस एक चरण का जोखिम कम हो जाएगा।

प्रश्न 2: बाजार के आदेशों को अस्वीकार भी किया जा सकता है।

इससे भी अधिक हास्यास्पद बात यह है कि कभी-कभी बाजार के ऑर्डर भी विफल हो जाते हैं। इसका कारण एक्सचेंज के जोखिम नियंत्रण या बाजार में अपर्याप्त बाजार क्षमता हो सकती है; संक्षेप में, ऑर्डर पूरा ही नहीं हो पाता।

तो मैंने ऐसा कर दिया।मार्केट ऑर्डर + लिमिट ऑर्डर की दोहरी कार्यप्रणाली

function createOrderWithFallback(exchange, symbol, direction, amount, limitPrice, orderType, maxRetry = 3) {
  let useMarketOrder = (limitPrice === -1);
  
  // 先尝试限价单
  if (!useMarketOrder) {
    orderId = exchange.CreateOrder(symbol, direction, limitPrice, amount);
    if (!orderId) {
      Log(`❌ 限价单提交失败,改用市价单`);
      useMarketOrder = true;
    }
  }
  
  // 限价单失败则用市价单
  if (useMarketOrder && !orderId) {
    orderId = exchange.CreateOrder(symbol, direction, -1, marketAmount);
  }
  
  // ... 检查订单状态,失败则重试
}

यह सिस्टम अधिकतम 3 बार पुनः प्रयास कर सकता है, और प्रत्येक प्रयास में सुरक्षा कवच के रूप में मार्केट ऑर्डर का उपयोग किया जाता है।

प्रश्न 3: स्पॉट बाइंग ऑर्डर में अमाउंट ट्रैप

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

यहां, रूपांतरण तर्क को विशेष रूप से जोड़ा गया है:

function getActualAmount(useMarket) {
  if (isSpotBuy && useMarket) {
    // 现货市价买单:需要用USDT金额
    let currentPrice = getDepthMidPrice(exchange, symbol);
    let usdtAmount = amount * currentPrice;
    Log(`  💡 现货买单转换: ${amount.toFixed(6)} 币 → ${usdtAmount.toFixed(4)} USDT`);
    return usdtAmount;
  }
  return amount;
}

लिमिट ऑर्डर में उपयोग की गई क्रिप्टोकरेंसी की राशि मार्केट ऑर्डर के लिए स्वचालित रूप से USDT में परिवर्तित हो जाती है।

चौथी समस्या: आर्बिट्रेज अवसरों का भ्रम

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

कीमतें वास्तविक समय में घटती-बढ़ती रहती हैं, और सिग्नल मिलने और पोजीशन लेने के बीच बाजार की स्थितियां बदल सकती हैं। कीमतों का अंतर कम हो सकता है, और आर्बिट्रेज के अवसर खत्म हो सकते हैं। अगर आप इस स्थिति में भी मूर्खतापूर्ण तरीके से पोजीशन लेते हैं, तो आप सिर्फ कमीशन फीस बर्बाद कर रहे हैं।

इसलिए इसे जोड़ दिया गया।द्वितीयक पुष्टिकरण तंत्र

// 开仓前重新获取实时价格并验证套利机会
Log('🔄 重新获取实时Depth盘口价格并验证套利机会...');

let realtimeSpotPrice = getDepthMidPrice(exchanges[0], pair.spotSymbol, true);
let realtimeDeliveryPrice = getDepthMidPrice(exchanges[1], pair.deliverySymbol, true);

let realtimeSpread = realtimeDeliveryPrice - realtimeSpotPrice;
let realtimeSpreadRate = realtimeSpread / realtimeSpotPrice;

// 重新计算实时Z-Score
let realtimeZScore = (realtimeSpreadRate - mu) / (sigma || 1e-6);

// 验证:实时Z-Score是否仍然满足开仓条件
if (absRealtimeZ < CONFIG.zScoreEntry) {
  Log('❌ 套利机会已消失!');
  Log('  取消开仓,避免亏损');
  return false;
}

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

पांचवीं समस्या: वायदा पदों से संबंधित विरासत संबंधी मुद्दे।

कभी-कभी, जब कोई रणनीति पुनः शुरू की जाती है या कोई पिछली स्थिति बंद की जाती है, तो फ़्यूचर्स खाते में कुछ शेष स्थितियाँ रह सकती हैं। यदि इन पर ध्यान नहीं दिया जाता है, तो नई स्थितियाँ पुरानी स्थितियों के साथ ओवरलैप हो जाएँगी, जिससे स्थिति का आकार अनियंत्रित हो जाएगा।

इसलिए इसे जोड़ दिया गया।पोजीशन खोलने से पहले जबरन लिक्विडेशनतर्क यह है:

// 检查期货现有仓位并平仓
let existingPosition = getPositionBySymbol(pair.deliverySymbol);

if (existingPosition && Math.abs(existingPosition.Amount) > 0) {
  Log('⚠️ 检测到该合约的现有仓位,执行平仓操作...');
  
  let closeDirection = existingPosition.Type === PD_LONG ? 'closebuy' : 'closesell';
  let closeAmount = Math.abs(existingPosition.Amount);
  
  let closeOrder = createOrderWithFallback(
    exchanges[1],
    pair.deliverySymbol,
    closeDirection,
    closeAmount,
    -1,
    '期货'
  );
  
  if (!closeOrder) {
    Log('❌ 平仓现有持仓失败,终止开仓');
    addCooldown(pair.deliverySymbol, pair.coin, '平仓现有持仓失败');
    return false;
  }
}

कोई भी पोजीशन खोलने से पहले, उसे पहले जांच लें। यदि कोई भी पोजीशन बची हुई है, तो उसे बंद कर दें ताकि आपका खाता पूरी तरह साफ हो जाए।

छठी प्रमुख समस्या: टिकर डेटा का लैग ट्रैप

यह संपूर्ण रणनीति विकास प्रक्रिया है।सबसे गुप्त और सबसे घातकसमस्याओं में से एक।

रणनीति के लागू होने के बाद एक विचित्र घटना देखने को मिली:

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

क्या आपने इसके बजाय मार्केट ऑर्डर का उपयोग करने की कोशिश की? परिणाम और भी बुरा था:

  • मार्केट ऑर्डर सफलतापूर्वक निष्पादित हो गया।
  • हालांकि, लेनदेन की कीमत अपेक्षित आर्बिट्रेज स्प्रेड से पूरी तरह अलग थी।
  • योजना के अनुसार किए गए आर्बिट्रेज के अवसर लेन-देन पूरा होने के बाद लाभहीन साबित हुए।

आखिर हुआ क्या? एक्सचेंज के लाइव ट्रेडिंग डेटा की बार-बार तुलना करने के बाद, आखिरकार समस्या का पता चला:

टिकर बनाम डेप्थ: डेटा के बीच मूलभूत अंतर

टिकर डेटा नवीनतम वास्तविक लेनदेन मूल्य को दर्शाता है।यह सुनने में तो ठीक लगता है, लेकिन डिलीवरी कॉन्ट्रैक्ट जैसे कम तरलता वाले बाजारों के लिए समस्याएं उत्पन्न होती हैं:

时间轴:
10:00:00 - 有人以50000成交了1张合约 → Ticker价格更新为50000
10:00:05 - 盘口挂单:买49800 / 卖50200(但没有成交)
10:00:10 - 盘口挂单:买49850 / 卖50150(但没有成交)
...
10:05:00 - Ticker价格仍然是50000(因为5分钟内没有新的成交)

क्या आपने इस समस्या पर ध्यान दिया है?शेयर की कीमत 50,000 से गिरकर 5 मिनट पहले का इतिहास बन चुकी है।हालांकि, मौजूदा वास्तविक बाजार मूल्य (ऑर्डर बुक मूल्य) 4985050150 हो सकता है।

यदि आप आर्बिट्रेज के अवसरों की गणना करने और लिमिट ऑर्डर देने के लिए 50,000 के टिकर मूल्य का उपयोग करते हैं, तो:

  1. निर्णय त्रुटिआर्बिट्रेज सिग्नल पुराने मूल्यों के आधार पर गणना किए जाते हैं।
  2. ऑर्डर विफल रहालिमिट ऑर्डर पर निर्धारित कीमत वास्तविक बाजार मूल्य से बहुत दूर है, जिसके कारण लेन-देन पूरा करना असंभव हो जाता है।
  3. बाजार में नुकसानबाजार आदेश का उपयोग करके एक सौदा करवाया गया, लेकिन वास्तविक कीमत अपेक्षित कीमत से बिल्कुल अलग थी।

डिलीवरी अनुबंधों के टिकर विशेष रूप से अविश्वसनीय क्यों होते हैं?

स्पॉट कॉन्ट्रैक्ट्स की तुलना में डिलीवरी कॉन्ट्रैक्ट्स की तरलता कहीं अधिक खराब है:

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

कम तरलता वाले अनुबंधों के लिए, टिकर मूल्य और वास्तविक ऑर्डर बुक मूल्य के बीच अंतर निम्न स्तर तक पहुँच सकता है:

  • सामान्य सीमा: 0.1% - 0.5%
  • उतार-चढ़ाव की अवधि: 1% - 3% या इससे भी अधिक

आर्बिट्रेज रणनीतियों के लिए, यह विचलन घातक है। अपेक्षित मूल्य अंतर लाभ केवल 0.5% हो सकता है, लेकिन वास्तविक लेनदेन मूल्य पूरी तरह से भिन्न हो जाता है।

समाधान: टिकर को डेप्थ डिस्क डेटा से बदलें

चूंकि टिकर भरोसेमंद नहीं है, इसलिए आइए इसका उपयोग करें…गहराई (ऑर्डर बुक की गहराई) डेटा

function getDepthMidPrice(exchange, symbol, logDetail = false) {
    let depth = exchange.GetDepth(symbol);
    if (!depth || !depth.Bids || depth.Bids.length === 0 || 
        !depth.Asks || depth.Asks.length === 0) {
        Log(`❌ 获取${symbol}盘口失败`);
        return null;
    }
    
    let bestBid = depth.Bids[0].Price;  // 最优买价
    let bestAsk = depth.Asks[0].Price;  // 最优卖价
    let midPrice = (bestBid + bestAsk) / 2;  // 中间价
    
    if (logDetail) {
        let spread = bestAsk - bestBid;
        let spreadRate = spread / midPrice * 100;
        Log(`📊 ${symbol} 盘口: Bid=${bestBid.toFixed(2)}, Ask=${bestAsk.toFixed(2)}, Mid=${midPrice.toFixed(2)}, Spread=${spread.toFixed(2)} (${spreadRate.toFixed(3)}%)`);
    }
    
    return midPrice;
}

डेप्थ डेटा के लाभ:

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

रणनीतियों की दोहरी मूल्य निर्धारण प्रणाली

अंततः अपनाया गयाटिकर + डेप्थ का हाइब्रिड समाधान

1. ऐतिहासिक डेटा अनुक्रमों को बनाए रखने के लिए टिकर का उपयोग करें।

// 用Ticker更新历史价差序列(保持连续性)
let spotTicker = exchanges[0].GetTicker(pair.spotSymbol);
let deliveryTicker = exchanges[1].GetTicker(pair.deliverySymbol);

pair.spotPrice = spotTicker.Last;
pair.deliveryPrice = deliveryTicker.Last;
pair.spread = pair.deliveryPrice - pair.spotPrice;

// 历史序列用于ADF检验、Z-Score计算
priceHistory[pair.deliverySymbol].push({
    time: Date.now(),
    spreadRate: pair.spread / pair.spotPrice,
    spread: pair.spread,
    spotPrice: pair.spotPrice,
    deliveryPrice: pair.deliveryPrice
});

ऐतिहासिक डेटा के लिए Ticker का उपयोग अभी भी क्यों किया जाता है? क्योंकि यह आवश्यक है।डेटा निरंतरतायदि ऐतिहासिक डेटा को भी डेप्थ का उपयोग करके दर्शाया जाता है, तो ऑर्डर बुक की कीमतों में उतार-चढ़ाव ऐतिहासिक अनुक्रम में असंतुलन पैदा करेगा, जिससे सांख्यिकीय विश्लेषण की सटीकता प्रभावित होगी।

2. वास्तविक समय में निर्णय लेने और स्थिति खुलने के सत्यापन के लिए डेप्थ का उपयोग करें।

// 开仓前用Depth重新验证套利机会
let realtimeSpotPrice = getDepthMidPrice(exchanges[0], pair.spotSymbol, true);
let realtimeDeliveryPrice = getDepthMidPrice(exchanges[1], pair.deliverySymbol, true);

// 基于Depth价格重新计算Z-Score
let realtimeSpread = realtimeDeliveryPrice - realtimeSpotPrice;
let realtimeSpreadRate = realtimeSpread / realtimeSpotPrice;
let realtimeZScore = (realtimeSpreadRate - mu) / (sigma || 1e-6);

// 二次验证:套利机会是否仍然存在
if (Math.abs(realtimeZScore) < CONFIG.zScoreEntry) {
    Log('❌ 套利机会已消失(基于Depth实时价格)');
    return false;
}

3. डेप्थ का उपयोग करके लिमिट ऑर्डर की कीमत की गणना करें।

// 基于Depth价格和平均价差计算限价单价格
let spreadDeviation = realtimeSpread - avgSpread;
let adjustmentRatio = Math.min(
    Math.abs(spreadDeviation) * CONFIG.limitOrderSpreadRatio,
    spreadStd * 0.5
);

if (direction === 'positive') {
    spotLimitPrice = realtimeSpotPrice + adjustmentRatio;
    deliveryLimitPrice = realtimeDeliveryPrice - adjustmentRatio;
} else {
    spotLimitPrice = realtimeSpotPrice - adjustmentRatio;
    deliveryLimitPrice = realtimeDeliveryPrice + adjustmentRatio;
}

इस तरह से गणना की गई लिमिट ऑर्डर की कीमत वास्तविक ऑर्डर बुक पर आधारित होती है, जिससे निष्पादन की संभावना काफी बढ़ जाती है।

4. डेप्थ का उपयोग करके वास्तविक समय में लाभ और हानि की गणना करें।

function calculateUnrealizedPnL(record, currentPair) {
    // 优先用Depth价格计算实时盈亏
    let currentSpotPrice = getDepthMidPrice(exchanges[0], currentPair.spotSymbol);
    let currentDeliveryPrice = getDepthMidPrice(exchanges[1], currentPair.deliverySymbol);
    
    // Depth获取失败才回退到Ticker
    if (!currentSpotPrice || !currentDeliveryPrice) {
        currentSpotPrice = currentPair.spotPrice;
        currentDeliveryPrice = currentPair.deliveryPrice;
    }
    
    // 计算盈亏...
}

वास्तविक युद्ध प्रभावों की तुलना

टिकर के उपयोग में आने वाली समस्याएं:

检测到套利信号(基于Ticker)
→ 计算限价单价格
→ 下单等待
→ 长时间不成交(价格已经不对了)
→ 改用市价单
→ 成交价格和预期差很多
→ 套利失败或微利

डेप्थ का उपयोग करने के बाद सुधार:

检测到套利信号(基于Ticker历史)
→ 用Depth重新验证(机会仍在)
→ 基于Depth计算限价单价格
→ 下单,价格贴近盘口
→ 较快成交
→ 成交价格符合预期
→ 套利成功

मूल्य सीमा आदेश मूल्य निर्धारण का अनुकूलन

अगर हम लिमिट ऑर्डर का इस्तेमाल करने जा रहे हैं, तो कीमत कैसे तय करें? अगर हम कीमत बहुत आक्रामक तरीके से तय करते हैं, तो लेन-देन पूरा नहीं होगा; अगर हम कीमत बहुत रूढ़िवादी तरीके से तय करते हैं, तो हमें अच्छी कीमत नहीं मिलेगी।

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

let spreadDeviation = realtimeSpread - avgSpread;
let adjustmentRatio = Math.min(
  Math.abs(spreadDeviation) * CONFIG.limitOrderSpreadRatio,
  spreadStd * 0.5
);

// 限制调整幅度在合理区间
let minAdjustment = realtimeSpotPrice * 0.0005;
let maxAdjustment = realtimeSpotPrice * 0.005;
adjustmentRatio = Math.max(minAdjustment, Math.min(maxAdjustment, adjustmentRatio));

यदि यह एक पूरा सेट है (जिसमें कीमत का बड़ा अंतर है):

  • स्पॉट खरीद मूल्य = गहराई मध्यबिंदु + समायोजन सीमा
  • वायदा विक्रय मूल्य = गहराई मध्यबिंदु - समायोजन सीमा

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

शीतकालीन तंत्र

किसी भी पोजीशन को खोलने का असफल प्रयास बाजार में किसी समस्या का संकेत देता है, जो अपर्याप्त तरलता या अत्यधिक अस्थिरता के कारण हो सकती है। ऐसे मामलों में, आपको तुरंत दोबारा प्रयास नहीं करना चाहिए; बल्कि शांत रहना चाहिए।

इसलिए, प्रत्येक असफल ट्रेडिंग जोड़ी पर जुर्माना लगाया गया।10 मिनट का कूलडाउन

function addCooldown(deliverySymbol, coin, reason) {
  pairCooldowns[deliverySymbol] = Date.now() + CONFIG.cooldownDuration;
  Log(`⏸️ ${deliverySymbol} 进入10分钟冷却期`);
  Log(`   原因: ${reason}`);
  _G('pairCooldowns', pairCooldowns);
}

कूलिंग-ऑफ अवधि के दौरान, बार-बार होने वाली विफलताओं और व्यर्थ लेनदेन शुल्क से बचने के लिए इस ट्रेडिंग जोड़ी के लिए कोई पोजीशन नहीं खोली जाएगी।

वर्तमान कमियां और सुधार के क्षेत्र

यह रणनीति अभी भी विकास के चरण में है, और इसमें कई ऐसे क्षेत्र हैं जिन्हें बेहतर बनाया जा सकता है:

1. विलंब की समस्या वर्तमान में, कीमतों को पोलिंग विधि द्वारा प्राप्त किया जाता है, जिसके परिणामस्वरूप काफी विलंब होता है। वास्तविक समय में कीमतों को अपडेट करने के लिए वेबसॉकेट का उपयोग करने से प्रतिक्रिया गति में काफी सुधार होगा।

2. जोखिम नियंत्रण अनुकूलन वर्तमान स्टॉप-लॉस विधि अपेक्षाकृत सरल और सीधी है, और आप निम्नलिखित पर विचार कर सकते हैं:

  • गतिशील स्टॉप लॉस (अस्थिरता के आधार पर समायोजित)
  • समय-आधारित स्टॉप-लॉस (अत्यधिक होल्डिंग समय के कारण अनिवार्य परिसमापन)
  • अधिकतम वापसी नियंत्रण

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

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

संक्षेप

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

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

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

मूल सिद्धांत: ऐतिहासिक निरंतरता बनाए रखने के लिए टिकर का उपयोग करें, और वास्तविक समय के अवसरों को भुनाने के लिए डेप्थ का उपयोग करें।

  • टिकर ऐतिहासिक डेटा विश्लेषण (एडीएफ परीक्षण, जेड-स्कोर गणना) के लिए उपयुक्त है।
  • डेप्थ वास्तविक समय में निर्णय लेने और व्यापार निष्पादन (पोजीशन खोलने का सत्यापन, लिमिट ऑर्डर का मूल्य निर्धारण, लाभ और हानि की गणना) के लिए उपयुक्त है।

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

यदि आप भी इसी तरह की रणनीति अपना रहे हैं, तो बेझिझक मुझसे इस बारे में चर्चा करें। बाज़ार जटिल है, और यही जटिलता मात्रात्मक व्यापार को इतना चुनौतीपूर्ण बनाती है।

रणनीति स्रोत कोड: https://www.fmz.com/strategy/519280