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


निर्माण तिथि: 2023-09-26 17:22:21 अंत में संशोधित करें: 2023-09-26 17:22:21
कॉपी: 7 क्लिक्स: 976
1
ध्यान केंद्रित करना
1617
समर्थक

अवलोकन

इस रणनीति में औसत क्रॉसिंग और औसत वास्तविक तरंग दैर्ध्य के दो तकनीकी संकेतकों का उपयोग किया गया है, जो उच्च जीत दर प्राप्त करने के लिए प्रवृत्ति में औसत क्रॉसिंग संकेतों की पहचान करते हैं।

सिद्धांत

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

लाभ

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

जोखिम

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

अनुकूलन दिशा

  • एटीआर को पूरक या प्रतिस्थापित करने के लिए अन्य संकेतकों का प्रयास करें, जैसे कि ब्रिन बैंड
  • औसत क्रॉस प्रकार अन्य संयोजनों के लिए विस्तार योग्य है, जैसे ईएमए, गतिशीलता सूचकांक आदि
  • धोखाधड़ी से बचने के लिए ब्रेक-सत्यापन तंत्र में शामिल हो सकते हैं
  • ऑप्टिमाइज़ेशन पैरामीटर सेटिंग अनुक्रमः एटीआर लंबाई और चिकनाई > औसत लाइन लंबाई > स्टॉप लॉस स्टॉप सेटिंग
  • निधि प्रबंधन रणनीतियों के संयोजन पर विचार करें, जैसे कि निश्चित हिस्सेदारी, गतिशील स्थिति आदि
  • वास्तविक समय पर दीर्घकालिक परीक्षण, रणनीति की स्थिरता और अधिकतम वापसी का आकलन

संक्षेप

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

रणनीति स्रोत कोड
/*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")