एटीआर और मूविंग एवरेज क्रॉसओवर हाइब्रिड रणनीति

लेखक:चाओझांग, दिनांकः 2023-09-26 17:22:21
टैगः

अवलोकन

यह रणनीति उच्च जीत दर के लिए प्रवृत्ति संकेतों की पहचान करने के लिए औसत सच्ची सीमा (एटीआर) संकेतक और चलती औसत क्रॉसओवर को जोड़ती है।

तर्क

  • अपट्रेंड की पुष्टि करने के लिए उच्च समय सीमा पर मूल्य अस्थिरता निर्धारित करने के लिए एटीआर का उपयोग करें
  • कम समय सीमा पर तेजी से और धीमी गति से चलती औसत की गणना करें, जब तेजी से एमए धीमी एमए के ऊपर पार करता है, तब लंबा हो जाता है, जब तेजी से एमए धीमी एमए के नीचे पार करता है, तो छोटा हो जाता है
  • एटीआर अधिक समय सीमा पर समग्र प्रवृत्ति दर्शाता है; एमए क्रॉसओवर कम समय सीमा पर विशिष्ट प्रवेश बिंदुओं की पहचान करता है
  • एटीआर आरएमए चिकनाई, लंबाई और चिकनाई समायोज्य के साथ गणना की जाती है
  • एमए क्रॉसओवर में दो एसएमए शामिल हैं, लंबाई समायोज्य है

लाभ

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

जोखिम

  • एटीआर रुझान का आकलन विलंब के लिए संवेदनशील है, प्रारंभिक रुझान की शुरुआत को मिस कर सकता है
  • एमए क्रॉसओवर कई समायोजनों के लिए प्रवण, अधिक बिक्री संकेत
  • पैरामीटर ट्यूनिंग अत्यंत महत्वपूर्ण, अनुचित सेटिंग्स ओवर/अंडर ट्रेडिंग का कारण बनती हैं
  • उत्पाद के लिए इष्टतम पैरामीटर सेट के लिए ऐतिहासिक डेटा विश्लेषण की आवश्यकता है
  • घाटे को सीमित करने के लिए पर्याप्त धन सुनिश्चित करें

बढ़ोतरी के अवसर

  • एटीआर के अतिरिक्त/वैकल्पिक संकेतकों का पता लगाना, उदाहरण के लिए ट्रेंड की ताकत के लिए बोलिंगर बैंड
  • अन्य संयोजनों के साथ एमए क्रॉसओवर का विस्तार करें, जैसे ईएमए, गति संकेतक
  • झूठे ब्रेकआउट से बचने के लिए ब्रेकआउट पुष्टिकरण तंत्र शामिल करें
  • पैरामीटर अनुकूलन क्रमः एटीआर लंबाई/चमक > एमए लंबाई > स्टॉप लॉस/प्रॉफिट लें
  • पूंजी प्रबंधन रणनीतियों को एकीकृत करने पर विचार करें, उदाहरण के लिए, स्थिर अंश, गतिशील स्थिति आकार
  • रणनीति की स्थिरता और अधिकतम निकासी का मूल्यांकन करने के लिए व्यापक बैकटेस्टिंग

निष्कर्ष

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


