औसत प्रतिवर्तन लिफाफा चलती औसत रणनीति

लेखक:चाओझांग, दिनांकः 2023-12-04 16:12:39
टैगः

img

अवलोकन

औसत प्रतिगमन लिफाफा चलती औसत रणनीति एक औसत प्रतिगमन व्यापार रणनीति है जो चलती औसत पर आधारित है। यह आधार गणना के रूप में डबल घातीय चलती औसत (डीईएमए) का उपयोग करता है और इसके ऊपर और नीचे कई लिफाफे जोड़ता है। जब कीमत लिफाफा बैंड को छूती है, तो यह दिशा के आधार पर लंबी या छोटी स्थिति खोलती है। जब कीमत चलती औसत में गिरती है, तो यह सभी पदों को बंद कर देती है।

रणनीति तर्क

यह रणनीति डबल एक्सपोनेंशियल मूविंग एवरेज (डीईएमए) का उपयोग आधार संकेतक के रूप में करती है, जो एक मूविंग एवरेज है जो हाल के मूल्य परिवर्तनों के प्रति अधिक संवेदनशील है। डीईएमए के ऊपर और नीचे, एक लिफाफा क्षेत्र बनाने के लिए कई मूल्य बैंड जोड़े जाते हैं। लिफाफे की सीमा उपयोगकर्ता द्वारा सेट की जाती है, प्रत्येक बैंड के बीच एक निश्चित प्रतिशत अंतराल के साथ।

जब कीमत बढ़ जाती है और ऊपरी लिफाफे के बैंड के करीब आती है, तो रणनीति एक छोटी स्थिति खोलती है। जब कीमत गिरती है और निचले लिफाफे के बैंड को छूती है, तो यह एक लंबी स्थिति खोलती है। यह हर बार एक नई मूल्य बैंड को छूने पर एक नई स्थिति जोड़ती है। जब कीमत चलती औसत के करीब गिरती है, तो सभी पद बंद हो जाते हैं।

लिफाफा बैंड के साथ अत्यधिक मूल्य उतार-चढ़ाव को पकड़ने और उलटफेर से लाभान्वित करने के माध्यम से, रणनीति का उद्देश्य कम खरीदना और उच्च बेचना है। यह स्पष्ट औसत प्रतिगमन प्रवृत्तियों के साथ बाजार चक्रों में फिट बैठता है, जैसे कि बिटकॉइन जैसी क्रिप्टोकरेंसी।

लाभ

  • ट्रेंड रिवर्स को पकड़ने के लिए डबल एक्सपोनेंशियल मूविंग एवरेज का उपयोग करता है, जो अल्पकालिक मूल्य परिवर्तनों के प्रति संवेदनशील होता है।
  • चलती औसत के चारों ओर लिफाफा बैंड मूल्य उलट को सटीक रूप से पकड़ सकते हैं।
  • पूंजी दक्षता का पूर्ण उपयोग करते हुए बैचों में पद खोलता है।
  • लाभ के बाद बाजार में परिवर्तन के अनुकूल दिशाओं को जल्दी से बदल दें।
  • मापदंडों को स्वतंत्र रूप से अनुकूलित किया जा सकता है।

जोखिम

  • बाजारों के मजबूत रुझानों से लाभान्वित होने में असमर्थ।
  • अनुचित मापदंडों के कारण अत्यधिक व्यापार हो सकता है।
  • अपेक्षाकृत स्थिर बाजारों की आवश्यकता है, जो अत्यधिक अस्थिर वातावरण के लिए उपयुक्त नहीं हैं।
  • बहुत संकीर्ण लिफाफे स्थिति में प्रवेश करने में बाधा डाल सकते हैं।

संवेदनशीलता बढ़ाने और विभिन्न बाजार चक्रों के अनुरूप चलती औसत लंबाई को समायोजित करने के लिए लिफाफे की सीमा को उचित रूप से विस्तारित करके जोखिमों को कम किया जा सकता है।

अनुकूलन दिशाएँ

इस रणनीति को निम्नलिखित पहलुओं में अनुकूलित किया जा सकता हैः

  1. विभिन्न चलती औसत एल्गोरिदम का परीक्षण करें।

  2. अल्पकालिक उतार-चढ़ाव के लिए बेहतर अनुकूलन के लिए चलती औसत लंबाई पैरामीटर समायोजित करें।

  3. विभिन्न प्रतिशत सेटिंग्स का परीक्षण करके लिफाफे के मापदंडों को अनुकूलित करें।

  4. एकल व्यापार हानि को सीमित करने के लिए स्टॉप लॉस विधियों को जोड़ें जैसे ट्रैलिंग स्टॉप लॉस।

  5. तर्कहीन बाजारों में अमान्य प्रविष्टियों से बचने के लिए अन्य संकेतकों के साथ फ़िल्टरिंग स्थितियों को जोड़ें।

निष्कर्ष

औसत प्रतिगमन लिफाफा चलती औसत रणनीति प्रभावी रूप से चलती औसत के चारों ओर एक मूल्य चैनल का निर्माण करके औसत प्रतिगमन अवसरों को पकड़ती है। यह पैरामीटर समायोजन के माध्यम से विभिन्न बाजार वातावरण के लिए लचीले ढंग से अनुकूलित किया जा सकता है। अपेक्षाकृत कम लेनदेन लागत और उच्च रिटर्न के साथ, यह एक अनुशंसित मात्रात्मक व्यापारिक रणनीति है।


/*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)


अधिक