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 };
}

প্রাথমিকভাবে, আমরা ভ্যারিয়েন্স রেশিও টেস্ট, হাফ-লাইফ টেস্ট এবং কেএস টেস্ট সহ বেশ কিছু পরীক্ষা যোগ করেছি, কিন্তু আমরা দেখতে পেয়েছি যে অনেক বেশি পরীক্ষার ফলে পজিশন খোলার সুযোগ উল্লেখযোগ্যভাবে কমে গেছে। শেষ পর্যন্ত, আমরা এটিকে কেবল ADF টেস্টে সরলীকৃত করেছি এবং 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 এবং ক্রিপ্টোকারেন্সি উভয়ই থাকে। আপনি কীভাবে এটি গণনা করবেন?

এখানে এমন একটি বিশদ বিবরণ রয়েছে যা সহজেই উপেক্ষা করা যায়:ট্রেডিংয়ের সাথে সাথে স্পট পণ্য রাখার খরচ পরিবর্তিত হবে।উদাহরণস্বরূপ, যদি আপনি ১০০ USDT দিয়ে একটি কয়েন কিনেন, ৯০ USDT দিয়ে বিক্রি করেন এবং তারপর ৮৫ USDT দিয়ে ফেরত কিনেন, তাহলে আপনার খরচের ভিত্তি আর প্রাথমিক ১০০ 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);

তৃতীয় প্রধান সমস্যা: তরলতার ফাঁদ

এটাই আসল মাথাব্যথা। ১০ বছর ধরে কাজ করার পরও, ইনভেন্টর কোয়ান্টিটেটিভ প্ল্যাটফর্মের ফিউচার চুক্তির জন্য এত কম আরবিট্রেজ কৌশল কেন? উত্তরটি সহজ:ডেলিভারি চুক্তি বাজারে অপর্যাপ্ত তরলতা

প্রশ্ন ১: একক-পা লেনদেন

আরবিট্রেজ কোন রূপকথার গল্প নয় যেখানে আপনি একই সাথে পজিশন খুলবেন। বাস্তবতা হল:

  • স্পট অর্ডারটি কার্যকর করা হয়েছে, কিন্তু ফিউচার অর্ডারটি এখনও বিচারাধীন।
  • অথবা ফিউচার অর্ডার কার্যকর করা হয়েছিল, কিন্তু স্পট অর্ডার বাতিল করা হয়েছিল।

এটি “এক-পায় ঝুঁকি” এর একটি ক্লাসিক উদাহরণ। একটি পা ভেতরে, অন্যটি বাইরে। এই মুহুর্তে, যেকোনো মূল্যের ওঠানামা আর সালিশ নয় বরং একতরফা অবস্থান।

সমাধান হল যোগদান করারোলব্যাক প্রক্রিয়া

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

যদি কোনও লেগ ব্যর্থ হয়, তাহলে অবিলম্বে একটি মার্কেট অর্ডার দিন যাতে ইতিমধ্যেই সম্পাদিত লেগটি বন্ধ করে দেওয়া হয়, যাতে সেই একক লেগটির ঝুঁকি হ্রাস পায়।

প্রশ্ন ২: বাজারের অর্ডারও প্রত্যাখ্যান করা যেতে পারে।

আরও অদ্ভুতভাবে, কখনও কখনও বাজারের অর্ডারগুলিও ব্যর্থ হয়। এটি বিনিময় ঝুঁকি নিয়ন্ত্রণ বা অপর্যাপ্ত বাজার গভীরতার কারণে হতে পারে; সংক্ষেপে, অর্ডারটি কেবল সম্পন্ন হবে না।

তাই আমি এটা করলাম।বাজার আদেশ + সীমা আদেশের দ্বৈত প্রক্রিয়া

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);
  }
  
  // ... 检查订单状态,失败则重试
}

সিস্টেমটি সর্বোচ্চ ৩ বার পুনরায় চেষ্টা করতে পারে, প্রতিটি প্রচেষ্টায় নিরাপত্তা জাল হিসেবে বাজারের অর্ডার ব্যবহার করা হয়।

প্রশ্ন ৩: স্পট বাইং অর্ডারে অ্যামাউন্ট ট্র্যাপ

এই ঝুঁকিটি বিশেষভাবে গোপন এবং অতিরিক্ত সতর্কতা প্রয়োজন। ফিউচার মার্কেট অর্ডারের পরিমাণ হল…কয়েনের সংখ্যাতবে, স্পট মার্কেট অর্ডার কেনার সময় অর্ডার করা পরিমাণ হল…USDT পরিমাণ