/*backtest
start: 2023-08-26 00:00:00
end: 2023-09-25 00:00:00
period: 1h
basePeriod: 15m
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/
// © Phoenix085

//@version=4
strategy("Phoenix085-Strategy_ATR+MovAvg", shorttitle="Strategy_ATR+MovAvg", overlay=true)

// // ######################>>>>>>>>>>>>Inputs<<<<<<<<<<<#########################
// // ######################>>>>>>>>>>>>Strategy Inputs<<<<<<<<<<<#########################

TakeProfitPercent = input(50, title="Take Profit %", type=input.float, step=.25)
StopLossPercent = input(5, title="Stop Loss %", type=input.float, step=.25)

ProfitTarget = (close * (TakeProfitPercent / 100)) / syminfo.mintick
LossTarget = (close * (StopLossPercent / 100)) / syminfo.mintick

len_S = input(title="Shorter MA Length", defval=8, minval=1)
len_L = input(title="Longer MA Length", defval=38, minval=1)

TF = input(defval="", title="Session TF for calc only", type=input.session,options=[""])
TF_ = "1"

if TF == "3"
    TF_ == "1"
else 
    if TF == "5" 
        TF_ == "3"
    else 
        if TF == "15"
            TF_ == "5"
        else 
            if TF == "30"
                TF_ == "15"
            else 
                if TF == "1H"
                    TF_ == "30"
                else 
                    if TF == "2H"
                        TF_ == "1H"
                    else 
                        if TF == "4H"
                            TF_ == "3H"
                        else 
                            if TF == "1D"
                                TF_ == "4H"
                            else
                                if TF == "1W"
                                    TF_ == "1H"
                                else 
                                    if TF == "1M"
                                        TF_ == "1W"
                                    else
                                        if TF =="3H"
                                            TF_ == "2H"

Src = security(syminfo.tickerid, TF, close[1], barmerge.lookahead_on)

Src_ = security(syminfo.tickerid, TF_, close, barmerge.lookahead_off)

// ######################>>>>>>>>>>>>ATR Inputs<<<<<<<<<<<#########################
length = input(title="ATR Length", defval=4, minval=1)
smoothing = input(title="ATR Smoothing", defval="RMA", options=["RMA", "SMA", "EMA", "WMA"])


// //######################>>>>>>>>>>>>Custom Functions Declarations<<<<<<<<<<<#########################



// ######################>>>>>>>>>>>>ATR<<<<<<<<<<<#########################

ma_function(source, length) =>
	if smoothing == "RMA"
		rma(Src, length)
	else
		if smoothing == "SMA"
			sma(Src, length)
		else
			if smoothing == "EMA"
				ema(Src, length)
			else
				wma(Src, length)

ATR=ma_function(tr(true), length)


// //######################>>>>>>>>>>>>Conditions<<<<<<<<<<<#########################
ATR_Rise = ATR>ATR[1] and ATR[1]<ATR[2] and ATR[2]<ATR[3]

longCondition = crossover(sma(Src_, len_S), sma(Src_, len_L)) and sma(Src_, len_L) < sma(Src_, len_S) and (sma(Src_, len_S) < Src_[1])
shortCondition = crossunder(sma(Src_, len_S), sma(Src_, len_L)) and sma(Src_, len_L) > sma(Src_, len_S) 

plot(sma(Src_, len_S), color=color.lime, transp=90)
col = longCondition ? color.lime : shortCondition ? color.red : color.gray
plot(sma(Src_, len_L),color=col,linewidth=2)


bool IsABuy = longCondition 
bool IsASell = shortCondition

// // ######################>>>>>>>>>>>>Strategy<<<<<<<<<<<#########################

testStartYear = input(2015, "Backtest Start Year", minval=1980)
testStartMonth = input(1, "Backtest Start Month", minval=1, maxval=12)
testStartDay = input(1, "Backtest Start Day", minval=1, maxval=31)
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0)

testStopYear = input(9999, "Backtest Stop Year", minval=1980)
testStopMonth = input(12, "Backtest Stop Month", minval=1, maxval=12)
testStopDay = input(31, "Backtest Stop Day", minval=1, maxval=31)
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
inDateRange = true

bgcolor(inDateRange ? color.green : na, 90)
// //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<//

// // ######################>>>>>>LongEntries<<<<<<<#########################
if inDateRange and ATR_Rise and IsABuy 
    strategy.entry("longCondition",true,when = longCondition)
    strategy.close("shortCondition")
    strategy.exit("Take Profit or Stop Loss", "longCondition",trail_points = close * 0.05 / syminfo.mintick ,trail_offset = close * 0.05 / syminfo.mintick, loss = LossTarget)
// strategy.risk.max_drawdown(10, strategy.percent_of_equity)
    
// // ######################>>>>>>ShortEntries<<<<<<<#########################
if inDateRange and ATR_Rise and IsASell  
    strategy.entry("shortCondition",false,when = shortCondition)
    strategy.exit("Take Profit or Stop Loss", "shortCondition",trail_points = close * 0.05 / syminfo.mintick ,trail_offset = close * 0.05 / syminfo.mintick, loss = LossTarget)
    strategy.close("longCondition")

अधिक