माध्य प्रत्यावर्तन एटीआर प्रवृत्ति रणनीति


निर्माण तिथि: 2023-09-21 11:42:06 अंत में संशोधित करें: 2023-09-21 11:42:06
कॉपी: 1 क्लिक्स: 704
1
ध्यान केंद्रित करना
1617
समर्थक

अवलोकन

यह रणनीति मूल्य में उतार-चढ़ाव के उच्च या निम्न स्तर का उपयोग करके स्थिति में प्रवेश या बाहर निकलने का समय निर्धारित करती है। इसका उद्देश्य उच्च मूल्य में उतार-चढ़ाव के दौरान बहु-स्तरीय स्थिति स्थापित करना है और जब कीमत की प्रवृत्ति लाभप्रद हो जाती है तो स्थिति को बंद करना है।

रणनीति सिद्धांत

  1. एटीआर सूचकांक का उपयोग करके मूल्य में उतार-चढ़ाव की दर को मापने के लिए। हाल के 20 चक्रों के एटीआर मूल्य की गणना करें, और उनके चलती औसत और मानक अंतर की गणना करें। यदि वर्तमान एटीआर मूल्य औसत से अधिक है और एक मानक अंतर है, तो मूल्य में उतार-चढ़ाव की दर अधिक है।

  2. मूल्य प्रवृत्ति को निर्धारित करने के लिए एक-स्तरीय द्विआधारी मूल्य परिवर्तन दर का उपयोग करें। हाल के 20 चक्रों के लिए द्विआधारी समापन मूल्य परिवर्तन दर की गणना करें, इसके चलती औसत की गणना करें, यदि वर्तमान परिवर्तन दर लगातार 3 दिनों के लिए औसत से अधिक है और सकारात्मक है, तो यह माना जाता है कि कीमत ऊपर की ओर है।

  3. जब कीमतों में उतार-चढ़ाव अधिक होता है और कीमतों में वृद्धि होती है, तो अधिक स्थिति खोलें। जब कीमतों में गिरावट आती है, तो स्टॉप-लॉस कीमतों को ट्रिगर किया जाता है। स्टॉप-लॉस कीमतों को गतिशील रूप से समायोजित करें, हमेशा न्यूनतम मूल्य को घटाकर एटीआर के 2 गुना के बीच बनाए रखें।

श्रेष्ठता विश्लेषण

  1. कीमतों में उतार-चढ़ाव के उच्च स्तर और रुझानों का उपयोग करके अधिक से अधिक समय के लिए व्यापार करें और अस्थिर बाजारों में अक्सर व्यापार करने से बचें।

  2. गतिशील रूप से स्टॉप-लॉस की कीमतों को समायोजित करें, ताकि स्टॉप-लॉस को बहुत अधिक नुकसान से बचाया जा सके।

  3. 2015-2021 के बीच, रणनीति की वार्षिक रिटर्न दर 159% थी, जो कि खरीद और पकड़ रणनीति के 120% से कहीं अधिक थी।

जोखिम विश्लेषण

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

  2. प्रवृत्ति न्याय सूचक गलतफहमी पैदा कर सकता है, वास्तविक प्रवृत्ति के साथ मेल नहीं खाता है, संभावित नुकसान से बचने के लिए पुष्टि कारक को बढ़ाया जाना चाहिए।

  3. केवल 6 वर्षों के लिए, नमूना क्षेत्र का विस्तार करें और स्थिरता परीक्षण करें ताकि ओवरफिट न हो।

  4. चरम परिस्थितियों में प्रदर्शन का आकलन करने में असमर्थता, जैसे कि तेजी से एकाधिकार की स्थिति, मैन्युअल हस्तक्षेप की आवश्यकता या प्रोग्रामिंग को बंद करने की आवश्यकता।

