এটিআর এবং চলমান গড় ক্রসওভার হাইব্রিড কৌশল

লেখক:চাওঝাং, তারিখ: ২০২৩-০৯-২৬ ১৭ঃ২২ঃ২১
ট্যাগঃ

সারসংক্ষেপ

এই কৌশলটি গড় সত্য পরিসীমা (এটিআর) সূচক এবং চলমান গড় ক্রসওভারকে একত্রিত করে উচ্চতর বিজয়ী হারের জন্য প্রবণতা সংকেতগুলি সনাক্ত করতে।

যুক্তি

  • আপট্রেন্ড নিশ্চিত করার জন্য উচ্চতর সময়সীমার উপর মূল্যের অস্থিরতা নির্ধারণের জন্য ATR ব্যবহার করুন
  • কম সময়সীমার উপর দ্রুত এবং ধীর গতির গড় গণনা করুন, যখন দ্রুত এমএ ধীর এমএ অতিক্রম করে তখন দীর্ঘ যান, যখন দ্রুত এমএ ধীর এমএ অতিক্রম করে তখন সংক্ষিপ্ত যান
  • ATR উচ্চতর সময়সীমার উপর সামগ্রিক প্রবণতা নির্দেশ করে; MA ক্রসওভার কম সময়সীমার উপর নির্দিষ্ট প্রবেশ পয়েন্ট চিহ্নিত করে
  • ATR RMA মসৃণকরণ, দৈর্ঘ্য এবং মসৃণতা নিয়মিত সঙ্গে গণনা করা হয়
  • এমএ ক্রসওভারে দুটি এসএমএ রয়েছে, দৈর্ঘ্য নিয়মিত

সুবিধা

  • এটিআর কার্যকরভাবে অস্থির পদক্ষেপ ফিল্টার করতে পারে, অপ্রয়োজনীয় ট্রেড এড়াতে
  • এমএ ক্রসওভার স্বল্পমেয়াদী প্রবণতা রূপান্তর পয়েন্ট সঠিকভাবে নির্ধারণ করে
  • ATR এ RMA মসৃণকরণ জাগ্রততা হ্রাস করে, উচ্চতর সময়সীমার প্রবণতার উপর আরও স্থিতিশীল বিচার
  • সমন্বিত ব্যবহার হুইপসা এড়ায় এবং সুযোগগুলি ক্যাপচার করে
  • বিভিন্ন পণ্য এবং সময়সীমার উপর অপ্টিমাইজেশান জন্য সমন্বয়যোগ্য পরামিতি
  • স্থিতিশীল মুনাফার জন্য সামগ্রিকভাবে উচ্চতর বিজয় হার প্রত্যাশিত

ঝুঁকি

  • এটিআর ট্রেন্ডের মূল্যায়ন বিলম্বের জন্য সংবেদনশীল, প্রাথমিক ট্রেন্ড শুরু মিস করতে পারে
  • এমএ ক্রসওভার একাধিক সমন্বয় প্রবণ, আরও বিক্রয় সংকেত
  • পরামিতি সমন্বয় অত্যন্ত সমালোচনামূলক, অনুপযুক্ত সেটিংস ওভার / নিচে ট্রেডিং হতে
  • পণ্য প্রতি সর্বোত্তম পরামিতি সেট জন্য ঐতিহাসিক তথ্য বিশ্লেষণ প্রয়োজন
  • ধীরে ধীরে পজিশন সাইজিং বিবেচনা করুন, ক্ষতির সীমাবদ্ধতার জন্য পর্যাপ্ত তহবিল নিশ্চিত করুন

উন্নতির সুযোগ

  • এটিআর-এর অতিরিক্ত/বিকল্প সূচক অনুসন্ধান করুন, যেমন ট্রেন্ড শক্তির জন্য বোলিংজার ব্যান্ড।
  • অন্যান্য সমন্বয়গুলির সাথে এমএ ক্রসওভার প্রসারিত করুন, যেমন ইএমএ, গতির সূচক
  • ভুয়া ব্রেকআউট এড়ানোর জন্য ব্রেকআউট নিশ্চিতকরণ প্রক্রিয়া অন্তর্ভুক্ত করুন
  • প্যারামিটার অপ্টিমাইজেশান অর্ডারঃ ATR length/smoothness > MA lengths > Stop loss/take profit
  • মূলধন পরিচালনার কৌশলগুলিকে একীভূত করার কথা বিবেচনা করুন, যেমন স্থির ভগ্নাংশ, গতিশীল অবস্থান আকার
  • কৌশল স্থিতিশীলতা এবং সর্বোচ্চ ড্রাউনডাউন মূল্যায়নের জন্য ব্যাপক ব্যাকটেস্টিং

সিদ্ধান্ত

এই কৌশলটি প্রবণতা দিক এবং এন্ট্রি পয়েন্ট সনাক্তকরণে এটিআর এবং এমএ ক্রসওভারের শক্তিগুলি পুরোপুরি ব্যবহার করে। প্যারামিটার টিউনিংয়ের মাধ্যমে, এটি বিভিন্ন বাজারের পরিবেশে অভিযোজিত হতে পারে। লাইভ টেস্টিং ধারাবাহিক লাভজনকতা এবং উচ্চ বিজয়ী হার প্রমাণ করে। তবে, সতর্কতার সাথে পরিচালনার জন্য ঝুঁকি নিয়ন্ত্রণ অত্যন্ত গুরুত্বপূর্ণ। আরও ডেটা যাচাইকরণ এটিকে একটি শক্তিশালী কোয়ান্টাম সিস্টেমে প্রসারিত এবং পরিমার্জিত করার নিশ্চয়তা দেবে।


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

আরো