परिचय: Harness Engineer दर्शन
हाल ही में AI/ML इंजीनियरिंग समुदाय में एक सोचने का तरीका तेजी से चर्चा में है—Harness Engineer।
इसका मूल विचार बहुत सरल है:
खुद से अंदाज़ा लगाकर जवाब देने के बजाय, एक ढाँचा बनाएं जो डेटा और प्रयोगों को खुद जवाब खोजने दे।
पारंपरिक इंजीनियर का तरीका: मुझे लगता है पैरामीटर A अच्छा है, मैं कोड लिखकर A लागू करूँगा। Harness Engineer का तरीका: मुझे नहीं पता A, B, C में से कौन बेहतर है, मैं एक ढाँचा बनाऊँगा जहाँ A, B, C एक साथ चलेंगे, और डेटा मुझे जवाब देगा।
इंजीनियर खोज स्थान और मूल्यांकन मानदंड परिभाषित करता है, सिस्टम उस स्थान में स्वचालित रूप से इष्टतम ढूँढता है। यह सोच ML में walk-forward optimization और AutoML से मेल खाती है; क्वांट में भी इसके प्राकृतिक अनुप्रयोग हैं।
शैतान सिक्के: सबसे स्पष्ट प्रवृत्ति का मैदान
क्रिप्टोकरेंसी वायदा बाजार में, एक विशेष प्रकार के सिक्के ध्यान देने योग्य हैं—बहुत अधिक ट्रेडिंग वॉल्यूम वाले "शैतान सिक्के"।
इन सिक्कों की कुछ सामान्य विशेषताएँ हैं:
- पूँजी अत्यधिक केंद्रित, प्रमुख खिलाड़ियों का व्यवहार स्पष्ट
- प्रवृत्ति निरंतरता अपेक्षाकृत मजबूत, एक बार शुरू होने पर अक्सर लंबे समय तक चलती है
- अस्थिरता अधिक, कुछ उच्च वॉल्यूम वाले सिक्के विशिष्ट अवधियों में मजबूत प्रवृत्ति दिखाते हैं, मूविंग एवरेज रणनीतियों का ऐतिहासिक बैकटेस्ट इन पर अपेक्षाकृत अच्छा रहा है
इसीलिए, इन सिक्कों पर क्लासिक डुअल मूविंग एवरेज क्रॉसओवर रणनीति का उपयोग करना एक सरल और उचित प्रारंभिक बिंदु है। तेज़ रेखा धीमी रेखा को ऊपर से पार करती है, प्रवृत्ति शुरू होती है, अनुसरण करें; तेज़ रेखा धीमी रेखा को नीचे से पार करती है, प्रवृत्ति उलट जाती है, बाहर निकलें। तर्क सरल है, लेकिन स्पष्ट प्रवृत्ति वाले सिक्कों पर ऐतिहासिक प्रदर्शन अक्सर खराब नहीं होता।
एक ही समस्या है: कौन से सिक्के शैतान हैं? किस मूविंग एवरेज पैरामीटर का उपयोग करें?
ये दो प्रश्न, यदि मानवीय निर्णय पर छोड़ दिए जाएँ, तो बहुत व्यक्तिपरक हैं; एक अलग व्यक्ति पूरी तरह से अलग उत्तर दे सकता है। और बाजार गतिशील है, आज का शैतान सिक्का कल का शैतान नहीं हो सकता, आज का प्रभावी पैरामीटर सेट कल विफल हो सकता है।
यह वह जगह है जहाँ Harness Engineer दर्शन आता है।
मैन्युअल रूप से सिक्के चुनने और पैरामीटर ट्यून करने के बजाय, दोनों समस्याओं को ढाँचे पर छोड़ दें—मूल्यांकन मानदंड परिभाषित करें, ऐतिहासिक डेटा को उम्मीदवार स्थान में खुद जवाब खोजने दें। इंसान को केवल यह तय करना है कि अच्छाई-बुराई मापने के लिए किस मानदंड का उपयोग करना है, बाकी सिस्टम पर छोड़ दें।
इस सोच के आधार पर, पूरी रणनीति को एक रोलिंग फ़िल्टरिंग ढाँचे के रूप में डिज़ाइन किया गया है, जो तीन स्तरों पर काम करता है।
रणनीति संरचना: दो-स्तरीय घुड़दौड़ तंत्र
पहला स्तर: अंतर्निहित पूल निर्माण
पूरे बाजार के वायदा उत्पादों में से, USD वॉल्यूम के आधार पर अवरोही क्रम में शीर्ष 150 सिक्के उम्मीदवार पूल के रूप में लिए जाते हैं।
क्यों वॉल्यूम? क्योंकि अधिक वॉल्यूम वाले स्थानों पर पूँजी सबसे अधिक केंद्रित होती है, प्रवृत्ति बनने की सबसे अधिक संभावना होती है, और शैतान सिक्के भी सबसे अधिक घने होते हैं। इस चरण में कोई व्यक्तिपरक निर्णय नहीं, विशुद्ध रूप से बाजार की पूँजी को वोट करने दें, जिसका ट्रेडिंग वॉल्यूम अधिक हो वह पूल में आए।
javascript
const filtered = tickers
.filter(t => t.Symbol.endsWith('USDT.swap'))
.map(t => ({ symbol: t.Symbol, quoteVolume: t.Last * t.Volume }))
.sort((a, b) => b.quoteVolume - a.quoteVolume)
.slice(0, topN)
.map(t => t.symbol);
तर्क बहुत सीधा है: USDT वायदा उत्पादों को फ़िल्टर करें, USD वॉल्यूम की गणना करें, अवरोही क्रम में व्यवस्थित करें, शीर्ष N लें। कोई व्यक्तिपरक निर्णय नहीं, बाजार की पूँजी खुद वोट करती है।
दूसरा स्तर: दोहरी घुड़दौड़ चयन
यह पूरी रणनीति का सबसे मुख्य भाग है, और वह स्थान जहाँ Harness दर्शन सबसे अधिक स्पष्ट है।
सही निष्पादन क्रम इस प्रकार है:
⚠️ ध्यान दें: किसी सिक्के की क्षमता का प्रतिनिधित्व करने के लिए इष्टतम पैरामीटर के स्कोर का उपयोग करना अपने आप में कुछ हद तक ओवरफ़िटिंग जोखिम रखता है—ऐतिहासिक रूप से सर्वश्रेष्ठ प्रदर्शन करने वाले पैरामीटर भविष्य में उतने प्रभावी नहीं हो सकते। इस सीमा पर लेख के बाद के भाग में आगे चर्चा की जाएगी।
बैकटेस्ट प्रक्रिया
उम्मीदवार पूल के प्रत्येक सिक्के के लिए, एक साथ कई MA पैरामीटर सेट चलाएँ। प्रत्येक पैरामीटर सेट ऐतिहासिक K-लाइनों पर स्वतंत्र रूप से चलता है, वास्तविक क्रॉसओवर ओपन-क्लोज़ तर्क का अनुकरण करता है:
javascript
// प्रत्येक सिक्के × प्रत्येक पैरामीटर सेट के लिए पुनरावृत्ति
for (const params of maParamsList) {
const bt = backtest_MA(records, params.fast, params.slow);
// प्रत्येक बैकटेस्ट स्वतंत्र रूप से देता है: जीत दर, लाभ-हानि अनुपात, अधिकतम ड्रॉडाउन, सिग्नल संख्या
}
प्रत्येक बैकटेस्ट का मुख्य तर्क मानक डुअल मूविंग एवरेज क्रॉसओवर है:
javascript
const crossUp = fastMA[i-1] <= slowMA[i-1] && fastMA[i] > slowMA[i];
const crossDown = fastMA[i-1] >= slowMA[i-1] && fastMA[i] < slowMA[i];
if (crossUp) position = { side: 'long', entryPrice: records[i].Close };
if (crossDown) position = { side: 'short', entryPrice: records[i].Close };
समग्र स्कोरिंग
बैकटेस्ट पूरा होने के बाद, प्रत्येक पैरामीटर सेट के बैकटेस्ट परिणामों का समग्र स्कोर किया जाता है। स्कोर दो भागों से बना है:
मानकीकृत भारांक स्कोर (कुल गुणांक 0.80):
javascript
const score =
Math.min(bt.winRate * 100, 100) * 0.30 // जीत दर, ऊपरी सीमा 100
+ Math.min(bt.profitFactor * 20, 60) * 0.30 // लाभ-हानि अनुपात, ऊपरी सीमा 60
+ Math.max(0, 1 - bt.maxDrawdown / maxMDD) * 100 * 0.20 // अधिकतम ड्रॉडाउन नियंत्रण
+ volPct * volPctBonus // अस्थिरता प्रतिशतक बोनस अतिरिक्त अंक
अस्थिरता प्रतिशतक बोनस अतिरिक्त अंक: अंतिम आइटम volPct × volPctBonus (डिफ़ॉल्ट गुणांक 10) भारांक प्रणाली से स्वतंत्र एक पुरस्कार आइटम है, जिसका उपयोग समान स्कोर स्थितियों में उन सिक्कों को प्राथमिकता देने के लिए किया जाता है जिनकी वर्तमान अस्थिरता ऐतिहासिक रूप से उच्च प्रतिशतक पर है—क्योंकि ऐसे सिक्के अक्सर अधिक सक्रिय प्रवृत्ति दिखाते हैं।
यह ध्यान देने योग्य है कि ये भार और बोनस गुणांक अनुभव-आधारित सेटिंग हैं, अनुकूलन से प्राप्त नहीं; वास्तविक उपयोग में बाजार की स्थितियों के अनुसार इन्हें और समायोजित किया जा सकता है।
पहला स्तर प्रतियोगिता: पैरामीटर प्रतियोगिता
एक ही सिक्के के विभिन्न पैरामीटर सेट अपने-अपने स्कोर प्राप्त करते हैं, उच्चतम स्कोर वाला सेट उस सिक्के का प्रतिनिधि स्कोर और इष्टतम पैरामीटर बन जाता है:
javascript
if (score > bestScore) {
bestScore = score;
bestResult = bt;
bestParams = params; // वर्तमान ऐतिहासिक प्रदर्शन पर सर्वश्रेष्ठ पैरामीटर सेट रिकॉर्ड करें
}
दूसरा स्तर प्रतियोगिता: सिक्का प्रतियोगिता
सभी सिक्के अपने-अपने शीर्ष स्कोर प्रस्तुत करते हैं, क्रमबद्ध करने के बाद शीर्ष N को श्वेतसूची में लिया जाता है:
javascript
results.sort((a, b) => b.score - a.score);
const whitelist = results.slice(0, topCoins).map(r => r.coin);
अंतिम आउटपुट प्रत्येक श्वेतसूची सिक्के के लिए विशिष्ट इष्टतम मूविंग एवरेज पैरामीटर है, न कि एक ही पैरामीटर सेट सभी पर लागू होता है।
तीसरा स्तर: वास्तविक व्यापार निष्पादन और जोखिम नियंत्रण
फ़िल्टर किए गए कॉन्फ़िगरेशन का उपयोग करके वास्तविक व्यापार करें, साथ ही कई स्तरों पर जोखिम नियंत्रण तंत्र जोड़ें:
सिग्नल ट्रिगर: श्वेतसूची सिक्कों के मूविंग एवरेज क्रॉसओवर स्थिति की वास्तविक समय में जाँच करें, गोल्डन क्रॉस पर लॉन्ग, डेथ क्रॉस पर शॉर्ट:
javascript
const crossUp = fastPrev <= slowPrev && fastCur > slowCur;
const crossDown = fastPrev >= slowPrev && fastCur < slowCur;
if (crossUp) longList.push(sym);
if (crossDown && allowShort) shortList.push(sym);
ट्रेलिंग स्टॉप-लाभ: लाभ एक निश्चित सीमा तक पहुँचने के बाद सक्रिय होता है, और ड्रॉडाउन सीमा लाभ के अनुसार गतिशील रूप से कड़ी होती है। तीन-स्तरीय सीमाएँ अनुभव-आधारित सेटिंग हैं; मुख्य तर्क यह है कि जितना अधिक लाभ, उतनी ही कम ड्रॉडाउन सहनशीलता, मौजूदा लाभ को सुरक्षित रखना:
javascript
function getDynamicTrailDrawdown(maxPnl) {
if (maxPnl >= 7) return 3; // उच्च लाभ, ड्रॉडाउन सहनशीलता कड़ी
if (maxPnl >= 4) return 2;
return 1.5; // कम लाभ, बाजार को अधिक जगह दें
}
बाजार स्थिति संवेदन: BTC अस्थिरता प्रतिशतक का पता लगाएं, उच्च अस्थिरता वातावरण में स्वचालित रूप से पोजीशन गुणांक कम करें, अत्यधिक स्थितियों में सीधे शॉर्ट पर प्रतिबंध लगाएं:
javascript
if (marketState === 'volatile') positionScaleDown = 0.5;
else if (marketState === 'high_vol') positionScaleDown = 0.8;
else if (marketState === 'low_vol') positionScaleDown = 0.7;
पूरी फ़िल्टरिंग प्रक्रिया आवधिक रोलिंग पुनर्चालन करती है, किसी एक कॉन्फ़िगरेशन पर स्थिर नहीं रहती, बाजार के साथ गतिशील रूप से श्वेतसूची और पैरामीटर अपडेट करती है।
अंतर्निहित धारणा: प्रवृत्ति की निरंतरता
इस ढांचे के काम करने के लिए, एक मुख्य धारणा पर निर्भर रहना आवश्यक है:
हाल के इतिहास में अच्छा प्रदर्शन करने वाले सिक्के और पैरामीटर, अगली छोटी अवधि में कुछ हद तक निरंतरता बनाए रखते हैं।
यह कोई अंधविश्वास नहीं है, इसके पीछे एक निश्चित बाजार तर्क है—पूंजी की जड़ता, बाजार की भावना की निरंतरता, और प्रमुख खिलाड़ियों के व्यवहार की निरंतरता, ये सब प्रवृत्ति को एक निश्चित समय खिड़की में मान्य बनाए रखते हैं।
लेकिन ईमानदारी से कहूं तो: इस धारणा का कोई कठोर सांख्यिकीय सत्यापन नहीं हुआ है, यह अधिक एक अनुभवजन्य निर्णय है। फ्रेमवर्क वास्तविक व्यापार में लगातार प्रभावी रहेगा या नहीं, यह अंततः वास्तविक ट्रेडिंग डेटा द्वारा ही परखा जाना चाहिए।
एक वास्तविक Harness Engineer से क्या अंतर है
यह स्पष्ट करना आवश्यक है।
इस रणनीति में Harness का रूप है, लेकिन वास्तविक Harness Engineer प्रणाली से तुलना करने पर अभी भी स्पष्ट अंतर हैं:
| आयाम | वास्तविक Harness | यह रणनीति |
|---|---|---|
| नमूना विभाजन | प्रशिक्षण सेट + सत्यापन सेट + होल्डआउट परीक्षण सेट | पूर्ण ऐतिहासिक डेटा पर बैकटेस्टिंग, कोई आउट-ऑफ-सैंपल सत्यापन नहीं |
| ओवरफिटिंग सुरक्षा | स्पष्ट सामान्यीकरण परीक्षण | पैरामीटर विविधता द्वारा आंशिक हेजिंग, अधूरा |
| प्रयोगात्मक पृथक्करण | प्रत्येक प्रकार स्वतंत्र रूप से चलता है, एक-दूसरे को प्रभावित नहीं करता | समान K-लाइन साझा करता है, अंतर्निहित युग्मन है |
| तैनाती सीमा | तैनाती के लिए मान्यता पारित करना अनिवार्य | उच्चतम स्कोर सीधे तैनात, कोई द्वितीयक सत्यापन परत नहीं |
| त्रुटि संचय | प्रत्येक परत का मूल्यांकन स्वतंत्र | दोनों स्तरों की रेस ऐतिहासिक रूप से इष्टतम पर आधारित, त्रुटि संचय |
मुख्य अंतर यह है: वास्तविक Harness पूछता है "क्या यह परिणाम आउट-ऑफ-सैंपल में भी मान्य है?", जबकि इस रणनीति के दो-स्तरीय रेस द्वारा चुना गया "इष्टतम" मूलतः ऐतिहासिक रूप से इष्टतम है — पैरामीटर स्तर पर ओवरफिटिंग, सिक्का स्तर पर ओवरफिटिंग के साथ मिलकर, क्या यह भविष्य में जारी रहेगा, यह एक सदा खुला प्रश्न है।
निष्कर्ष: नाव पर निशान बनाना तलवार ढूंढने के लिए, या प्रयास करने लायक?
मात्रात्मक दुनिया में, भविष्यवाणी हमेशा एक अत्यंत कठिन काम है।
बहुत से लोग कहेंगे कि ऐतिहासिक डेटा का उपयोग करके पैरामीटर चुनना और फिर लाइव ट्रेडिंग करना, मूलतः नाव पर निशान बनाकर तलवार ढूंढना है — तलवार पहले ही पानी में गिर चुकी है, और आपने नाव पर जो निशान बनाया है, वह आपको इसे खोजने में मदद नहीं कर सकता। बाजार बदलता है, प्रभावी पैरामीटर अप्रभावी हो जाते हैं, आज का चमत्कारी सिक्का कल सामान्य हो सकता है, कल का इष्टतम मूविंग एवरेज आज शोर हो सकता है।
यह आलोचना निराधार नहीं है।
लेकिन बात यह है कि, जो प्रयास किया जाना चाहिए, वह किया जाना चाहिए।
मात्रात्मकता का सार कभी भी एक सदा सही उत्तर खोजना नहीं है, बल्कि अनिश्चितता में व्यवस्थित रूप से जीत दर बढ़ाना है। भले ही वह नाव पर निशान बनाना ही क्यों न हो, आपको पहले एक नाव चाहिए, और पहले उस निशान को बनाना होगा — रणनीति को स्थापित करना (नाव) स्वयं मात्रात्मकता की शुरुआत है।
बेशक, फ्रेमवर्क स्वयं लाभ की गारंटी नहीं देता। फ्रेमवर्क होना केवल शुरुआती बिंदु है, असली मूल्य निरंतर निष्पादन और पुनरावृत्ति में है: श्वेतसूची को समायोजित किया जा सकता है, स्कोरिंग भार को बदला जा सकता है, पैरामीटर स्पेस का विस्तार किया जा सकता है, लाभ-स्टॉप और हानि-स्टॉप को अनुकूलित किया जा सकता है। हर समायोजन एक नया प्रयोग है, जो इस फ्रेमवर्क को वास्तविक Harness के करीब लाता है।
रास्ता चलने से बनता है, सोचने से नहीं।
रणनीति स्रोत कोड: Harness Engineer मूविंग एवरेज फ़िल्टर मात्रात्मक रणनीति
- 1