अनुकूलन दिशा

  1. प्रवृत्ति की दिशा का अधिक सटीक रूप से आकलन करने के लिए MACD, KDJ आदि जैसे प्रवृत्ति की पुष्टि करने वाले संकेतक जोड़ें।

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

  3. ब्रेकआउट निर्णय मॉड्यूल को जोड़ना, प्रवृत्ति त्वरण कारक को कॉन्फ़िगर करना, और ब्रेकआउट होने पर स्थिति को बढ़ाना।

  4. विभिन्न प्रकार के नुकसान को रोकने के लिए, जैसे कि प्रतिशत नुकसान, उतार-चढ़ाव के नुकसान आदि के प्रभाव का परीक्षण करना।

  5. ट्रेडों की संख्या, आय वक्र की स्थिरता, अधिकतम निकासी आदि का आकलन करें ताकि रणनीति मजबूत हो सके।

संक्षेप

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

रणनीति स्रोत कोड
/*backtest
start: 2022-09-14 00:00:00
end: 2023-09-20 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/
// © DojiEmoji (kevinhhl)

//@version=4
strategy("Mean Reversion (ATR) Strategy [KL]",overlay=true,pyramiding=1)
ENUM_LONG = "Long"

// Timeframe {
backtest_timeframe_start = input(defval = timestamp("01 Apr 2000 13:30 +0000"), title = "Backtest Start Time", type = input.time)
USE_ENDTIME = input(false,title="Define backtest end-time (If false, will test up to most recent candle)")
backtest_timeframe_end = input(defval = timestamp("01 May 2021 19:30 +0000"), title = "Backtest End Time (if checked above)", type = input.time)
within_timeframe = true
// }

// Trailing stop loss {
ATR_X2_TSL = atr(input(14,title="Length of ATR for trailing stop loss")) * input(2.0,title="ATR Multiplier for trailing stop loss",type=input.float)
TSL_source = low
var stop_loss_price = float(0)
TSL_line_color = color.green, TSL_transp = 100
if strategy.position_size == 0 or not within_timeframe
    TSL_line_color := color.black
    stop_loss_price := TSL_source - ATR_X2_TSL 
else if strategy.position_size > 0
    stop_loss_price := max(stop_loss_price, TSL_source - ATR_X2_TSL)
    TSL_transp := 0
plot(stop_loss_price, color=color.new(TSL_line_color, TSL_transp))
// }

// Variables for confirmations of entry {
_len_volat = input(20,title="Length of ATR to determine volatility")
_ATR_volat = atr(_len_volat)
_avg_atr = sma(_ATR_volat, _len_volat)
_std_volat = stdev(_ATR_volat,_len_volat)
signal_diverted_ATR = _ATR_volat > (_avg_atr + _std_volat) or _ATR_volat < (_avg_atr - _std_volat)

_len_drift = input(20,title="Length of Drift")//default set to const: _len_vol's default value
_prcntge_chng = log(close/close[1])
_drift = sma(_prcntge_chng, _len_drift) - pow(stdev(_prcntge_chng, _len_drift),2)*0.5
_chg_drift = _drift/_drift[1]-1
signal_uptrend = (_drift > _drift[1] and _drift > _drift[2]) or _drift > 0

entry_signal_all = signal_diverted_ATR and signal_uptrend
// }

alert_per_bar(msg)=>
    prefix = "[" + syminfo.root + "] "
    suffix = "(P=" + tostring(close) + "; atr=" + tostring(_ATR_volat) + ")"
    alert(tostring(prefix) + tostring(msg) + tostring(suffix), alert.freq_once_per_bar)

// MAIN {
if within_timeframe

    if strategy.position_size > 0 and strategy.position_size[1] > 0 and (stop_loss_price/stop_loss_price[1]-1) > 0.005
        alert_per_bar("TSL raised to " + tostring(stop_loss_price))

    // EXIT:
	if strategy.position_size > 0 and TSL_source <= stop_loss_price
	    exit_msg = close <= strategy.position_avg_price ? "stop loss" : "take profit"
        strategy.close(ENUM_LONG, comment=exit_msg)
    // ENTRY:
    else if entry_signal_all and (strategy.position_size == 0 or (strategy.position_size > 0 and close > stop_loss_price))
		entry_msg = strategy.position_size > 0 ? "adding" : "initial"
		strategy.entry(ENUM_LONG, strategy.long, comment=entry_msg)

if strategy.position_size == 0
    stop_loss_price := float(0)
// }