औसत प्रतिगमन लिफाफा चलती औसत रणनीति एक औसत प्रतिगमन व्यापार रणनीति है जो चलती औसत पर आधारित है। यह आधार गणना के रूप में डबल घातीय चलती औसत (डीईएमए) का उपयोग करता है और इसके ऊपर और नीचे कई लिफाफे जोड़ता है। जब कीमत लिफाफा बैंड को छूती है, तो यह दिशा के आधार पर लंबी या छोटी स्थिति खोलती है। जब कीमत चलती औसत में गिरती है, तो यह सभी पदों को बंद कर देती है।
यह रणनीति डबल एक्सपोनेंशियल मूविंग एवरेज (डीईएमए) का उपयोग आधार संकेतक के रूप में करती है, जो एक मूविंग एवरेज है जो हाल के मूल्य परिवर्तनों के प्रति अधिक संवेदनशील है। डीईएमए के ऊपर और नीचे, एक लिफाफा क्षेत्र बनाने के लिए कई मूल्य बैंड जोड़े जाते हैं। लिफाफे की सीमा उपयोगकर्ता द्वारा सेट की जाती है, प्रत्येक बैंड के बीच एक निश्चित प्रतिशत अंतराल के साथ।
जब कीमत बढ़ जाती है और ऊपरी लिफाफे के बैंड के करीब आती है, तो रणनीति एक छोटी स्थिति खोलती है। जब कीमत गिरती है और निचले लिफाफे के बैंड को छूती है, तो यह एक लंबी स्थिति खोलती है। यह हर बार एक नई मूल्य बैंड को छूने पर एक नई स्थिति जोड़ती है। जब कीमत चलती औसत के करीब गिरती है, तो सभी पद बंद हो जाते हैं।
लिफाफा बैंड के साथ अत्यधिक मूल्य उतार-चढ़ाव को पकड़ने और उलटफेर से लाभान्वित करने के माध्यम से, रणनीति का उद्देश्य कम खरीदना और उच्च बेचना है। यह स्पष्ट औसत प्रतिगमन प्रवृत्तियों के साथ बाजार चक्रों में फिट बैठता है, जैसे कि बिटकॉइन जैसी क्रिप्टोकरेंसी।
संवेदनशीलता बढ़ाने और विभिन्न बाजार चक्रों के अनुरूप चलती औसत लंबाई को समायोजित करने के लिए लिफाफे की सीमा को उचित रूप से विस्तारित करके जोखिमों को कम किया जा सकता है।
इस रणनीति को निम्नलिखित पहलुओं में अनुकूलित किया जा सकता हैः
विभिन्न चलती औसत एल्गोरिदम का परीक्षण करें।
अल्पकालिक उतार-चढ़ाव के लिए बेहतर अनुकूलन के लिए चलती औसत लंबाई पैरामीटर समायोजित करें।
विभिन्न प्रतिशत सेटिंग्स का परीक्षण करके लिफाफे के मापदंडों को अनुकूलित करें।
एकल व्यापार हानि को सीमित करने के लिए स्टॉप लॉस विधियों को जोड़ें जैसे ट्रैलिंग स्टॉप लॉस।
तर्कहीन बाजारों में अमान्य प्रविष्टियों से बचने के लिए अन्य संकेतकों के साथ फ़िल्टरिंग स्थितियों को जोड़ें।
औसत प्रतिगमन लिफाफा चलती औसत रणनीति प्रभावी रूप से चलती औसत के चारों ओर एक मूल्य चैनल का निर्माण करके औसत प्रतिगमन अवसरों को पकड़ती है। यह पैरामीटर समायोजन के माध्यम से विभिन्न बाजार वातावरण के लिए लचीले ढंग से अनुकूलित किया जा सकता है। अपेक्षाकृत कम लेनदेन लागत और उच्च रिटर्न के साथ, यह एक अनुशंसित मात्रात्मक व्यापारिक रणनीति है।
/*backtest start: 2022-11-27 00:00:00 end: 2023-12-03 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Mean Reversion - Envelope Strategy", overlay=true ) // ----------------------- DESCRIPTION ----------------------- // THIS SCRIPT IS A MEAN REVERSION SYSTEM THAT USES A MOVING AVERAGE AS BASE CALCULATION AND A % OF THIS MOVING AVERAGE TO CALCULATE THE ENVELOPE // BY DEFAULT, THE SYSTEM WILL PLACE LONG ORDERS ON THE MOVING AVERAGE -5% PER ENVELOPE COUNT (5%, 10% AND SO ON...) // YOU CAN ENABLE THE SHORT ORDERS THAT WILL FOLLOW THE SAME LOGIC ON THE OPPOSITE SIDE // THE SYSTEM WILL CLOSE EVERY ONGOING TRADE WHEN THE PRICE RETURNS TO THE MEAN // --------------------------------------------- // ---------------- SETTINGS ------------------- src = input(close, "Moving Average Source", group = "Moving Average") ma_window = input.int(5, "Moving Average Window", step = 1, group = "Moving Average") ma_type = input.string('4. DEMA', "Moving Average Type", options=['1. SMA', '2. EMA', '3. RMA', '4. DEMA'], group = "Moving Average") enveloppe_step = input.float(0.05, "Delta Per Enveloppe", step = 0.01, group = "Envelope") envelope_count = input.int(5, "Envelope count", options = [1, 2, 3, 4, 5], group = "Envelope") use_longs = input.bool(true, 'Use Long Orders ?', group = "Orders") use_short = input.bool(false, 'Use Short Orders ?', group = "Orders") // --------------------------------------------- // -------------- INDICATORS ------------------- ma_funct() => if(ma_type == '1. SMA') ta.sma(src, ma_window) if(ma_type == '2. EMA') ta.ema(src, ma_window) if(ma_type == '3. RMA') ta.rma(src, ma_window) if(ma_type == '4. DEMA') 2 * ta.ema(src, ma_window) - ta.ema(ta.ema(src, ma_window), ma_window) ma_base = ma_funct() ma_high_1 = envelope_count > 0 ? ma_base * (1 + enveloppe_step) : na ma_high_2 = envelope_count > 1 ? ma_base * (1 + enveloppe_step * 2) : na ma_high_3 = envelope_count > 2 ? ma_base * (1 + enveloppe_step * 3) : na ma_high_4 = envelope_count > 3 ? ma_base * (1 + enveloppe_step * 4) : na ma_high_5 = envelope_count > 4 ? ma_base * (1 + enveloppe_step * 5) : na ma_low_1 = envelope_count > 0 ? ma_base * (1 - enveloppe_step) : na ma_low_2 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 2) : na ma_low_3 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 3) : na ma_low_4 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 4) : na ma_low_5 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 5) : na // --------------------------------------------- // --------------- STRATEGY -------------------- if use_longs if envelope_count > 0 and strategy.opentrades < 1 strategy.entry('long 1', strategy.long, limit=ma_low_1, qty=(strategy.equity / ma_low_1) * (1 / envelope_count)) if envelope_count > 1 and strategy.opentrades < 2 strategy.entry('long 2', strategy.long, limit=ma_low_2, qty=(strategy.equity / ma_low_2) * (1 / envelope_count)) if envelope_count > 2 and strategy.opentrades < 3 strategy.entry('long 3', strategy.long, limit=ma_low_3, qty=(strategy.equity / ma_low_3) * (1 / envelope_count)) if envelope_count > 3 and strategy.opentrades < 4 strategy.entry('long 4', strategy.long, limit=ma_low_4, qty=(strategy.equity / ma_low_4) * (1 / envelope_count)) if envelope_count > 4 and strategy.opentrades < 5 strategy.entry('long 5', strategy.long, limit=ma_low_5, qty=(strategy.equity / ma_low_5) * (1 / envelope_count)) if use_short if envelope_count > 0 and strategy.opentrades < 1 strategy.entry('short 1', strategy.short, limit=ma_high_1, qty=(strategy.equity / ma_high_1) * (1 / envelope_count)) if envelope_count > 1 and strategy.opentrades < 2 strategy.entry('short 2', strategy.short, limit=ma_high_2, qty=(strategy.equity / ma_high_2) * (1 / envelope_count)) if envelope_count > 2 and strategy.opentrades < 3 strategy.entry('short 3', strategy.short, limit=ma_high_3, qty=(strategy.equity / ma_high_3) * (1 / envelope_count)) if envelope_count > 3 and strategy.opentrades < 4 strategy.entry('short 4', strategy.short, limit=ma_high_4, qty=(strategy.equity / ma_high_4) * (1 / envelope_count)) if envelope_count > 4 and strategy.opentrades < 5 strategy.entry('short 5', strategy.short, limit=ma_high_5, qty=(strategy.equity / ma_high_5) * (1 / envelope_count)) strategy.exit('close', limit=ma_base) // --------------------------------------------- // ------------------ PLOT --------------------- ma_base_plot = plot(ma_base, title = "Base MA", color = color.orange, linewidth = 3, offset = 1) ma_high_1_plot = plot(ma_high_1, title = "MA high 1", color = color.red, offset = 1) ma_high_2_plot = plot(ma_high_2, title = "MA high 2", color = color.red, offset = 1) ma_high_3_plot = plot(ma_high_3, title = "MA high 3", color = color.red, offset = 1) ma_high_4_plot = plot(ma_high_4, title = "MA high 4", color = color.red, offset = 1) ma_high_5_plot = plot(ma_high_5, title = "MA high 5", color = color.red, offset = 1) ma_low_1_plot = plot(ma_low_1, title = "MA low 1", color = color.green, offset = 1) ma_low_2_plot = plot(ma_low_2, title = "MA low 2", color = color.green, offset = 1) ma_low_3_plot = plot(ma_low_3, title = "MA low 3", color = color.green, offset = 1) ma_low_4_plot = plot(ma_low_4, title = "MA low 4", color = color.green, offset = 1) ma_low_5_plot = plot(ma_low_5, title = "MA low 5", color = color.green, offset = 1)