बेसलाइन क्रॉस क्वालिफायर ATR Volatility & HMA Trend Bias Mean Reversal रणनीति

लेखक:चाओझांग, दिनांकः 2024-01-17 16:37:23
टैगः

img

अवलोकन

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

रणनीति तर्क

यह रणनीति 37-अवधि के चलती औसत का उपयोग आधार रेखा के रूप में करती है। जब कीमत इस आधार रेखा से ऊपर की ओर टूटती है, तो यह एक खरीद संकेत उत्पन्न करती है, और जब यह ऊपर से टूटती है, तो यह एक बिक्री संकेत उत्पन्न करती है। झूठे संकेतों से बचने के लिए, रणनीति के लिए संकेतों की वैधता की पुष्टि करने के लिए आधार रेखा में प्रवेश करने के बाद 2xATR अस्थिरता से परे मूल्य को स्थानांतरित करने की आवश्यकता होती है। इसके अलावा, रणनीति प्रमुख प्रवृत्ति का न्याय करने के लिए 11-अवधि के एचएमए का उपयोग करती है। यह केवल वैध संकेतों की पुष्टि करती है जब प्रतिकूल चयन को रोकने के लिए मूल्य प्रवेश आधार रेखा एचएमए दिशा के साथ संरेखित होती है।

लाभ लेने के लिए, रणनीति एक या कई (दो या तीन) लाभ लेने के स्तरों का उपयोग करने का समर्थन करती है। स्टॉप लॉस के लिए, यह बस लंबी और छोटी पदों के लिए SL के रूप में ऊपरी और निचले बैंड लाइनों को लेता है।

लाभ विश्लेषण

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

जोखिम और समाधान

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

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

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

  1. मानकों के इष्टतम सेट का पता लगाने के लिए अधिक पैरामीटर संयोजनों का परीक्षण करें, उदाहरण के लिए, आधार अवधि, एटीआर अवधि, अस्थिरता गुणांक आदि।

  2. मॉडल की मजबूती बढ़ाने के लिए बाजार की स्थितियों का आकलन करने के लिए अधिक फिल्टर या ऑसिलेटर जोड़ें।

  3. लाभ लेने के तंत्र के लिए मापदंडों को अनुकूलित करना, अधिक मूल्य स्तरों और आवंटन योजनाओं का परीक्षण करना।

  4. अधिक प्रभावी ट्रेडिंग सिग्नल उत्पन्न करने के लिए मशीन लर्निंग मॉडल को शामिल करें।

निष्कर्ष

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


/*backtest
start: 2023-01-10 00:00:00
end: 2024-01-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © sevencampbell

//@version=5
strategy(title="Baseline Cross Qualifier Volatility Strategy with HMA Trend Bias", overlay=true)

// --- User Inputs ---

// Baseline Inputs
baselineLength = input.int(title="Baseline Length", defval=20)
baseline = ta.sma(close, baselineLength)

// PBCQ Inputs
pbcqEnabled = input.bool(title="Post Baseline Cross Qualifier Enabled", defval=true)
pbcqBarsAgo = input.int(title="Post Baseline Cross Qualifier Bars Ago", defval=3)

// Volatility Inputs
atrLength = input.int(title="ATR Length", defval=14)
multiplier = input.float(title="Volatility Multiplier", defval=2.0)
rangeMultiplier = input.float(title="Volatility Range Multiplier", defval=1.0)
qualifierMultiplier = input.float(title="Volatility Qualifier Multiplier", defval=0.5)

// Take Profit Inputs
takeProfitType = input.string(title="Take Profit Type", options=["1 Take Profit", "2 Take Profits", "3 Take Profits"], defval="1 Take Profit")

// HMA Inputs
hmaLength = input.int(title="HMA Length", defval=50)

// --- Calculations ---

// ATR
atr = ta.atr(atrLength)

// Range Calculation
rangeHigh = baseline + rangeMultiplier * atr
rangeLow = baseline - rangeMultiplier * atr
rangeColor = rangeLow <= close and close <= rangeHigh ? color.yellow : na
bgcolor(rangeColor, transp=90)

// Qualifier Calculation
qualifier = qualifierMultiplier * atr

// Dot Calculation
isLong = close > baseline and (close - baseline) >= qualifier and close > ta.hma(close, hmaLength)
isShort = close < baseline and (baseline - close) >= qualifier and close < ta.hma(close, hmaLength)
colorDot = isLong ? color.green : isShort ? color.red : na
plot(isLong or isShort ? baseline : na, color=colorDot, style=plot.style_circles, linewidth=3)

// --- Strategy Logic ---

// PBCQ
pbcqValid = not pbcqEnabled or low[pbcqBarsAgo] > baseline

// Entry Logic
longCondition = isLong and pbcqValid
shortCondition = isShort and pbcqValid
if (longCondition)
    strategy.entry("Long", strategy.long)
if (shortCondition)
    strategy.entry("Short", strategy.short)

// Exit Logic
if (takeProfitType == "1 Take Profit")
    strategy.exit("TP/SL", "Long", limit=rangeHigh, stop=rangeLow)
    strategy.exit("TP/SL", "Short", limit=rangeLow, stop=rangeHigh)
else if (takeProfitType == "2 Take Profits")
    strategy.exit("TP1", "Long", qty=strategy.position_size * 0.5, limit=rangeHigh / 2)
    strategy.exit("TP2", "Long", qty=strategy.position_size * 0.5, limit=rangeHigh)
    strategy.exit("TP1", "Short", qty=strategy.position_size * 0.5, limit=rangeLow / 2)
    strategy.exit("TP2", "Short", qty=strategy.position_size * 0.5, limit=rangeLow)
else if (takeProfitType == "3 Take Profits")
    strategy.exit("TP1", "Long", qty=strategy.position_size * 0.5, limit=rangeHigh / 2)
    strategy.exit("TP2", "Long", qty=strategy.position_size * 0.25, limit=rangeHigh * 0.75)
    strategy.exit("TP3", "Long", qty=strategy.position_size * 0.25, limit=rangeHigh * 1.5)


अधिक