
এটি একটি প্রবণতা ট্র্যাকিং কৌশল যা একাধিক প্রযুক্তিগত সূচক এবং ঝুঁকি ব্যবস্থাপনার উপর ভিত্তি করে। এই কৌশলটি বাজারের প্রবণতা সনাক্ত করতে এবং গতিশীল ক্ষতি, অবস্থান পরিচালনা এবং মাসিক সর্বাধিক প্রত্যাহারের সীমাবদ্ধতার মতো ঝুঁকি নিয়ন্ত্রণের মাধ্যমে তহবিল সুরক্ষার জন্য একাধিক প্রযুক্তিগত সূচক যেমন চলমান গড়, তুলনামূলকভাবে দুর্বল সূচক ((আরএসআই) এবং গতিশীল সূচক ((ডিএমআই) এর সমন্বিত ব্যবহার করে। কৌশলটির মূলটি হ’ল প্রবণতার কার্যকারিতা নিশ্চিত করার জন্য বহু-মাত্রিক প্রযুক্তিগত সূচকগুলি ব্যবহার করা হয়, যখন ঝুঁকি ফাঁকগুলি কঠোরভাবে নিয়ন্ত্রণ করা হয়।
এই কৌশলটি প্রবণতা সনাক্তকরণের জন্য একাধিক স্তরের ব্যবস্থা গ্রহণ করেঃ
এই কৌশলটি মাল্টি-ডাইমেনশনাল প্রযুক্তিগত সূচকগুলির সমন্বিত প্রয়োগের মাধ্যমে একটি অপেক্ষাকৃত সম্পূর্ণ প্রবণতা-ট্র্যাকিং ট্রেডিং সিস্টেম তৈরি করে। কৌশলটির সুবিধাটি হ’ল এর সম্পূর্ণ ঝুঁকি ব্যবস্থাপনার কাঠামো, যার মধ্যে রয়েছে গতিশীল স্টপ লস, পজিশন ম্যানেজমেন্ট এবং প্রত্যাহার নিয়ন্ত্রণ। যদিও কিছু পিছিয়ে যাওয়ার ঝুঁকি রয়েছে, তবে অপ্টিমাইজেশন এবং উন্নতির মাধ্যমে কৌশলটি বিভিন্ন বাজারের পরিবেশে স্থিতিশীল পারফরম্যান্স বজায় রাখার সম্ভাবনা রয়েছে। কৌশলটির মূল যুক্তি বজায় রাখার সাথে সাথে এটির বাজারের পরিবেশের সাথে অভিযোজনযোগ্যতা বাড়ানোর মূল চাবিকাঠি।
/*backtest
start: 2024-02-10 00:00:00
end: 2025-02-08 08:00:00
period: 4h
basePeriod: 4h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("High Win-Rate Crypto Strategy with Drawdown Limit", overlay=true, initial_capital=10000, default_qty_type=strategy.fixed, process_orders_on_close=true)
// Moving Averages
ema8 = ta.ema(close, 8)
ema21 = ta.ema(close, 21)
ema50 = ta.ema(close, 50)
// RSI settings
rsi = ta.rsi(close, 14)
rsi_ma = ta.sma(rsi, 5)
// Momentum and Volume
mom = ta.mom(close, 8)
vol_ma = ta.sma(volume, 15)
high_vol = volume > vol_ma * 1
// Trend Strength
[diplus, diminus, _] = ta.dmi(14, 14)
strong_trend = diplus > 20 or diminus > 20
// Price channels
highest_15 = ta.highest(high, 15)
lowest_15 = ta.lowest(low, 15)
mid_channel = (highest_15 + lowest_15) / 2
// Trend Conditions
uptrend = ema8 > ema21 and close > mid_channel
downtrend = ema8 < ema21 and close < mid_channel
// Entry Conditions
longCondition = uptrend and ta.crossover(ema8, ema21) and rsi_ma > 35 and rsi_ma < 65 and mom > 0 and high_vol and diplus > diminus
shortCondition = downtrend and ta.crossunder(ema8, ema21) and rsi_ma > 35 and rsi_ma < 65 and mom < 0 and high_vol and diminus > diplus
// Dynamic Stop Loss based on ATR
atr = ta.atr(14)
stopSize = atr * 1.3
// Calculate position size based on fixed risk
riskAmount = strategy.initial_capital * 0.05
getLongPosSize(riskAmount, stopSize) => riskAmount / stopSize
getShortPosSize(riskAmount, stopSize) => riskAmount / stopSize
// Monthly drawdown tracking
var float peakEquity = na
var int currentMonth = na
var float monthlyDrawdown = na
maxDrawdownPercent = 10
// Variables for SL and TP
var float stopLoss = na
var float takeProfit = na
var bool inTrade = false
var string tradeType = na
// Reset monthly metrics
monthNow = month(time)
if na(currentMonth) or currentMonth != monthNow
currentMonth := monthNow
peakEquity := strategy.equity
monthlyDrawdown := 0.0
// Update drawdown metrics
peakEquity := math.max(peakEquity, strategy.equity)
monthlyDrawdown := math.max(monthlyDrawdown, (peakEquity - strategy.equity) / peakEquity * 100)
// Trading condition
canTrade = monthlyDrawdown < maxDrawdownPercent
// Entry and Exit Logic
if strategy.position_size == 0
inTrade := false
if longCondition and canTrade
stopLoss := low - stopSize
takeProfit := close + (stopSize * 2)
posSize = getLongPosSize(riskAmount, stopSize)
strategy.entry("Long", strategy.long, qty=posSize)
strategy.exit("Long Exit", "Long", stop=stopLoss, limit=takeProfit)
inTrade := true
tradeType := "long"
if shortCondition and canTrade
stopLoss := high + stopSize
takeProfit := close - (stopSize * 2)
posSize = getShortPosSize(riskAmount, stopSize)
strategy.entry("Short", strategy.short, qty=posSize)
strategy.exit("Short Exit", "Short", stop=stopLoss, limit=takeProfit)
inTrade := true
tradeType := "short"
// Plot variables
plotSL = inTrade ? stopLoss : na
plotTP = inTrade ? takeProfit : na
// EMA Plots
plot(ema8, "EMA 8", color=color.blue, linewidth=1)
plot(ema21, "EMA 21", color=color.yellow, linewidth=1)
plot(ema50, "EMA 50", color=color.white, linewidth=1)
// SL and TP Plots
plot(plotSL, "Stop Loss", color=color.red, style=plot.style_linebr, linewidth=1)
plot(plotTP, "Take Profit", color=color.green, style=plot.style_linebr, linewidth=1)
// Signal Plots
plotshape(longCondition and canTrade, "Buy Signal", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)
plotshape(shortCondition and canTrade, "Sell Signal", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)
// SL/TP Markers with correct y parameter syntax
plot(inTrade ? stopLoss : na, "Stop Loss Level", style=plot.style_circles, color=color.red, linewidth=2)
plot(inTrade ? takeProfit : na, "Take Profit Level", style=plot.style_circles, color=color.green, linewidth=2)
// Background Color
noTradingMonth = monthlyDrawdown >= maxDrawdownPercent
bgcolor(noTradingMonth ? color.new(color.gray, 80) : uptrend ? color.new(color.green, 95) : downtrend ? color.new(color.red, 95) : na)
// Drawdown Label
var label drawdownLabel = na
label.delete(drawdownLabel)
drawdownLabel := label.new(bar_index, high, "Monthly Drawdown: " + str.tostring(monthlyDrawdown, "#.##") + "%\n" + (noTradingMonth ? "NO TRADING" : "TRADING ALLOWED"), style=label.style_label_down, color=noTradingMonth ? color.red : color.green, textcolor=color.white, size=size.small)