এখানে, একটি রূপান্তর যুক্তি বিশেষভাবে যোগ করা হয়েছে:

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;
}

অর্ডার দেওয়ার আগে, রিয়েল-টাইম মূল্য পুনরায় আনুন, Z-স্কোর পুনরায় গণনা করুন এবং যদি আপনি নিশ্চিত হন যে সুযোগটি এখনও বিদ্যমান, তবেই অর্ডারটি কার্যকর করুন।

পঞ্চম বিপদ: ফিউচার পজিশনের সাথে সম্পর্কিত উত্তরাধিকার সংক্রান্ত সমস্যা।

কখনও কখনও, যখন কোনও কৌশল পুনরায় চালু করা হয় বা পূর্ববর্তী কোনও অবস্থান বন্ধ করা হয়, তখন ফিউচার অ্যাকাউন্টে অবশিষ্ট অবস্থান থাকতে পারে। যদি এইগুলি সমাধান না করা হয়, তবে নতুন অবস্থানগুলি পুরানো অবস্থানগুলির সাথে ওভারল্যাপ করবে, যার ফলে নিয়ন্ত্রণের বাইরে অবস্থানের আকার তৈরি হবে।

তাই এটি যোগ করা হয়েছিল।পজিশন খোলার আগে জোরপূর্বক লিকুইডেশনযুক্তি:

// 检查期货现有仓位并平仓
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 এর টিকার মূল্য ব্যবহার করেন, তাহলে:

  1. বিচার ত্রুটিআরবিট্রেজ সিগন্যালগুলি পুরানো দামের উপর ভিত্তি করে গণনা করা হয়।
  2. অর্ডার ব্যর্থ হয়েছেলিমিট অর্ডারের দাম প্রকৃত বাজার মূল্যের থেকে অনেক বেশি, যার ফলে লেনদেন সম্পন্ন করা অসম্ভব হয়ে পড়ে।
  3. বাজারের ক্ষতিজোর করে ট্রেড করার জন্য একটি মার্কেট অর্ডার ব্যবহার করা হয়েছিল, কিন্তু প্রকৃত দাম প্রত্যাশার চেয়ে সম্পূর্ণ ভিন্ন ছিল।

ডেলিভারি চুক্তির টিকারগুলি কেন বিশেষভাবে অবিশ্বস্ত?

ডেলিভারি চুক্তির তারল্য স্পট চুক্তির তুলনায় অনেক খারাপ:

  • স্পট মার্কেটপ্রতি সেকেন্ডে প্রচুর সংখ্যক লেনদেন ঘটে এবং টিকারের দামগুলি প্রায় রিয়েল টাইমে খুব কম সময়ের ব্যবধানে আপডেট করা হয়।
  • ডেলিভারি চুক্তিএকটি লেনদেন হতে কয়েক মিনিট বা তারও বেশি সময় লাগতে পারে; টিকারের দাম উল্লেখযোগ্যভাবে পিছিয়ে যায়।

দুর্বল তরলতা সহ চুক্তির ক্ষেত্রে, টিকার মূল্য এবং প্রকৃত অর্ডার বইয়ের মূল্যের মধ্যে বিচ্যুতি হতে পারে:

  • স্বাভাবিক পরিসীমা: ০.১% - ০.৫%
  • ওঠানামার সময়কাল: ১% - ৩% বা তারও বেশি

আরবিট্রেজ কৌশলের ক্ষেত্রে, এই বিচ্যুতি মারাত্মক। প্রত্যাশিত মূল্য পার্থক্যের সুবিধা মাত্র ০.৫% হতে পারে, কিন্তু প্রকৃত লেনদেনের মূল্য সম্পূর্ণ ভিন্ন বলে প্রমাণিত হয়।

সমাধান: টিকারকে ডেপথ ডিস্ক ডেটা দিয়ে প্রতিস্থাপন করুন

যেহেতু টিকার অবিশ্বস্ত, আসুন ব্যবহার করি…গভীরতা (অর্ডার বইয়ের গভীরতা) ডেটা

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;
}

ডেপথ ডেটার সুবিধা:

  • রিয়েল-টাইমঅর্ডার বইয়ের বর্তমান প্রকৃত অবস্থা প্রতিফলিত করে, কোনও বিলম্ব ছাড়াই।
  • নির্ভুলতাআপনার অর্ডার এই অর্ডার বইয়ের সাথে মিলে যাবে, এবং এটিই আসল বাজার মূল্য।
  • কার্যকারিতাঅর্ডার বইয়ের দামের উপর ভিত্তি করে গণনা করা লিমিট অর্ডারগুলি কার্যকর হওয়ার সম্ভাবনা বেশি।

