BtcSpotDualTimeframeMomentumConfluenceLong
হাইপোথিসিস
BTC স্পট ডুয়াল-টাইমফ্রেম মোমেন্টাম কনফ্লুয়েন্স, LONG-ONLY 1x (BTCUSDT.BINANCE_SPOT, 4H প্রাইমারি + 1D কনফার্ম, BOTH টাইমফ্রেম UP দিকে থাকলে শুধু লং, অন্যথায় FLAT ক্যাশে, ATR-ট্রেইলিং + ডেইলি-রেজিম-ব্রেক এক্সিট, সোর্স-অপ্টিমাইজড প্যারামিটার সংরক্ষিত)
হাইপোথিসিস
ফ্যাক্টরির সবচেয়ে ভালো পারফর্ম করা প্রমোটেড স্ট্র্যাটেজি (BtcDualTimeframeMomentumConfluenceLS, শার্প 1.99, 458 ট্রেড, 29 দিনের পেপারে +$4,774)-এর BTCUSDT.BINANCE_SPOT-এ একটি LONG-ONLY, 1x, CASH-অ্যাকাউন্ট পোর্ট, লাইভ ভেন্যু স্পট-অনলি হওয়ায় বিশেষভাবে FIRST LIVE-TRADING CANDIDATE হিসেবে তৈরি করা হয়েছে। মেকানিজম অপরিবর্তিত, বিশুদ্ধ-OHLCV, একক-ইনস্ট্রুমেন্ট: FAST লেগ = 4-HOUR বারে ট্রেইলিং 18-বার রিটার্নের চিহ্ন; SLOW লেগ = DAILY বারে ট্রেইলিং 15-বার রিটার্নের চিহ্ন (একটি কনটেক্সট লেগ হিসেবে on_extra_bar এর মাধ্যমে পড়া, কখনো সিঙ্ক ব্যারিয়ার নয়)। দুটোরই AGREE হতে হবে। CASH অ্যাকাউন্ট শুধু একটিমাত্র স্ট্রাকচারাল পরিবর্তন বাধ্য করে: {LONG/FLAT/SHORT}-কে {LONG/FLAT}-এ সংকুচিত করা — ফিউচারস প্যারেন্ট joint-down কনফ্লুয়েন্সে SHORT যায় যেখানে স্পট ভার্সন 100% USDT হোল্ড করে। বাকি সবকিছু হুবহু সংরক্ষিত: রানিং এক্সট্রিম থেকে 3.033x ATR-এ ATR(14) ট্রেইলিং স্টপ, ডেইলি-রেজিম-ব্রেক এক্সিট, vol-scaled ক্যাপিটাল-রিলেটিভ সাইজিং (risk_pct 1.011% / 3.033xATR স্টপ ডিস্ট্যান্স), 49.7% ম্যাক্স-নোশনাল ক্যাপ, এবং সোর্স অপ্টিমাইজেশনের নির্বাচিত ঠিক একই প্যারামিটার ভেক্টর (fast_lookback 18, slow_lookback 15, trail_atr_mult 3.033)। তিনটি টিউনেবল, কোনো সাপ্লিমেন্টারি ডেটা নেই, কোনো শর্ট নেই, কোনো লিভারেজ নেই। স্পট-নির্দিষ্ট কোড পরিবর্তন: BINANCE_SPOT CASH ভেন্যু (কোনো লিভারেজ মাল্টিপ্লায়ার নেই position_size-এ), size_precision 5 / price_precision 2, min_notional $10, বিক্রয় শুধুমাত্র হোল্ড করা বেস কোয়ান্টিটি অনুযায়ী সাইজড। ডেটা উপস্থিত বলে যাচাই করা হয়েছে: BTCUSDT.BINANCE_SPOT 4-HOUR এবং 1-DAY বার 2017-08-17 থেকে অবিরতভাবে চলছে (~9 বছর, ~19,800 4H বার)।
হাইপোথিসিস
প্রমোটেড ফিউচারস প্যারেন্ট BtcDualTimeframeMomentumConfluenceLS-এর সরাসরি স্পট ভেন্যুতে পোর্ট, কারণ উদ্দিষ্ট লাইভ ভেন্যু স্পট-অনলি। মেকানিজম হুবহু সংরক্ষিত: একই দুই মোমেন্টাম লেগ, একই AGREE-or-flat গেট, রানিং এক্সট্রিম থেকে একই ATR(14) 3.033x ট্রেইলিং স্টপ, একই ডেইলি-রেজিম-ব্রেক এক্সিট, একই 49.7% নোশনাল ক্যাপসহ একই vol-scaled risk_pct / stop-distance সাইজিং, এবং সোর্স অপ্টিমাইজেশনের নির্বাচিত ঠিক একই প্যারামিটার ভেক্টর (fast_lookback 18, slow_lookback 15, trail_atr_mult 3.033)। CASH অ্যাকাউন্ট হাইপোথিসিসে উল্লিখিত ঠিক একটি স্ট্রাকচারাল পরিবর্তন বাধ্য করে: {LONG,FLAT,SHORT} সংকুচিত হয়ে {LONG,FLAT} হয় — should_enter শুধু joint-up-এ BUY রিটার্ন করে, অন্যথায় None, তাই joint-down হল শর্ট না হয়ে 100% USDT। স্পট-নির্দিষ্ট পরিবর্তন: লিভারেজ 1.0 সহ ভেন্যু BINANCE_SPOT এবং position_size-এ কোনো লিভারেজ টার্ম নেই, size_precision 5 / price_precision 2 (BTCUSDT স্পট), min_notional বাড়িয়ে $10 করা হয়েছে, এবং সব এক্সিট বেস টেমপ্লেটের reduce-only close_position-এর মাধ্যমে রুট করা হয়, তাই SELL শুধুমাত্র হোল্ড করা বেস কোয়ান্টিটি ছাড়তে পারে (নেকেড স্পট শর্ট গঠনগতভাবে অসম্ভব, এবং বেসের _would_open_spot_short গার্ড কখনো ট্রিগার হয় না)। calculate_signal প্রতি বারে কন্টিনিউয়াস 18-বার 4H রিটার্ন রিটার্ন করে (বার থেকে বার ভিন্ন হয়); প্রয়োজন অনুসারে ডিসক্রিট কনফ্লুয়েন্স গেট should_enter-এ থাকে। প্রতি-বার খরচ O(1): ATR একটি নির্দিষ্ট 15-বার উইন্ডো ব্যবহার করে এবং fast রিটার্ন একটি একক ইনডেক্সড লুকআপ, তাই কোনো হিস্ট্রি-স্কেলিং কাজ নেই। অ্যানালিস্টের জন্য একটি সৎ সতর্কতা: স্পট রাউন্ড-ট্রিপ খরচ ফিউচারস প্যারেন্টের ~0.10%-এর তুলনায় ~0.20%, তাই প্রতি-ট্রেড এজকে দ্বিগুণ ফ্রিকশন কাটাতে হবে — ট্রেন্ড-ফলোয়িং এক্সিট স্ট্রাকচার (ট্রেইল + রেজিম ব্রেক, কোনো ফিক্সড টেক-প্রফিট নয়) এটাকেই সম্ভাব্য করে তোলে কারণ গড় হোল্ড যথেষ্ট দীর্ঘ, তবে এটিই প্রথমে নজর রাখার মেট্রিক।
구현
LONG-ONLY 1x BTCUSDT স্পট (BINANCE_SPOT, CASH) ডুয়াল-টাইমফ্রেম মোমেন্টাম কনফ্লুয়েন্স। FAST লেগ = 4-HOUR বারে (প্রাইমারি) ট্রেইলিং 18-বার রিটার্নের চিহ্ন; SLOW লেগ = 1-DAY বারে ট্রেইলিং 15-বার রিটার্নের চিহ্ন, on_extra_bar-এর মাধ্যমে একটি স্লোয়ার-টাইমফ্রেম কনটেক্সট লেগ হিসেবে কনজিউম করা হয় (ভিন্ন টাইমফ্রেম, তাই বেস টেমপ্লেটের ক্রস-লেগ অ্যালাইনমেন্ট ব্যারিয়ার কখনো 4H সিগন্যাল ডিফার করে না)। BTC হোল্ড করতে উভয় লেগকেই UP দিকে নির্দেশ করতে হবে; joint-down (যেখানে ফিউচারস প্যারেন্ট শর্ট করে) এবং মতানৈক্য উভয়ের অর্থ 100% USDT হোল্ড করা। এক্সিট: পজিশনের রানিং পিকের নিচে 3.033x ATR-এ ATR(14) ট্রেইলিং স্টপ, OR ডেইলি লেগ লং-এর নিচে ফ্লিপ করলে (উচ্চতর-টাইমফ্রেম রেজিম ব্রেক)। সাইজিং vol-scaled এবং ক্যাপিটাল-রিলেটিভ: equity * 1.011% / (3.033 * ATR), USDT ব্যালেন্সের নোশনালে 49.7%-এ ক্যাপড, NO লিভারেজ মাল্টিপ্লায়ার সহ (CASH অ্যাকাউন্ট ধার নিতে পারে না), size_precision 5-এ কোয়ান্টাইজড এবং $10 স্পট মিনিমাম নোশনালের নিচে রিজেক্টেড। তিনটি টিউনেবল, বিশুদ্ধ OHLCV, কোনো সাপ্লিমেন্টারি ডেটা নেই, কোনো শর্ট নেই।
검증 결과
প্যারেন্টের সাথে ঠিক মিলিয়ে নিতে should_exit-এর ট্রেইল তুলনায় self._atr (current) ব্যবহার করুন, অথবা বর্ণনায় স্পষ্টভাবে উল্লেখ করুন যে ট্রেইল এন্ট্রি-বার ATR-এর সাথে অ্যাঙ্করড, যাতে অ্যানালিস্ট প্যারেন্ট থেকে বিচ্যুতিকে ভেন্যু পরিবর্তনের কারণ হিসেবে ভুলভাবে ধরে না নেন।
검증 결과
ট্রেইলিং-স্টপ ATR এন্ট্রিতে FROZEN (self._entry_atr, should_enter-এ / পজিশন অ্যাডপশনে ক্যাপচার করা) এবং কখনো রিফ্রেশ হয় না, তাই ট্রেইল ডিস্ট্যান্স বর্তমান ATR(14)-এর পরিবর্তে 3.033 x ATR-at-entry-এর উপর ভিত্তি করে 3.033 x। প্রমোটেড ফিউচারস প্যারেন্ট (BtcDualTimeframeMomentumConfluenceLS4H) প্রতি বারে CURRENT ATR দিয়ে এর ট্রেইল র্যাচেট করে। হাইপোথিসিসের ভাষা ('রানিং এক্সট্রিম থেকে 3.033x ATR-এ ATR(14) ট্রেইলিং স্টপ') উভয় ক্ষেত্রেই সন্তুষ্ট হয়, এবং যেহেতু _extreme মনোটোন, তাই স্টপ লেভেল তবুও শুধু উপরের দিকে র্যাচেট করে, ফলে এটি কোনো সঠিকতার ত্রুটি নয় — তবে এন্ট্রির পরে vol সম্প্রসারণ ঘটলে কার্যকর স্টপ প্যারেন্টের তুলনায় টাইটার হয়ে যায়, যা এই স্ট্র্যাটেজি থেকে একটি বাস্তব আচরণগত পার্থক্য যা 'verbatim' পোর্ট বলে দাবি করা হচ্ছে।
검증 결과
should_enter-এর ভেতরে না রেখে, ফিল থেকে ট্রেড স্টেট সেট করুন (on_order_filled / ওপেন পজিশনের প্রথম বার), অথবা পজিশন লুকআপের আগে calculate_signal-এর শুরুতে ডিফেন্সিভলি রিসেট করুন।
검증 결과
বেস টেমপ্লেট অর্ডার সাইজ করার এবং min-notional গেট প্রয়োগ করার BEFORE should_enter() ট্রেড স্টেট মিউটেট করে (_in_long = True, _extreme, _entry_atr)। যদি position_size() 0 রিটার্ন করে বা $10 min-notional চেক এন্ট্রি ড্রপ করে, তাহলে স্ট্র্যাটেজি ফ্ল্যাট থাকা অবস্থাতেও armed trail সহ in-long হিসেবে ফ্ল্যাগ করা থেকে যায়। বাস্তবে এটি পরের বারে স্বয়ংক্রিয়ভাবে সেরে যায় (calculate_signal দেখে পজিশন None এবং ফ্ল্যাগ রিসেট করে, এবং ফ্ল্যাট অবস্থায় should_exit কখনো পৌঁছানো হয় না), তাই কোনো পর্যবেক্ষণযোগ্য আচরণগত বাগ নেই — তবে এক্সিট পাথ কখনো পরিবর্তিত হলে এই ইনভ্যারিয়েন্ট নাজুক।
검증 결과
সঠিকতার জন্য কোনো ফিক্সের প্রয়োজন নেই। একই-বারে কনজাম্পশন চাইলে, on_extra_bar-এ ক্যাশ না করে calculate_signal-এর ভেতরে self._extra_bars[...] থেকে _slow_dir লেজিলি রিকম্পিউট করুন।
검증 결과
ডেইলি লেগে এক-বার ল্যাটেন্সি: DAILY বার এবং দিনের শেষ 4H বার একই ক্লোজ টাইমস্ট্যাম্প শেয়ার করে। ইঞ্জিন যদি প্রাথমিক 4H বার প্রথমে ডেলিভার করে, তাহলে _maybe_process_primary() চলে এবং _last_processed_ts স্ট্যাম্প করে, এবং ডেইলি বারের _slow_dir আপডেট (একই ts-এ আসা) শুধু NEXT 4H বার থেকে কনজিউম হয়। এটি কনজারভেটিভ (এটি শুধুমাত্র সিগন্যালকে বিলম্বিত করতে পারে, কখনো ভবিষ্যতের ডেটা লিক করতে পারে না), তবে এর অর্থ হল ডেইলি-রেজিম-ব্রেক এক্সিট প্রায় অর্ধেক ক্ষেত্রে ডেইলি ক্লোজের 4 ঘণ্টা পর পর্যন্ত ফায়ার করতে পারে, এবং ব্যাকটেস্ট/পেপার প্যারিটি ডেলিভারি অর্ডার স্থিতিশীল থাকার উপর নির্ভরশীল।
검증 결과
বিশ্বস্ত ইমপ্লিমেন্টেশন, তবে সম্পূর্ণ ইতিহাসে অ্যানালিস্টের বিবেচনা করা উচিত এমন তিনটি বিষয়: (1) স্পট রাউন্ড-ট্রিপ ~0.20% বনাম ফিউচারস প্যারেন্টের ~0.10%, তাই একই গ্রস এজ প্রায় অর্ধেক নেট হয়ে যায় — স্যান্ডবক্সে ইতিমধ্যেই কমিশন গ্রসের 10.03% দেখাচ্ছে; (2) প্যারামিটার ভেক্টর (fast 18 / slow 15 / trail 3.033) একটি DIFFERENT ভেন্যু, টাইমফ্রেম মিক্স এবং ডিরেকশন সেট (LONG/SHORT ফিউচারস)-এ চালানো অপ্টিমাইজেশন রানের মাধ্যমে নির্বাচিত হয়েছিল, তাই এটি একটি আউট-অফ-স্যাম্পল ট্রান্সফার, অপ্টিমাইজড কনফিগ নয় — স্যান্ডবক্স শার্প 0.527, যেখানে sharpe_ci_low -0.233 এবং বেঞ্চমার্কের তুলনায় information_ratio -0.760, অর্থাৎ একটি লং-অনলি BTC বুক যা স্মোক উইন্ডোতে BTC হোল্ড করার তুলনায় আন্ডারপারফর্ম করে; (3) শর্ট লেগ বাদ দেওয়ায় প্যারেন্টের ট্রেড পপুলেশনের প্রায় অর্ধেক বাদ পড়ে (250 ট্রেড, সবই লং, 43.6% এক্সপোজার), তাই রিয়েলাইজড শার্প প্যারেন্টের 1.99-এর কাছাকাছি না হয়ে তার থেকে অনেক নিচে থাকবে বলেই প্রত্যাশিত। রিয়েল ব্যাকটেস্টে প্রথমে যা যাচাই করতে হবে: 0.25% স্পট ফ্লোরের বিপরীতে avg_trade_return_pct (স্যান্ডবক্সে 0.82% দেখাচ্ছে, তবে সেই উইন্ডো 2017 বাদ দেয় এবং মাত্র 2401 দিনের) এবং 'নরমাল' ভোল টারসাইল (স্যান্ডবক্সে -8.77%) সম্পূর্ণ ইতিহাসে নেগেটিভ থেকে যায় কিনা।
ব্যাকটেস্ট রিভিউ
3146 দিনে (2017-08 → 2026-03) 314টি ক্লোজড ট্রেড, metrics_reliable=true, entry_diag 314/314টি এন্ট্রি সাবমিট করা হয়েছে যার মধ্যে 0টি বাদ পড়েছে।
ব্যাকটেস্ট রিভিউ
ট্রেডগুলো হাইপোথিসিস অনুযায়ী চলে: সব 314 LONG / 0 শর্ট (প্যারেন্টের LONG/FLAT/SHORT-এর সঠিক CASH সংকোচন), 0.497 ক্যাপের বিপরীতে ম্যাক্স নোশনাল/ইকুইটি 0.50, গড় হোল্ড 4দ8ঘ এবং 43.6% এক্সপোজার ফিউচারস প্যারেন্টকে পুনরুৎপাদন করছে।
ব্যাকটেস্ট রিভিউ
~0.20% BINANCE_SPOT রাউন্ড ট্রিপের বিপরীতে avg_trade_return_pct 1.20%; কমিশন শুধু গ্রসের 8.97%, ইমপ্যাক্ট 4.33% — ফি-মার্জিনাল নয়।
ব্যাকটেস্ট রিভিউ
max_drawdown 10.3% (15% স্পট ডিফল্টের অধীনে), PF 1.41, পেঅফ 40.4% হিট রেটে 2.07 (সঠিক ট্রেন্ড শেপ), স্ট্রেসড ভোল টারসাইল +28.0%।
ব্যাকটেস্ট রিভিউ
চরম কনসেন্ট্রেশন: 314টি ট্রেডের মধ্যে শীর্ষ 10 = সমষ্টিগত পার-ট্রেড রিটার্নের 93.8%, শীর্ষ 20 = 141% (ট্রেড 21–314 নিট নেগেটিভ)।
ব্যাকটেস্ট রিভিউ
মাত্র 6/10 ক্যালেন্ডার বছর পজিটিভ — একদম হার্ড ফ্লোরে — এবং সাম্প্রতিক দুই বছরই নেগেটিভ (2025 −10.5%, 2026 −9.9%)।
ব্যাকটেস্ট রিভিউ
শার্প 0.664, sharpe_ci_low 0.0042 এবং PSR 0.924 (<0.95) সহ: ~225-ট্রায়াল সিলেকশন বার-এর আগেই ইতিমধ্যে মার্জিনাল।
ব্যাকটেস্ট রিভিউ
QA-এর উদ্বেগ আংশিকভাবে নিশ্চিত হয়েছে: 'নরমাল' ভোল টারসাইল নেগেটিভই থেকে যায় (−7.70%, 16.1% DD), information_ratio −0.757, আলফা মাত্র +2.4%/বছর — এটি BTC হোল্ড করার তুলনায় আন্ডারপারফর্ম করে, এবং benchmark_meaningful=true হওয়ায় সেই ঘাটতিটি বাস্তব।
ব্যাকটেস্ট রিভিউ
প্যারামিটারগুলো অন্য একটি ভেন্যু/ডিরেকশন সেট থেকে আউট-অফ-স্যাম্পল ট্রান্সফার — ওভারফিট নয় বরং আনটিউনড, তবে এখানে অপরীক্ষিতও।
Stratmill একটি রিসার্চ ও পেপার-ট্রেডিং টুল, আর্থিক পরামর্শ বা ব্রোকার নয়। ব্যাকটেস্ট ও পেপার ফলাফল কাল্পনিক। ট্রেডিংয়ে ক্ষতির ঝুঁকি রয়েছে।