একটি চলমান গড় ব্যাসার্ধ গ্রাস কৌশল একটি চলমান গড় উপর ভিত্তি করে প্রবণতা ট্র্যাকিং কৌশল। এটি দুটি চলমান গড়ের ক্রস গণনা করে মূল্য প্রবণতা নির্ধারণ করে এবং ট্রেন্ড ট্র্যাকিংয়ের জন্য ব্যাসার্ধ পরিচালনার সাথে মিলিত হয়, মুনাফা অর্জন করে।
এই কৌশলটি দুটি চলমান গড় ব্যবহার করেঃ দ্রুত লাইন এবং ধীর লাইন। দ্রুত লাইন প্যারামিটারগুলি ছোট, দামের পরিবর্তনের প্রতি আরও সংবেদনশীল; ধীর লাইন প্যারামিটারগুলি বড়, প্রবণতা বিচার আরও নির্ভরযোগ্য। যখন দ্রুত লাইনটি নীচে থেকে ধীর লাইনটি অতিক্রম করে, তখন আরও বেশি করুন; যখন দ্রুত লাইনটি উপরে থেকে ধীর লাইনটি অতিক্রম করে, তখন ফাঁকা করুন।
এছাড়াও, এই কৌশলটি মূল প্রবণতার দিকনির্দেশনা নির্ধারণের জন্য এবং ভুল সমন্বয় এড়ানোর জন্য একাধিক সহায়ক চলমান গড় প্রবর্তন করে। এছাড়াও, এটিআর সহ উচ্চতম এবং সর্বনিম্ন ফাংশন ব্যবহার করে গতিশীল স্টপ লস গণনা করা হয় এবং মুনাফা লক করা হয়।
প্রতি লেনদেনের জন্য, এই কৌশলটি একটি নির্দিষ্ট সংখ্যক অর্ডার বা প্যারামিটার দ্বারা সেট করা সর্বাধিক ক্ষতির শতাংশের সাথে গতিশীলভাবে অবস্থান গণনা করতে পারে। এটি প্রতিটি লেনদেনের ঝুঁকিকে একটি নির্দিষ্ট পরিসরে নিয়ন্ত্রণ করতে পারে।
চলমান গড়ের প্যারামিটারগুলিকে অনুকূলিতকরণ, সহায়ক গড়ের ওজনকে সমন্বয় করা, স্টপ লস ম্যাপিটেশন সংশোধন করা ইত্যাদির মতো পদ্ধতির মাধ্যমে এই ঝুঁকিগুলি হ্রাস করা যেতে পারে। একক ক্ষতির প্রভাব হ্রাস করার জন্য পজিশন পরিচালনার নিয়মগুলি কঠোরভাবে নিয়ন্ত্রণ করার সময়।
এই কৌশলটি নিম্নলিখিত দিকগুলি থেকে অপ্টিমাইজ করা যেতে পারেঃ
মুভিং এভারেজ ব্যাপ্তি গ্রাসকারী কৌশলটি সামগ্রিকভাবে একটি খুব কার্যকর পরিমাণযুক্ত ট্রেডিং কৌশল। এটি একই সাথে প্রবণতা ট্র্যাকিং এবং ঝুঁকি নিয়ন্ত্রণের সুবিধাগুলিও বহন করে, দীর্ঘ লাইন হোল্ডিংয়ের জন্য উপযুক্ত। প্যারামিটার সমন্বয় এবং ফাংশন এক্সটেনশনের অপ্টিমাইজেশনের মাধ্যমে, কৌশলটি আরও স্থিতিশীল এবং বুদ্ধিমান হতে পারে, যার ফলে আরও দীর্ঘস্থায়ী লাভজনকতা অর্জন করা যায়।
/*backtest
start: 2024-01-10 00:00:00
end: 2024-01-17 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
// This is a simple crossover Moving Average strategy, good for long term crypto trades.
// It buys when the MA "X" crosses up the MA "Y", viceversa for shorts.
// Both MAs are selectable from the Inputs section in the front panel.
// There is also a Position Management option thats
// sizes positions to have the same USD risk (using leverage) on each trade,
// based on the percentage distance to the stop loss level.
// If you turn this option on you will see how the profit
// grows exponentially while the drawdown percentage almost remains the same.
strategy("4 MA Strat", overlay=true, pyramiding=1,
default_qty_type=strategy.percent_of_equity,
default_qty_value=100,
commission_value = 0.04,
initial_capital=100,
process_orders_on_close=false)
direction = input(0, title = "Strategy Direction", type=input.integer, minval=-1, maxval=1)
strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))
//Inputs
PSMGMT=input(defval=false, title="Position Management")
risk_per_trade=input(defval=5, title="Risk Per Trade % (for PSMGMT)", step=0.5)*.01
//SL & TP Inputs
i_SL=input(true, title="Use Swing Lo/Hi Stop Loss & Take Profit")
i_SwingLookback=input(10, title="Swing Lo/Hi Lookback")
i_SLExpander=input(defval=0, step=1, title="SL Expander")
i_MAFilter=input(false, title="Use MA4 as Bull / Bear filter")
//MA Type Selector
MAtype = input(false, title="----------------MA Selector-----------------")
MA1Period = input(9, title="MA1 Period")
MA1Type = input(title="MA1 Type", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "ALMA"])
MA2Period = input(21, title="MA2 Period")
MA2Type = input(title="MA2 Type", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "ALMA"])
MA3Period = input(50, title="MA3 Period")
MA3Type = input(title="MA3 Type", defval="SMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "ALMA"])
MA4Period = input(100, title="MA4 Period")
MA4Type = input(title="MA4 Type", defval="SMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "ALMA"])
//MA Selector
MA1 = if MA1Type == "SMA"
sma(close, MA1Period)
else
if MA1Type == "EMA"
ema(close, MA1Period)
else
if MA1Type == "WMA"
wma(close, MA1Period)
else
if MA1Type == "RMA"
rma(close, MA1Period)
else
if MA1Type == "HMA"
hma(close, MA1Period)
else
if MA1Type == "ALMA"
alma(close, MA1Period, 0.85, 6)
MA2 = if MA2Type == "SMA"
sma(close, MA2Period)
else
if MA2Type == "EMA"
ema(close, MA2Period)
else
if MA2Type == "WMA"
wma(close, MA2Period)
else
if MA2Type == "RMA"
rma(close, MA2Period)
else
if MA2Type == "HMA"
hma(close, MA2Period)
else
if MA2Type == "ALMA"
alma(close, MA2Period, 0.85, 6)
MA3 = if MA3Type == "SMA"
sma(close, MA3Period)
else
if MA3Type == "EMA"
ema(close, MA3Period)
else
if MA3Type == "WMA"
wma(close, MA3Period)
else
if MA3Type == "RMA"
rma(close, MA3Period)
else
if MA3Type == "HMA"
hma(close, MA3Period)
else
if MA3Type == "ALMA"
alma(close, MA3Period, 0.85, 6)
MA4 = if MA4Type == "SMA"
sma(close, MA4Period)
else
if MA4Type == "EMA"
ema(close, MA4Period)
else
if MA4Type == "WMA"
wma(close, MA4Period)
else
if MA4Type == "RMA"
rma(close, MA4Period)
else
if MA4Type == "HMA"
hma(close, MA4Period)
else
if MA4Type == "ALMA"
alma(close, MA4Period, 0.85, 6)
// X Y Logic
x=input(title="x", defval="close", options=["MA1", "MA2", "MA3", "MA4", "close"])
y=input(title="y", defval="MA1", options=["MA1", "MA2", "MA3", "MA4", "close"])
X = if x == "MA1"
MA1
else
if x == "MA2"
MA2
else
if x == "MA3"
MA3
else
if x == "MA4"
MA4
else
if x == "close"
close
Y = if y == "MA1"
MA1
else
if y == "MA2"
MA2
else
if y == "MA3"
MA3
else
if y == "MA4"
MA4
else
if y == "close"
close
//SL & TP Calculations
SwingLow=lowest(i_SwingLookback)
SwingHigh=highest(i_SwingLookback)
bought=strategy.position_size != strategy.position_size[1]
LSL=valuewhen(bought, SwingLow, 0)-((valuewhen(bought, atr(14), 0)/5)*i_SLExpander)
SSL=valuewhen(bought, SwingHigh, 0)+((valuewhen(bought, atr(14), 0)/5)*i_SLExpander)
islong=strategy.position_size > 0
isshort=strategy.position_size < 0
SL= islong ? LSL : isshort ? SSL : na
//Position Management Calculations
capital=strategy.equity
distance_to_long_stop_loss=1-(LSL/strategy.position_avg_price)
distance_to_short_stop_loss=(SSL/strategy.position_avg_price)-1
PS=(capital*risk_per_trade)/distance_to_long_stop_loss
SPS=(capital*risk_per_trade)/distance_to_short_stop_loss
PSqty=PS/close
SPSqty=SPS/close
//Strategy Calculations
MAFilter=close > MA4
BUY = crossover(X , Y)
SELL = crossunder(X , Y)
BUY2 = crossover(X , Y) and MAFilter
SELL2 = crossunder(X , Y) and not MAFilter
//Entries
strategy.entry("long", true, qty=PSMGMT ? PSqty : na, when=not i_MAFilter ? BUY : BUY2)
strategy.entry("short", false, qty=PSMGMT ? SPSqty : na, when=not i_MAFilter ? SELL : SELL2)
//Exits
if i_SL //and SL != na
strategy.exit("longexit", "long", stop=LSL)
strategy.exit("shortexit", "short", stop=SSL)
if i_MAFilter
strategy.close("long", when=SELL)
strategy.close("short", when=BUY)
//Plots
plot(i_SL ? SL : na, color=color.red, style=plot.style_cross, title="SL")
plot(MA1, color=color.green, linewidth=1, title="MA1")
plot(MA2, color=color.yellow, linewidth=2, title="MA2")
plot(MA3, color=color.red, linewidth=3, title="MA3")
plot(MA4, color=color.white, linewidth=3, title="MA4")
plotshape(BUY ? 1 : na, style=shape.triangleup, location=location.belowbar, color=color.green, title="Bullish Setup")
plotshape(SELL ? 1 : na, style=shape.triangledown, location=location.abovebar, color=color.red, title="Bearish Setup")
//Debugging Plots
plot(LSL, transp=100, title="SwingLow")
plot(bought ? 1:0, transp=100, title="bought")
plot(PSqty, title="PSqty", transp=100)
plot(SPSqty, title="SPSqty", transp=100)
plot(PS, title="PS", transp=100)
plot(SPS, title="SPS", transp=100)
plot(distance_to_long_stop_loss, title="distance to LSL", transp=100)
plot(distance_to_short_stop_loss, title="distance to SSL", transp=100)
plot(capital, title="equity", transp=100)