দ্বৈত মূল্য নির্ধারণের কৌশল

অবশেষে গৃহীতটিকার + গভীরতার হাইব্রিড সমাধান

১. ঐতিহাসিক তথ্যের ক্রম বজায় রাখতে টিকার ব্যবহার করুন।

// 用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
});

ঐতিহাসিক তথ্যের জন্য কেন এখনও টিকার ব্যবহার করা হয়? কারণ এটি প্রয়োজনীয়।ডেটা ধারাবাহিকতাযদি ঐতিহাসিক তথ্যও Depth ব্যবহার করে উপস্থাপন করা হয়, তাহলে অর্ডার বইয়ের দামের ওঠানামা ঐতিহাসিক ক্রমানুসারে অসঙ্গতি সৃষ্টি করবে, যা পরিসংখ্যানগত বিশ্লেষণের নির্ভুলতাকে প্রভাবিত করবে।

2. রিয়েল-টাইম বিচার এবং অবস্থান খোলার যাচাইয়ের জন্য Depth ব্যবহার করুন।

// 开仓前用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 ব্যবহার করে লিমিট অর্ডার মূল্য গণনা করুন।

// 基于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;
}

এইভাবে গণনা করা লিমিট অর্ডার মূল্য প্রকৃত অর্ডার বইয়ের উপর ভিত্তি করে তৈরি করা হয়, যা কার্যকর করার সম্ভাবনা অনেকাংশে বৃদ্ধি করে।

৪. ডেপথ ব্যবহার করে রিয়েল-টাইম লাভ এবং ক্ষতি গণনা করুন।

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));

যদি এটি একটি সম্পূর্ণ সেট হয় (বড় দামের পার্থক্য সহ):

  • স্পট ক্রয় মূল্য = গভীরতা মধ্যবিন্দু + সমন্বয় পরিসর
  • ফিউচার বিক্রয় মূল্য = গভীরতার মধ্যবিন্দু - সমন্বয় পরিসর

এর ফলে লেনদেনগুলি অনুকূল মূল্যের পার্থক্যে সম্পন্ন করা সম্ভব হয়, একই সাথে অর্ডার বই থেকে খুব বেশি দূরে থাকা এড়ানো যায় এবং এর ফলে লেনদেন মিস না হয়।

কুলিং সময় ব্যবস্থা

পজিশন খোলার যেকোনো ব্যর্থ প্রচেষ্টা বাজারে একটি সমস্যা নির্দেশ করে, যা অপর্যাপ্ত তরলতা বা অতিরিক্ত অস্থিরতার কারণে হতে পারে। এই ধরনের ক্ষেত্রে, আপনার অবিলম্বে আবার চেষ্টা করা উচিত নয়; পরিবর্তে, আপনার শান্ত থাকা উচিত।

অতএব, প্রতিটি ব্যর্থ ট্রেডিং জোড়ার জন্য একটি করে জরিমানা যোগ করা হয়েছিল।১০ মিনিটের কুলডাউন

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

কুলিং-অফ পিরিয়ডের সময়, বারবার ব্যর্থতা এবং লেনদেন ফি নষ্ট হওয়া এড়াতে এই ট্রেডিং পেয়ারের জন্য কোনও পজিশন খোলা হবে না।

বর্তমান ত্রুটি এবং উন্নতির ক্ষেত্রগুলি

এই কৌশলটি এখনও কেবলমাত্র একটি কাজ চলছে, এবং এমন অনেক ক্ষেত্র রয়েছে যা অপ্টিমাইজ করা যেতে পারে:

১. বিলম্বের সমস্যা বর্তমানে, পোলিং পদ্ধতি ব্যবহার করে দাম পুনরুদ্ধার করা হয়, যার ফলে উল্লেখযোগ্য বিলম্ব ঘটে। রিয়েল-টাইম মূল্য আপডেটের জন্য ওয়েবসকেটে স্যুইচ করলে প্রতিক্রিয়ার গতি উল্লেখযোগ্যভাবে উন্নত হবে।

