मेरी algo strategy फ़ेल क्यों हुई? आम गलतियां और उनके इलाज
यह लेख अंग्रेज़ी से अनुवाद किया गया है। मूल लेख अंग्रेज़ी में पढ़ें
Algo strategy आमतौर पर दो में से किसी एक वजह से फ़ेल होती है: या तो उसने वैसे ट्रेड नहीं किया जैसा आप चाहते थे (setup या execution की दिक्कत, जैसे expire हो चुका broker session, reject हुआ order या कोई नियम जो कभी trigger ही नहीं होता), या उसने डिज़ाइन के मुताबिक ट्रेड किया और नुकसान हुआ (overfitting, नज़रअंदाज़ की गई costs, कमज़ोर risk control, बदला हुआ market या बस एक सामान्य drawdown)। पहले यह पता करें कि कौन सी वजह है; दोनों के इलाज बिल्कुल अलग हैं।
Step 1: पता करें कि यह किस तरह की गड़बड़ी है
| लक्षण | शायद | कहां देखें |
|---|---|---|
| कोई trade ही नहीं, या उम्मीद से काफ़ी कम | Setup या execution की दिक्कत | Notification log, broker connection, conditions |
| Orders लगे लेकिन reject हो गए | Execution की दिक्कत | Margin, order type, instrument, broker के messages |
| ऐसे समय या कीमतों पर trades जिनकी आपने उम्मीद नहीं की थी | Logic की दिक्कत | Runtime data, condition की परिभाषाएं |
| डिज़ाइन के मुताबिक trades, लेकिन नुकसान | Performance की दिक्कत | Live vs backtest, drawdown, costs |
जब strategy ने वैसे ट्रेड नहीं किया जैसा सोचा था
ये सबसे आम वजहें हैं, लगभग इस क्रम में कि ये कितनी बार सामने आती हैं:
- Broker जुड़ा नहीं है. Broker sessions को आमतौर पर नियमित रूप से renew करना पड़ता है। Session expire होने का मतलब है कि orders नहीं लग सकते। Market खुलने से पहले connection जांचें।
- पर्याप्त margin नहीं है. अगर account margin नहीं भर सकता तो F&O orders reject हो जाते हैं। पूरी position के लिए margin जांचें, hedges समेत।
- Contract बदल गया. अब NIFTY का lot size 65 है और BANK NIFTY का 30। NSE की weekly index expiry (सिर्फ़ NIFTY) मंगलवार को है, और BANK NIFTY, FINNIFTY और MIDCPNIFTY में सिर्फ़ monthly expiries हैं। पुराने setup के लिए लिखी गई strategy गलत contract चुन सकती है या ऐसा साइज़ जो अब मौजूद ही नहीं। हमारी पोस्ट NIFTY 65 और BANK NIFTY 30 lot sizes में लिस्ट है कि क्या जांचना है।
- कोई condition कभी true हो ही नहीं सकती. जैसे market hours के बाहर का entry time, या दो conditions जो एक-दूसरे को काटती हैं।
- गलत mode में deploy है. Live Offline में छोड़ी गई strategy trades रिकॉर्ड करती है लेकिन exchange को कुछ नहीं भेजती; Live Auto आपके broker को orders भेजता है। पक्का करें कि आप वही mode देख रहे हैं जो आप चाहते थे।
- Execution settings. Limit pricing जो तेज़ market में कभी fill नहीं होती, और कोई fallback न हो, तो entries या exits बिना fill के रह सकते हैं।
Tradetron पर strategy का notification log और runtime data (दोनों Deployed page पर three-dot menu में) दिखाते हैं कि strategy ने क्या जांचा, क्या तय किया और क्या भेजा। Tradetron पर strategy debug करने की गाइड इन्हें step by step समझाती है।
जब strategy ने डिज़ाइन के मुताबिक ट्रेड किया और नुकसान हुआ
क्या यह सच में फ़ेल हो रही है, या बस सामान्य drawdown में है?
हर strategy में घाटे का सिलसिला आता है, और यह ज़्यादातर लोगों की उम्मीद से लंबा होता है। 100 independent trades में, आधे समय जीतने वाली strategy में कहीं न कहीं लगातार छह नुकसान आने की संभावना आधे से ज़्यादा है, और 40% win-rate वाली strategy में लगातार सात नुकसान दिखने की संभावना न दिखने से ज़्यादा है।
Independent trades के लिए गणना की गई। लंबे घाटे के सिलसिले किसी भी strategy का सामान्य हिस्सा हैं
किसी strategy को टूटी हुई कहने से पहले, मौजूदा drawdown की तुलना उसके backtest के सबसे बुरे drawdown से करें। अगर यह उस दायरे में है, तो हो सकता है strategy ठीक वही कर रही हो जो पहले करती थी। अगर यह साफ़ तौर पर उससे आगे है (मोटे तौर पर, टेस्ट किए गए सबसे बुरे से 1.5 गुना से ज़्यादा), तो शायद कुछ बदल गया है।
छह आम जड़ की वजहें
| वजह | क्या हुआ | इलाज |
|---|---|---|
| Overfitting | Settings को तब तक tune किया गया जब तक backtest perfect न दिखे, इसलिए वे पुराने noise में फिट हो गईं | कम settings, एक स्थिर दायरे से values, अलग रखे गए डेटा पर जांच |
| Costs को नज़रअंदाज़ करना | Brokerage, taxes और slippage टेस्ट में नहीं थे | Backtest में असली costs लगाएं; कम बार ट्रेड करें या ज़्यादा liquid contracts लें |
| कमज़ोर risk management | कोई stop नहीं, कोई daily limit नहीं, साइज़ बहुत बड़ा | हर position पर stops, daily loss limit, risk के हिसाब से साइज़ |
| Market बदल गया | जिस पैटर्न पर strategy टिकी थी वह कमज़ोर पड़ गया, या contract बदल गया | Logic का review करें; टेस्ट किए गए बदलावों से ढालें या strategy को रिटायर करें |
| कोई forward testing नहीं | Backtest से सीधे पूरे साइज़ पर चले गए | पहले Live Offline चलाएं, फिर छोटे साइज़ से live जाएं |
| इंसानी दखल | Drawdown में बंद कर दी, जीत के बाद साइज़ बढ़ा दिया, session के बीच बदलाव किया | Review के नियम पहले से तय करें; बदलाव सिर्फ़ testing के ज़रिए करें |
1. Overfitting
सबसे पुरानी गड़बड़ी। जो strategy पचास versions में आज़माई गई और सबसे अच्छा version रखा गया, वह आमतौर पर live में निराश करती है। Backtesting की गलतियों वाली गाइड एक simulation से दिखाती है कि बिना असली edge वाली strategy भी काफ़ी कोशिशों के बाद कितनी शानदार दिख सकती है।
2. Transaction costs को नज़रअंदाज़ करना
इसका अंदाज़ा कैसे लगाएं, यह जानने के लिए पढ़ें slippage को समझना।
3. खराब risk management
बिना stop वाली, या बहुत बड़े साइज़ वाली strategy महीनों तक profitable रह सकती है और फिर एक दिन में सब वापस दे सकती है। Drawdown कम करने के सात तरीके में वे controls हैं जो हर strategy को चाहिए।
4. बदलते market में स्थिर नियम
Markets शांत और volatile, trending और sideways के बीच बदलते रहते हैं। एक हालात के लिए बनी strategy दूसरे में संघर्ष करेगी। यह हमेशा फ़ेल होना नहीं है; हो सकता है strategy को एक filter चाहिए, या उसे सिर्फ़ कुछ ख़ास हालात में ही चलना चाहिए। अगर यह लंबे समय से कमज़ोर पड़ रही है, तो पढ़ें strategy fatigue।
5. Live हालात में कोई testing नहीं
Backtest आपके broker के fills, signal और order के बीच की देरी, या ऐसी logic गलती नहीं देख सकता जो सिर्फ़ real time में दिखती है। Live Offline testing इनमें से कई चीज़ें पकड़ लेती है, इससे पहले कि उनकी कोई कीमत चुकानी पड़े।
6. साफ़ लक्ष्य न होना
बिना तय लक्ष्य के (कितना return, कितने maximum drawdown पर, कितने समय में), आप फ़ेल होती strategy और एक सामान्य खराब महीने में फ़र्क नहीं कर सकते, और हर नुकसान कुछ बदलने की वजह बन जाता है। Deploy करने से पहले लक्ष्य लिख लें।
जब strategy निराश करे, तो recovery plan
- नया risk रोकें, घबराकर exit न करें, जब तक कोई operational गड़बड़ी न हो।
- Execution जांचें: logs, broker connection, rejected orders।
- उन्हीं दिनों के लिए live की तुलना backtest से करें. वही trades? वही कीमतें?
- Drawdown की तुलना टेस्ट किए गए सबसे बुरे drawdown से करें.
- हाल के डेटा के साथ backtest दोबारा चलाएं, असली costs के साथ।
- एक चीज़ बदलें, उसे टेस्ट करें, और Live Offline चलाएं, दोबारा deploy करने से पहले।
- अगर edge खत्म हो गया है तो रिटायर कर दें. हर strategy को बचाना ज़रूरी नहीं।
यह भी काम का है: जब live algo trades उम्मीद के मुताबिक perform न करें तो क्या करें।
अक्सर पूछे जाने वाले सवाल
मेरी algo strategy trades क्यों नहीं ले रही?
सबसे आम वजहें हैं expire हुआ broker session, कम margin, बदला हुआ contract (lot size या expiry), ऐसी conditions जो पूरी नहीं हो सकतीं, या strategy का उस mode से अलग mode में चलना जिसकी आपने उम्मीद की थी। Strategy के logs बताते हैं कि वजह कौन सी है।
Backtest profitable था, फिर भी live में मेरी strategy पैसा क्यों गंवा रही है?
आमतौर पर उन costs और slippage की वजह से जो backtest में नहीं थे, बनाते समय हुए overfitting की वजह से, या इसलिए कि टेस्ट किए गए दौर के बाद market बदल गया। फ़र्क पकड़ने के लिए उन्हीं दिनों के live trades की तुलना backtest से करें।
कैसे पता करूं कि मेरी strategy टूटी है या बस drawdown में है?
मौजूदा drawdown की तुलना backtest के सबसे बुरे drawdown से करें। अगर यह उस दायरे में है, तो सामान्य हो सकता है। अगर यह उससे काफ़ी आगे है, या strategy ऐसे trades ले रही है जो उसके नियमों से नहीं बनने चाहिए, तो आगे बढ़ने से पहले जांच करें।
Overfitting कैसे पकड़ें?
चेतावनी के संकेत हैं: बहुत सारी tune की गई settings, ऐसे नतीजे जो किसी setting को थोड़ा बदलते ही ढह जाएं, और उस डेटा पर performance में बड़ी गिरावट जो strategy बनाने में इस्तेमाल नहीं हुआ।
अपनी algo strategy को कितनी बार update करना चाहिए?
हर महीने नतीजों का review करें और हर कुछ महीनों में नए डेटा के साथ दोबारा टेस्ट करें, लेकिन नियम कभी-कभार और सिर्फ़ testing के बाद बदलें। जब कोई contract बदले, जैसे lot size या expiry का दिन, तो तुरंत update करें।
क्या algo trading risk खत्म कर सकती है?
नहीं। यह आपके नियम एक जैसे लागू करती है और कई इंसानी गलतियां हटाती है, लेकिन market risk, execution risk और strategy के edge के कमज़ोर पड़ने का risk हमेशा बना रहता है।