⚠️ গুরুত্বপূর্ণ সতর্কতা
এই স্ট্র্যাটেজি পড়ার এবং ব্যবহার করার আগে, অনুগ্রহ করে নিম্নলিখিত তিনটি বিষয় লক্ষ্য রাখুন:
1. কৌশলটিতে অবস্থান খোলার সুযোগের জন্য ধৈর্য্য প্রয়োজন
বিনান্স থেকে কন্ট্রাক্ট ডিলিস্ট করা একটি কম-ফ্রিকোয়েন্সি ঘটনা, প্রতিদিন ঘটে না। স্ট্র্যাটেজি চালু করার পর প্রথম অবস্থান খুলতে কয়েকদিন বা তারও বেশি সময় লেগে যেতে পারে। প্রোগ্রামটি বেশিরভাগ সময় "স্ট্যান্ডবাই মনিটরিং" মোডে থাকে। দীর্ঘ অপেক্ষার জন্য মানসিকভাবে প্রস্তুত থাকুন। স্বল্প সময়ে কোনো ট্রেড না হলে কৌশলটি অকার্যকর মনে করবেন না।
2. পজিশন ওপেন করার সময় সনাক্তকরণে উন্নতির সুযোগ রয়েছে
এই নিবন্ধে প্রতি ১৫ সেকেন্ডে fapi/v1/exchangeInfo এন্ডপয়েন্ট পোলিং করে এবং deliveryDate ফিল্ডের পরিবর্তনের মাধ্যমে ডিলিস্ট সিগন্যাল শনাক্ত করার পদ্ধতি ব্যবহার করা হয়েছে। এই পদ্ধতিতে কিছু লেটেন্সি আছে, যা দ্রুততম পথ নয়। পাঠক নিজের প্রয়োজন অনুযায়ী সনাক্তকরণ পদ্ধতি উন্নত করতে পারেন, যেমন: পোলিং ব্যবধান কমানো, বিনান্স ঘোষণা API সমান্তরালে মনিটর করা, WebSocket পুশ সাবস্ক্রাইব করা, একাধিক উৎসের সিগন্যাল ক্রস-ভেরিফিকেশন করা ইত্যাদি, যাতে দ্রুত বাজারে প্রবেশ করা যায়। যত দ্রুত প্রবেশ করবেন, প্রথম তীব্র পতনের সর্বোচ্চ লাভ তত বেশি পাবেন।
3. সময়মতো স্ট্র্যাটেজি বন্ধ করুন, লাভ ফিরিয়ে নেওয়া রোধ করুন
বাস্তব ট্রেডিংয়ে দেখা গেছে, সমস্ত ডিলিস্ট করা কয়েন নিয়মিতভাবে ধীরে ধীরে কমে না। কিছু কয়েন ঘোষণার পর তীব্রভাবে পড়ে, তারপর কয়েক ঘণ্টা থেকে এক দিনের মধ্যে ধীরে ধীরে ফিরে আসে, এমনকি ঘোষণার আগের দামেও পৌঁছাতে পারে। সময়মতো বন্ধ না করলে প্রাথমিক জমা হওয়া ফ্লোটিং লাভ পুনরুদ্ধারের সময় ব্যাপকভাবে হ্রাস পায়, এমনকি লাভ লোকসানে পরিণত হতে পারে।
সক্রিয় প্রস্থান সংকেত হিসাবে নিম্নলিখিত যেকোনো একটি শর্ত সেট করার পরামর্শ দেওয়া হচ্ছে:
-- পূর্বনির্ধারিত লাভ লক্ষ্যে পৌঁছালে অবিলম্বে সব অবস্থান বন্ধ করুন;
-- দাম ডিলিস্টের পর সর্বনিম্ন বিন্দু থেকে নির্দিষ্ট শতাংশ (যেমন ২০%-৩০%) পুনরুদ্ধার হলে জোর করে অবস্থান বন্ধ করুন;
-- অবস্থানের রিট্রেসমেন্ট সর্বোচ্চ লাভের একটি নির্দিষ্ট শতাংশে (যেমন ৩০%-৫০%) পৌঁছালে লাভ সুরক্ষা ট্রিগার করুন।
ডিলিস্টের ৬০ মিনিট আগে প্যাসিভভাবে অবস্থান বন্ধ করার জন্য অপেক্ষা করবেন না – এটি একটি নিরাপত্তা ব্যবস্থা, সর্বোত্তম প্রস্থানের সময় নয়।
ভূমিকা
বিনান্স ফিউচার বাজারে একটি বিশেষ ট্রেডিং সুযোগ রয়েছে যা অধিকাংশ লোক উপেক্ষা করে – কন্ট্রাক্ট ডিলিস্ট ইভেন্ট।
প্রতি কিছুদিন পর, বিনান্স ঘোষণা করে যে কিছু পারপেচুয়াল কন্ট্রাক্ট যার লিকুইডিটি কম বা ট্রেডিং ভলিউম কম, সেগুলো বাতিল করা হবে। ঘোষণার মুহূর্তেই বাজার দ্রুত প্রতিক্রিয়া দেখায়: লং পজিশনধারী ট্রেডাররা বাধ্য হয়ে অবস্থান বন্ধ করে, প্যানিক সেলিং শুরু হয়, কয়েনের দাম ঘোষণার পর কয়েক মিনিটের মধ্যে তীব্রভাবে কমে যায়, তারপর দীর্ঘ সময় ধরে একটি অস্থির নিম্নমুখী প্রবণতা দেখা যায়, শেষ পর্যন্ত ডিলিস্ট হওয়া পর্যন্ত।
উদাহরণস্বরূপ, এই MLNUSDT কেসটি দেখা যাক:
আধা ঘণ্টার মধ্যে প্রায় এক-তৃতীয়াংশ কমে গেছে, এবং পুরো ডিলিস্ট সময়কাল সাধারণত কয়েক দিন স্থায়ী হয়, সেই সময় দাম নিম্ন স্তরে অস্থির থাকতে থাকে। এই ধরনের দামের গতি শর্ট পজিশনের জন্য আদর্শ।
কিন্তু ম্যানুয়ালি এই ধরনের সুযোগ ট্র্যাক করা কঠিন, দুটি সমস্যা রয়েছে:
প্রথমত, তথ্যের সময়সীমা অত্যন্ত সংকীর্ণ। ঘোষণার প্রথম ৫ মিনিটে সবচেয়ে বড় পতন হয়। প্রথম সময়ে প্রবেশ করতে না পারলে পরবর্তীতে শর্টে যাওয়ার ঝুঁকি অনেক বেড়ে যায়। ম্যানুয়াল মনিটরিং ৭×২৪ ঘণ্টা রিয়েল-টাইম প্রতিক্রিয়া দিতে পারে না।
দ্বিতীয়ত, দামের গতি একমুখী নয়। দাম কমার সময় বারবার পুলব্যাক হয়। শুধু শর্ট পজিশন ধরে ট্রেন্ড লাভ পাওয়া যায়, কিন্তু পুলব্যাকের সময় উচ্চ-ফ্রিকোয়েন্সি স্প্রেড লাভ মিস হয়।
এই দুটি সমস্যা সমাধানের জন্য, এই নিবন্ধে একটি সম্পূর্ণ স্বয়ংক্রিয় কৌশল উপস্থাপন করা হয়েছে: প্রোগ্রামের মাধ্যমে বিনান্সের ডিলিস্ট সিগন্যাল রিয়েল-টাইম মনিটর করা, ঘোষণার প্রথম মুহূর্তেই স্বয়ংক্রিয়ভাবে বেস শর্ট পজিশন খোলা, একই সাথে ডায়নামিক শর্ট গ্রিড চালু করা, পুরো নিম্নমুখী প্রবণতার মধ্যে অস্থির স্প্রেড ক্রমাগত ক্যাপচার করা, এবং শেষ পর্যন্ত ডিলিস্টের আগে স্বয়ংক্রিয়ভাবে অবস্থান বন্ধ করা – পুরো প্রক্রিয়ায় মানুষের হস্তক্ষেপের প্রয়োজন নেই।
এক, কেন এই ধরনের দামের গতি
কৌশলটি বিস্তারিতভাবে বোঝার আগে, আমাদের ডিলিস্ট হওয়া কয়েনের দামের আচরণ বুঝতে হবে, যা পুরো কৌশলের ভিত্তি।
১.১ ডিলিস্ট ঘোষণার বাজার প্রভাব
যখন বিনান্স একটি পারপেচুয়াল কন্ট্রাক্ট ডিলিস্ট করার ঘোষণা দেয়, বাজারের প্রথম প্রতিক্রিয়া হয় প্যানিক। লং পজিশনধারী ট্রেডাররা জানে যে কন্ট্রাক্টটি শীঘ্রই অদৃশ্য হবে, তাই ডিলিস্টের আগেই তাদের অবস্থান বন্ধ করতে হবে, অন্যথায় ফোর্সড সেটেলমেন্ট হবে। এই সম্মিলিত বিক্রির চাপ স্বল্প সময়ে তীব্র সেলিং প্রেসার তৈরি করে, যার ফলে দাম দ্রুত কমে যায়।
একই সাথে, মার্কেট মেকাররা দ্রুত কোট কমিয়ে দেয় বা লিকুইডিটি প্রত্যাহার করে, যা দামের অস্থিরতা আরও বাড়িয়ে দেয়। এই কারণেই ডিলিস্ট ঘোষণার প্রথম কয়েক মিনিট পুরো ডিলিস্ট সময়ের মধ্যে সবচেয়ে বড় পতনের সময়।
১.২ অস্থির নিম্নমুখী প্রবণতার নিয়ম
প্রথম তীব্র পতনের পর, দাম সোজা নিচে যায় না, বরং একটি অস্থির নিম্নমুখী প্রবণতা দেখায়:
এই ধরনের প্রবণতার পিছনে একটি যৌক্তিক কারণ রয়েছে: প্রতিটি পুলব্যাক হয় কারণ স্বল্পমেয়াদী ট্রেডাররা মনে করে দাম বেশি কমেছে এবং তারা নিচে কিনতে আসে, কিন্তু কারণ মৌলিক পরিবর্তন হয়নি (কন্ট্রাক্টটি অদৃশ্য হতে চলেছে), তাই কিনতে আসা লোকেরা দ্রুত ফেঁসে যায় এবং দাম আবার নিচে নামে। পুলব্যাকের উচ্চতা ক্রমশ কমতে থাকে, যতক্ষণ না ডিলিস্টের আগে লিকুইডিটি সম্পূর্ণ শুকিয়ে যায়।
এই নিয়মিত অস্থিরতা গ্রিড স্ট্র্যাটেজির জন্য আদর্শ পরিবেশ।
১.৩ দুটি লাভের উৎস
উপরের বিশ্লেষণের ভিত্তিতে, আমরা দুটি স্বাধীন লাভের পথ ডিজাইন করতে পারি:
| লাভের উৎস | সংগত টুল | লাভের শর্ত |
|---|---|---|
| ট্রেন্ড পতন | বেস শর্ট পজিশন | দাম সামগ্রিকভাবে নিচে |
| অস্থির স্প্রেড | শর্ট গ্রিড | দাম একটি রেঞ্জের মধ্যে ওঠানামা করে |
দুটি একত্রিত হলে, কৌশলটি ডিলিস্ট সময়ে শক্তিশালী লাভের ক্ষমতা রাখে। এমনকি যদি দাম বড় পুলব্যাক করে, গ্রিড অংশটি এখনও স্প্রেড ক্যাপচার করতে পারে; এবং যতক্ষণ সামগ্রিক ট্রেন্ড নিচে থাকে, বেস পজিশন লাভ করতে থাকে।
দুই, মনিটরিং নীতি: কীভাবে প্রথমবার ডিলিস্ট সিগন্যাল সনাক্ত করা যায়
কন্ট্রাক্ট তথ্য মনিটর করার জন্য, এই কৌশলটি একটি সরাসরি পদ্ধতি ব্যবহার করে: সরাসরি বিনান্স কন্ট্রাক্ট API-এর ডেটা পরিবর্তন মনিটর করা।
২.১ deliveryDate ফিল্ডের গোপন তথ্য
বিনান্সের fapi/v1/exchangeInfo এন্ডপয়েন্ট সমস্ত কন্ট্রাক্টের বিস্তারিত তথ্য ফেরত দেয়, যেখানে একটি ফিল্ড deliveryDate নামে আছে, যা কন্ট্রাক্টের সেটেলমেন্ট সময় নির্দেশ করে।
পারপেচুয়াল কন্ট্রাক্টের জন্য, এই ফিল্ডটি সাধারণত একটি দূরবর্তী ভবিষ্যতের টাইমস্ট্যাম্পে সেট করা হয়:
4133404800000 → ২১০০ সালের ৩১ ডিসেম্বর
এটি "চিরকালের জন্য মেয়াদ শেষ হয় না" এর প্লেসহোল্ডার।
মূল বিষয়: যখন বিনান্স একটি পারপেচুয়াল কন্ট্রাক্ট ডিলিস্ট করার সিদ্ধান্ত নেয়, ঘোষণা প্রকাশের সাথে সাথে তারা কন্ট্রাক্টের deliveryDate প্রকৃত ডিলিস্ট টাইমস্ট্যাম্পে পরিবর্তন করে।
সাধারণ পারপেচুয়াল কন্ট্রাক্ট: deliveryDate = 4133404800000 (চিরকালের জন্য মেয়াদ শেষ হয় না)
ডিলিস্ট হতে যাওয়া কন্ট্রাক্ট: deliveryDate = 1744106400000 (২০২৬-০৪-০৮ ১৭:০০:০০)
এই পরিবর্তন API ডেটাতে সঙ্গে সঙ্গে প্রতিফলিত হয়, যা ঘোষণা পৃষ্ঠার রেন্ডারিংয়ের চেয়ে দ্রুত এবং বেশি স্ট্রাকচার্ড, কোনো HTML পার্স করার প্রয়োজন নেই।
২.২ মনিটরিং কোড বাস্তবায়ন
প্রতি ১৫ সেকেন্ডে API কল করে, সেইসব USDT পারপেচুয়াল কন্ট্রাক্ট ফিল্টার করা হয় যাদের deliveryDate একটি বাস্তব টাইমস্ট্যাম্পে পরিবর্তিত হয়েছে:
python
def fetch_delist_symbols():
body = HttpQuery("https://fapi.binance.com/fapi/v1/exchangeInfo")
data = json.loads(body)
now_ms = get_now_ms()
result = {}
for s in data.get("symbols", []):
if not s["symbol"].endswith("USDT"):
continue
if s.get("contractType") != "PERPETUAL":
continue
dd = s.get("deliveryDate", PERPETUAL_END)
if dd < PERPETUAL_END and dd > now_ms:
result[s["symbol"]] = dd
return result
ফেরত উদাহরণ:
python
{
"HIPPOUSDT": 1744106400000, # ২০২৬-০৪-০৮ ১৭:০০:০০
"OLUSDT": 1744106400000,
"RLSUSDT": 1744106400000,
"PUFFERUSDT":1744106400000,
}
নোট: বাস্তব ট্রেডিং টেস্টে কিছু লেটেন্সি দেখা গেছে, তাই আরও দ্রুত যাচাই পদ্ধতি বেছে নিতে পারেন।
তিন, কৌশল আর্কিটেকচার
পুরো কৌশলটি দুটি সমান্তরাল মডিউল নিয়ে গঠিত:
নতুন কন্ট্রাক্ট পাওয়া গেলে, প্রতিটি কন্ট্রাক্টের জন্য আলাদা একটি task অবজেক্ট তৈরি করা হয়, যা সেই কন্ট্রাক্টের সমস্ত অবস্থা ধারণ করে:
python
task = {
"symbol": "HIPPO_USDT",
"delist_time_ms": 1744106400000,
"fund_per_task": 250.0, # বরাদ্দকৃত তহবিল
"base_short_qty": 1500000, # বেস শর্টের পরিমাণ (কন্ট্রাক্ট সংখ্যা)
"range_high": 0.0005287, # গ্রিডের উপরের প্রান্ত
"range_low": 0.0004758, # গ্রিডের নিচের প্রান্ত
"grid_width": 0.0000529, # ব্যবধানের প্রস্থ (স্থির)
"grids": [...], # ১০টি গ্রিডের অবস্থা
"shift_count": 0, # কতবার স্থানান্তরিত হয়েছে
...
}
একাধিক কন্ট্রাক্টের task পরস্পর থেকে স্বাধীন, কোনো হস্তক্ষেপ নেই, সমান্তরালে চলে।
চার, তহবিল বরাদ্দ
N সংখ্যক ডিলিস্ট কন্ট্রাক্ট পাওয়া গেলে, অ্যাকাউন্টের উপলব্ধ ব্যালেন্স সমানভাবে ভাগ করা হয়:
প্রতি কন্ট্রাক্টে বরাদ্দ তহবিল = উপলব্ধ ব্যালেন্স × ৮০% / N
২০% মার্জিন বাফার হিসাবে রাখা হয়, যাতে স্বল্পমেয়াদী পুলব্যাকে পজিশন লিকুইডেশন থেকে রক্ষা পাওয়া যায়।
মূল বিবরণ: একাধিক কন্ট্রাক্ট ক্রমান্বয়ে ইনিশিয়ালাইজ করার সময়, প্রতিটি কন্ট্রাক্ট ইনিশিয়ালাইজ হলে অ্যাকাউন্টের উপলব্ধ ব্যালেন্স কমে যায় (বেস পজিশন মার্জিন দখল করে)। তাই লুপ শুরু করার আগে একবারে সমস্ত কন্ট্রাক্টের জন্য বরাদ্দ তহবিল গণনা করা যায় না, বরং প্রতিটি ইনিশিয়ালাইজেশনের আগে পুনরায় কোয়েরি করা প্রয়োজন:
python
for idx, (binance_sym, delist_ms) in enumerate(delist_map.items()):
update_global_account()
remaining_count = total_new - idx
available_now = total_balance - margin_used
fund_per_task = available_now * 0.8 / remaining_count
task = init_task(binance_sym, delist_ms, fund_per_task)
এটি নিশ্চিত করে যে প্রতিটি কন্ট্রাক্টের জন্য যুক্তিসঙ্গত তহবিল বরাদ্দ পাওয়া যায়, যাতে আগের কন্ট্রাক্টগুলি অত্যধিক মার্জিন ব্যবহার করে ফেলার কারণে পরবর্তী কন্ট্রাক্টগুলির জন্য তহবিল অপর্যাপ্ত না হয়।
পাঁচ: বেস পজিশন এবং গ্রিডের বিস্তারিত ব্যাখ্যা
5.1 বেস পজিশন শর্ট করা
ঘোষণা প্রকাশের পর, ইনিশিয়ালাইজেশনের সময়ই মার্কেট মূল্যে অবিলম্বে শর্ট পজিশন খুলতে হবে, গ্রিডের জন্য অপেক্ষা না করে:
বেস পজিশনের ন্যামinal আকার = বরাদ্দকৃত তহবিল × 50% × লিভারেজ
উদাহরণ: বরাদ্দকৃত তহবিল 250U, লিভারেজ 10x
বেস পজিশনের ন্যামinal আকার = 250 × 50% × 10 = 1250U
বেস পজিশন পুরো সময় ধরে রাখা হয়, গ্রিডের পুনরাবৃত্ত খোলা-বন্ধে অংশ নেয় না, শুধুমাত্র ডিলিস্ট হওয়ার আগে জোরপূর্বক ক্লোজ করার সময় একসাথে বন্ধ করা হয়।
বেস পজিশন হল পুরো কৌশলের সবচেয়ে লাভজনক অংশ – যদি ডিলিস্ট হওয়া কয়েন ঘোষণা থেকে ডিলিস্ট হওয়া পর্যন্ত 50% কমে যায়, তাহলে বেস পজিশন এই 50% শর্ট রিটার্ন (লিভারেজ সহ) প্রদান করে।
5.2 শর্ট গ্রিড সেটআপ
বর্তমান মূল্যকে উপরের সীমা হিসাবে নিয়ে, নিচের দিকে 10% নিচের সীমা হিসাবে, সমানভাবে 10টি গ্রিডে বিভক্ত:
উদাহরণ (বর্তমান মূল্য 0.0005287, পরিসীমা প্রস্থ 10%):
উপরের সীমা = 0.0005287
নিচের সীমা = 0.0005287 × (1 - 10%) = 0.0004758
গ্রিড ব্যবধান = (0.0005287 - 0.0004758) / 10 = 0.0000053
গ্রিড 9: শর্ট খোলা@0.0005287 → শর্ট বন্ধ@0.0005234
গ্রিড 8: শর্ট খোলা@0.0005234 → শর্ট বন্ধ@0.0005181
গ্রিড 7: শর্ট খোলা@0.0005181 → শর্ট বন্ধ@0.0005128
...
গ্রিড 0: শর্ট খোলা@0.0004811 → শর্ট বন্ধ@0.0004758
প্রতিটি গ্রিডে তহবিল সমানভাবে ভাগ করা হয়, যুক্তি সহজ: মূল্য শর্ট খোলার দামে ফিরে এলে, অর্ডার মিলে শর্ট খোলে; মূল্য শর্ট বন্ধের দামে নেমে গেলে, অর্ডার মিলে শর্ট বন্ধ হয়; একটি চক্র শেষ হওয়ার পর, আবার শর্ট খোলার অর্ডার দেওয়া হয়, পরবর্তী রিবাউন্ডের অপেক্ষায়।
5.3 শুরু করার সময় অর্ডার প্লেসমেন্ট কৌশল
শুরু করার সময়, সমস্ত গ্রিড যাদের শর্ট খোলার মূল্য >= বর্তমান মূল্য, তাদের জন্য অর্ডার দেওয়া হয়:
বর্তমান মূল্য 0.0005287
গ্রিড 9 শর্ট খোলার মূল্য = 0.0005287 ≥ 0.0005287 → অর্ডার দেওয়া ✅
গ্রিড 8 শর্ট খোলার মূল্য = 0.0005234 < 0.0005287 → skip_below (মূল্য ইতিমধ্যে নিচে নেমে গেছে)
গ্রিড 7 এবং নিচের সব skip_below
যেসব গ্রিডের মূল্য বর্তমান মূল্যের উপরে, সেগুলোতে অর্ডার দেওয়ার কারণ হলো ডাউনট্রেন্ডে মূল্য যেকোনো সময় প্রত্যাশার চেয়ে বেশি রিবাউন্ড করতে পারে; আগে থেকেই সমস্ত গ্রিড অর্ডার করে রাখলে নিশ্চিত করা যায় যে কোনো রিবাউন্ড থেকে শর্ট খোলার সুযোগ হাতছাড়া হবে না।
ছয়: ডায়নামিক রেঞ্জ মুভমেন্ট
এটি পুরো কৌশলের সবচেয়ে গুরুত্বপূর্ণ প্রক্রিয়া। মূল্য চিরকাল প্রাথমিক রেঞ্জের মধ্যে থাকে না; গ্রিডকে অবশ্যই মূল্যের সাথে চলতে হবে যাতে ক্রমাগত স্প্রেড ক্যাপচার করা যায়।
6.1 নিচের দিকে সরানো (নিচের সীমা ভেঙে)
যখন মূল্য গ্রিডের নিচের সীমা ভেঙে যায়, তখন বোঝা যায় যে পতনের পরিমাণ বর্তমান রেঞ্জের কভারেজ ছাড়িয়ে গেছে; তাই পুরো রেঞ্জটি নিচের দিকে সরাতে হবে:
পুরনো রেঞ্জ: 0.0004758 ~ 0.0005287
বর্তমান মূল্য: 0.0004500 (নিচের সীমা 0.0004758 ভেঙেছে)
নতুন রেঞ্জ গণনা (সরানোর পদক্ষেপ 5%):
shift_step = 0.0004500 × 5% = 0.0000225
নতুন উপরের সীমা = 0.0005287 - 0.0000225 = 0.0005062
নতুন নিচের সীমা = 0.0005062 - 0.0000529 = 0.0004533
নতুন রেঞ্জ: 0.0004533 ~ 0.0005062
6.2 উপরের দিকে সরানো (উপরের সীমা অতিক্রম করে রিবাউন্ড)
যখন মূল্য গ্রিডের উপরের সীমা অতিক্রম করে রিবাউন্ড করে, তখন রেঞ্জ উপরের দিকে সরানো হয়:
পুরনো রেঞ্জ: 0.0004494 ~ 0.0005023
বর্তমান মূল্য: 0.0005100 (উপরের সীমা 0.0005023 অতিক্রম করেছে)
নতুন রেঞ্জ উপরে সরানো হয়, নিশ্চিত করে বর্তমান মূল্য নতুন রেঞ্জের মধ্যে থাকে
নতুন রেঞ্জ: 0.0004758 ~ 0.0005287
এই পদ্ধতি নিশ্চিত করে যে মূল্য যেভাবেই ওঠানামা করুক না কেন, গ্রিড সবসময় মূল্যের সাথে চলে; এমন অবস্থা তৈরি হয় না যে মূল্য রেঞ্জের বাইরে চলে যায় এবং সব গ্রিড খালি পড়ে থাকে।
6.3 রেঞ্জের প্রস্থ অপরিবর্তিত রাখা
প্রতিবার সরানোর সময় শুধুমাত্র রেঞ্জের অবস্থান পরিবর্তিত হয়, প্রস্থ পরিবর্তিত হয় না:
python
grid_width = round(range_high - range_low, 8) # ইনিশিয়ালাইজেশনে স্থির করা
# নিচের দিকে সরানোর সময়
range_high = fp(task, range_high - shift_step)
range_low = fp(task, range_high - grid_width) # স্থির প্রস্থ ব্যবহার করে গণনা
এভাবে ফ্লোটিং পয়েন্টের ক্রমবর্ধমান ত্রুটির কারণে রেঞ্জ ক্রমশ সংকীর্ণ বা প্রশস্ত হওয়ার সমস্যা এড়ানো যায়।
6.4 পজিশন সুরক্ষা ব্যবস্থা
রেঞ্জ সরানোর সময়, সমস্ত অর্ডার বাতিল করা হয় এবং গ্রিড পুনর্নির্মাণ করা হয়। কিন্তু যেসব গ্রিড ইতিমধ্যে শর্ট খোলা হয়েছে এবং শর্ট বন্ধের অপেক্ষায় আছে, সেগুলোর কী হবে?
যদি সরাসরি পুনর্নির্মাণ করা হয়, তাহলে এই গ্রিডগুলির পজিশন "হারিয়ে যায়" – শর্ট পজিশন আছে কিন্তু সংশ্লিষ্ট ক্লোজ অর্ডার নেই, এগুলো খালি পজিশনে পরিণত হয় যা রিবাউন্ড ঝুঁকির সম্পূর্ণ সম্মুখীন।
সমাধান হল: সরানোর আগে, সব গ্রিডের হোল্ডিং কন্ট্রাক্টের সংখ্যা রেকর্ড করা; সরানোর পরে, নতুন রেঞ্জের সর্বনিম্ন গ্রিডে আবার শর্ট ক্লোজ অর্ডার দেওয়া:
python
# সরানোর আগে পজিশন সংগ্রহ
holding_contracts = sum(
g.get("sell_contracts", 0)
for g in task["grids"]
if g["status"] in ("pending_cover", "holding_no_cover")
)
cancel_all_orders(task)
activate_grids(task, new_high, new_low)
# সরানোর পরে সর্বনিম্ন গ্রিডে শর্ট ক্লোজ সুরক্ষা
if holding_contracts > 0:
_place_grid_cover(task, 0, holding_contracts)
এভাবে রেঞ্জ যতবারই সরানো হোক না কেন, খোলা শর্ট পজিশনের ট্র্যাক হারানো যায় না।
সাত: একাধিক কন্ট্রাক্টের সমান্তরাল ব্যবস্থাপনা
7.1 নতুন কন্ট্রাক্ট আবিষ্কৃত হলে প্রক্রিয়াকরণের যুক্তি
পুরনো কন্ট্রাক্ট বন্ধ হওয়ার ফলে মুক্ত হওয়া তহবিল পুনরায় বিতরণে অংশগ্রহণ করে, নিশ্চিত করে যে নতুন কন্ট্রাক্ট পর্যাপ্ত তহবিল সমর্থন পায়।
7.2 জীবনচক্র ব্যবস্থাপনা
প্রতিটি কন্ট্রাক্টের জীবনচক্র:
আট: কিছু গুরুত্বপূর্ণ বিবরণ
8.1 ছোট মূল্যের কয়েনের নির্ভুলতা ফাঁদ
HIPPOUSDT-এর মতো কয়েন যাদের মূল্য 0.0003 স্তরে, সেখানে রেঞ্জ সরানোর পদক্ষেপ গণনা করার সময় নির্ভুলতার সমস্যা দেখা দেয়:
shift_step = 0.0003 × 5% = 0.000015
যদি PricePrecision = 4 (4 দশমিক স্থান সংরক্ষণ)
round(0.000015, 4) = 0.0 ← পদক্ষেপ 0 হয়ে যায়!
→ while লুপ কখনো শেষ হয় না, অসীম লুপ
সমাধান হল পদক্ষেপে নির্ভুলতা ছাঁটাই না করা এবং একটি ন্যূনতম পদক্ষেপ নির্ধারণ করা:
python
shift_step = price * SHIFT_STEP_PCT
min_step = 10 ** (-PricePrecision)
shift_step = max(shift_step, min_step) # অন্তত ন্যূনতম নির্ভুলতা ইউনিটের সমান
8.2 বেস পজিশন শর্ট খুলতে ব্যর্থ হলে পরিচালনা
মার্কেট শর্ট খুলতে ব্যর্থ হতে পারে তহবিল অপ্রতুলতা বা নেটওয়ার্ক সমস্যার কারণে; তখন গ্রিড নির্মাণ চালিয়ে যাওয়া উচিত নয়, অন্যথায় বেস পজিশন ছাড়া খালি গ্রিড তৈরি হবে:
python
def open_base_short(task):
oid = place_market_short(task, usdt_amount)
Sleep(1000)
amt, _, _ = get_short_position(task)
task["base_short_qty"] = amt
if amt <= 0:
Log(f"বেস পজিশন শর্ট খুলতে ব্যর্থ, এই কন্ট্রাক্টটি এড়িয়ে যাওয়া হচ্ছে")
return False
return True
# init_task-এ
if not open_base_short(task):
return None # ইনিশিয়ালাইজেশন ব্যর্থ, tasks-এ যোগ করা হবে না
8.3 জোরপূর্বক ক্লোজ করার সময় ও পদ্ধতি
ডিলিস্টের 60 মিনিট আগে বেছে নেওয়া (বাইন্যান্স নতুন অর্ডার নিষিদ্ধ করার সময়ের 30 মিনিটের পরিবর্তে) ক্লোজ করার জন্য পর্যাপ্ত সময় উইন্ডো রাখতে। ডিলিস্টের যত কাছে, তারল্য তত খারাপ হয়, ক্লোজ করা তত কঠিন হয়।
ক্লোজ করার সময়, বাজারের মূল্যের চেয়ে সামান্য বেশি লিমিট অর্ডার ব্যবহার করা হয়, প্রকৃত মার্কেট অর্ডার নয়, অত্যন্ত খারাপ তারল্যে দূষিত মিল এড়াতে:
python
buy_p = fp(task, price * 1.005) # বাজারের মূল্যের চেয়ে 0.5% বেশি
exchange.CreateOrder(swapcode, "closesell", buy_p, fc)
যদি একবারে পুরোপুরি ক্লোজ না হয়, সর্বোচ্চ 10 বার পুনরায় চেষ্টা করা হয়, প্রতিবার সর্বশেষ মূল্য পুনরুদ্ধার করে।
8.4 ফান্ডিং ফি থেকে অতিরিক্ত লাভ
ডাউনট্রেন্ডে, ফান্ডিং রেট সাধারণত শর্ট পজিশনের জন্য অনুকূল হয় (শর্ট পজিশন টাকা পায়)। এটি বেস পজিশন ধরে রাখার অতিরিক্ত লাভ; গ্রিডের স্প্রেড পরিসংখ্যানে এটি প্রতিফলিত হয় না, তবে অ্যাকাউন্ট ইকুইটির বৃদ্ধিতে দেখা যায়।
নয়: প্যারামিটার সেটিংসের পরামর্শ
python
LEVERAGE = 10 # লিভারেজ倍数,建议5~10,不宜过高
GRID_WIDTH_PCT = 0.10 # 区间宽度10%,覆盖正常震荡幅度
SHIFT_STEP_PCT = 0.05 # 移动步长5%,约为区间宽度的一半
GRID_COUNT = 10 # 格数,格数越多每格资金越少
BASE_SHORT_RATIO = 0.5 # 底仓占50%,网格占40%,留10%缓冲
FORCE_CLOSE_MINS = 60 # 提前60分钟平仓
MONITOR_INTERVAL = 15000 # 15秒监控一次,兼顾时效和频率限制
区间宽度的选择:宽度越大,覆盖的震荡范围越大,但每格格距也越大,收割频率降低。建议根据该币种历史波动率调整,通常10%是一个合理的起点。
格数的选择:格数越多,格距越小,收割频率越高,但每格资金越少,单次盈利也越小。格数过多还会导致每格资金不足最小下单量的问题。10格是一个较为平衡的选择。
十、风险提示
在使用本策略前,需要充分了解以下风险:
反弹风险:如果消息已经提前被市场price in,公告发出后可能出现"利空出尽"的反弹,底仓会短暂亏损。网格部分在反弹时仍能收割差价,但整体可能出现短暂回撤。
流动性风险:越接近下架时间,合约的流动性越差,买卖价差扩大,平仓时滑点增加。策略中设置了0.5%的溢价和10次重试来应对,但极端情况下仍可能无法全部平仓。
假信号风险:极少数情况下币安会撤销或延迟下架计划,此时策略会继续持有空头仓位,直到手动干预或下次监控更新。
高杠杆风险:下架币种的波动极大,10倍杠杆下即使10%的反弹也会造成接近全仓的亏损。建议根据自身风险承受能力调整杠杆,并控制整体仓位。
策略及时启停:经实盘发现,个别品种在震荡下跌一天时间,价格会逐渐恢复至公告前状态,需要及时关闭策略。
运行时长:策略需要等待较长时间,才能发现机会,需要耐心等待。
十一、总结
本策略的核心价值在于将信息优势(第一时间发现下架信号)转化为交易优势(自动化执行),同时通过底仓+网格的双重结构,在单边下跌行情中同时捕捉趋势收益和震荡差价。
整套系统的关键设计要点:
| 模块 | 核心设计 | 解决的问题 |
|---|---|---|
| deliveryDate 监控 | 直接读接口字段变化 | 秒级发现下架信号 |
| 动态资金分配 | 每次初始化前重查余额 | 多合约资金分配均衡 |
| 底仓市价开空 | 公告发出立刻执行 | 不错过第一波急跌 |
| 全格挂单 | 所有高于当前价的格子全挂 | 不错过超预期反弹 |
| 区间宽度固定 | 移动时保持宽度不变 | 防止浮点漂移 |
| 持仓保护 | 移动后重挂平空单 | 防止裸持仓 |
| 提前60分钟平仓 | 留足平仓时间窗口 | 应对低流动性 |
下架行情不是每天都有,但每次出现都是相对确定性较高的交易机会。通过程序化自动监控和执行,可以在不需要盯盘的情况下,稳定地参与这类机会。
策略源码: 下架合约网格策略
- 1