2. ঝুঁকি নিয়ন্ত্রণ অপ্টিমাইজেশন বর্তমান স্টপ-লস পদ্ধতি তুলনামূলকভাবে সহজ এবং সোজা, এবং আপনি বিবেচনা করতে পারেন:

  • গতিশীল স্টপ লস (অস্থিরতার উপর ভিত্তি করে সমন্বয় করা হয়েছে)
  • সময়-ভিত্তিক স্টপ-লস (অতিরিক্ত হোল্ডিং সময়ের কারণে জোরপূর্বক লিকুইডেশন)
  • সর্বাধিক প্রত্যাহার নিয়ন্ত্রণ

৩. স্লিপেজ ম্যানেজমেন্ট অর্ডার বইয়ের গভীরতা এবং সাম্প্রতিক লেনদেনের পরিমাণের মতো বিষয়গুলির উপর ভিত্তি করে গতিশীলভাবে সামঞ্জস্য করার মাধ্যমে, সীমা অর্ডারের জন্য মূল্য নির্ধারণের কৌশলটিকে আরও বুদ্ধিমান করা যেতে পারে।

৪. ডেপথ ডেটার আরও প্রয়োগ এটি অর্ডার বইয়ের ভারসাম্যহীনতা বিশ্লেষণ করতে পারে, মূল্যের প্রবণতা পূর্বাভাস দিতে পারে এবং সালিশের সাফল্যের হার উন্নত করতে পারে।

সারসংক্ষেপ

সালিশ কৌশলগুলি আকর্ষণীয় শোনালেও বাস্তবে এটা স্পষ্ট যে আদর্শ এবং বাস্তবতার মধ্যে অসংখ্য ফাঁদ রয়েছে।

  • স্থিরতা পরীক্ষার অসুবিধাগুলি
  • লাভ-ক্ষতির পরিসংখ্যানের ত্রুটি
  • অপর্যাপ্ত তরলতার ঝুঁকি
  • একক-পা লেনদেনের ক্ষতিগুলি
  • বাজারের অর্ডার ব্যর্থতার ক্ষতি
  • স্পট ক্রয়ের পরিমাণে অসুবিধা
  • আরবিট্রেজের সুযোগ হারিয়ে যাওয়ার ঝুঁকি
  • অবশিষ্ট অবস্থানের গর্ত
  • সবচেয়ে মারাত্মক ত্রুটি হল টিকার মেকানিজমের ল্যাগ।

বিশেষ করে, টিকার ডেটা পিছিয়ে থাকার বিষয়টি সমগ্র কৌশল উন্নয়ন প্রক্রিয়ার একটি সমস্যা।সবচেয়ে সহজে উপেক্ষা করা হলেও সবচেয়ে বেশি প্রভাব ফেলেঅসুবিধাগুলি। কম তরলতা সহ ডেলিভারি চুক্তি বাজারের জন্য:

মূল নীতি: ঐতিহাসিক ধারাবাহিকতা বজায় রাখতে টিকার ব্যবহার করুন এবং রিয়েল-টাইম সুযোগগুলি কাজে লাগাতে ডেপথ ব্যবহার করুন।

  • টিকার ঐতিহাসিক তথ্য বিশ্লেষণের জন্য উপযুক্ত (ADF পরীক্ষা, Z-স্কোর গণনা)।
  • ডেপথ রিয়েল-টাইম জাজমেন্ট এবং ট্রেড এক্সিকিউশনের জন্য উপযুক্ত (পজিশন ওপেনিং যাচাইকরণ, লিমিট অর্ডার প্রাইসিং, লাভ এবং ক্ষতির হিসাব)।

এই প্রবন্ধে অনুসন্ধান প্রক্রিয়ার সময় যেসব সমস্যা এবং সমাধানের পথ খুঁজে বের করা হয়েছে তা লিপিবদ্ধ করা হয়েছে, এবং আশা করি এটি সকলের জন্য কিছু তথ্যসূত্র প্রদান করতে পারবে।আবারও বলছি, এই নিবন্ধটি শুধুমাত্র শিক্ষামূলক এবং আলোচনার উদ্দেশ্যে। কোডটি এখনও তৈরির অধীনে রয়েছে এবং সরাসরি লাইভ ট্রেডিংয়ে ব্যবহার করা উচিত নয়।

যদি আপনিও একই ধরণের কৌশল ব্যবহার করেন, তাহলে আমার সাথে এটি নিয়ে আলোচনা করতে দ্বিধা করবেন না। বাজার জটিল, এবং ঠিক এই জটিলতাই পরিমাণগত ট্রেডিংকে এত চ্যালেঞ্জিং করে তোলে।

কৌশল সোর্স কোড: https://www.fmz.com/strategy/519280