এই কৌশলটি একটি প্রবণতা অনুসরণকারী সিস্টেম যা দ্বৈত চলমান গড় এবং এমএসিডি সূচকগুলিকে একত্রিত করে। এটি নির্দিষ্ট এন্ট্রি টাইমিংয়ের জন্য এমএসিডি সূচকটি ব্যবহার করার সময় প্রবণতার দিক নির্ধারণের জন্য 50-পরিসরের এবং 200-পরিসরের চলমান গড় ব্যবহার করে। কৌশলটি বাণিজ্যের গুণমান বাড়ানোর জন্য একাধিক ফিল্টারিং শর্তের সাথে গতিশীল স্টপ-লস এবং লাভ গ্রহণের প্রক্রিয়া ব্যবহার করে। এটি একটি সম্পূর্ণ ট্রেডিং সিস্টেম যা 15 মিনিটের সময়সীমার সাথে সঠিক এন্ট্রি এবং প্রস্থান নিয়মগুলির সাথে কাজ করে।
মূল যুক্তিটি বেশ কয়েকটি মূল উপাদানের উপর নির্মিতঃ
এটি একটি সম্পূর্ণ যুক্তিযুক্ত ট্রেডিং সিস্টেম অনুসরণ করে একটি ভাল ডিজাইন করা প্রবণতা। আধুনিক ঝুঁকি ব্যবস্থাপনা পদ্ধতির সাথে ক্লাসিকাল প্রযুক্তিগত সূচকগুলিকে একত্রিত করে কৌশলটি ঝুঁকি নিয়ন্ত্রণের সাথে প্রবণতা ক্যাপচারকে ভারসাম্য করে। অপ্টিমাইজেশনের ক্ষেত্র থাকলেও এটি সামগ্রিকভাবে একটি কার্যকর মূল্যবান ট্রেডিং কৌশল। ব্যবসায়ীদের লাইভ বাস্তবায়নের আগে পুঙ্খানুপুঙ্খ ব্যাকটেস্টিং পরিচালনা এবং নির্দিষ্ট ট্রেডিং যন্ত্র এবং বাজারের পরিবেশ অনুযায়ী পরামিতিগুলি সামঞ্জস্য করার পরামর্শ দেওয়া হয়।
/*backtest start: 2024-11-12 00:00:00 end: 2024-12-11 08:00:00 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © WolfofAlgo //@version=5 strategy("Trend Following Scalping Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=200) // Input Parameters stopLossPips = input.float(5.0, "Stop Loss in Pips", minval=1.0) takeProfitPips = input.float(10.0, "Take Profit in Pips", minval=1.0) useFixedTakeProfit = input.bool(true, "Use Fixed Take Profit") // Moving Average Parameters fastMA = input.int(50, "Fast MA Period") slowMA = input.int(200, "Slow MA Period") // MACD Parameters macdFastLength = input.int(12, "MACD Fast Length") macdSlowLength = input.int(26, "MACD Slow Length") macdSignalLength = input.int(9, "MACD Signal Length") // Trade Filter Parameters (Adjusted to be less strict) minBarsBetweenTrades = input.int(5, "Minimum Bars Between Trades", minval=1) trendStrengthPeriod = input.int(10, "Trend Strength Period") minTrendStrength = input.float(0.4, "Minimum Trend Strength", minval=0.1, maxval=1.0) macdThreshold = input.float(0.00005, "MACD Threshold", minval=0.0) // Variables for trade management var int barsLastTrade = 0 barsLastTrade := nz(barsLastTrade[1]) + 1 // Calculate Moving Averages ma50 = ta.sma(close, fastMA) ma200 = ta.sma(close, slowMA) // Calculate MACD [macdLine, signalLine, _] = ta.macd(close, macdFastLength, macdSlowLength, macdSignalLength) // Calculate trend strength (simplified) trendDirection = ta.ema(close, trendStrengthPeriod) > ta.ema(close, trendStrengthPeriod * 2) isUptrend = close > ma50 and ma50 > ma200 isDowntrend = close < ma50 and ma50 < ma200 // Calculate pip value pointsPerPip = syminfo.mintick * 10 // Entry Conditions with Less Strict Filters macdCrossUp = ta.crossover(macdLine, signalLine) and math.abs(macdLine - signalLine) > macdThreshold macdCrossDown = ta.crossunder(macdLine, signalLine) and math.abs(macdLine - signalLine) > macdThreshold // Long and Short Conditions longCondition = close > ma50 and macdCrossUp and barsLastTrade >= minBarsBetweenTrades and isUptrend shortCondition = close < ma50 and macdCrossDown and barsLastTrade >= minBarsBetweenTrades and isDowntrend // Exit Conditions (made more lenient) exitLongCondition = macdCrossDown or close < ma50 exitShortCondition = macdCrossUp or close > ma50 // Reset bars counter on new trade if (longCondition or shortCondition) barsLastTrade := 0 // Calculate stop loss and take profit levels longStopPrice = strategy.position_avg_price - (stopLossPips * pointsPerPip) longTakeProfitPrice = strategy.position_avg_price + (takeProfitPips * pointsPerPip) shortStopPrice = strategy.position_avg_price + (stopLossPips * pointsPerPip) shortTakeProfitPrice = strategy.position_avg_price - (takeProfitPips * pointsPerPip) // Plot Moving Averages plot(ma50, "50 MA", color=color.blue) plot(ma200, "200 MA", color=color.red) // Plot Entry Signals plotshape(longCondition, "Long Signal", shape.triangleup, location.belowbar, color.green, size=size.small) plotshape(shortCondition, "Short Signal", shape.triangledown, location.abovebar, color.red, size=size.small) // Strategy Entry Rules if (longCondition and strategy.position_size == 0) strategy.entry("Long", strategy.long) if (shortCondition and strategy.position_size == 0) strategy.entry("Short", strategy.short) // Strategy Exit Rules if (strategy.position_size > 0 and exitLongCondition) strategy.close("Long") if (strategy.position_size < 0 and exitShortCondition) strategy.close("Short") // Stop Loss and Take Profit Management if (strategy.position_size > 0) strategy.exit("Long TP/SL", "Long", stop=longStopPrice, limit=useFixedTakeProfit ? longTakeProfitPrice : na) if (strategy.position_size < 0) strategy.exit("Short TP/SL", "Short", stop=shortStopPrice, limit=useFixedTakeProfit ? shortTakeProfitPrice : na) // Performance Metrics var float totalTrades = 0 var float winningTrades = 0 var float totalProfitPips = 0 var float totalLossPips = 0 if (strategy.closedtrades > 0) totalTrades := strategy.closedtrades winningTrades := strategy.wintrades totalProfitPips := strategy.grossprofit / pointsPerPip totalLossPips := math.abs(strategy.grossloss) / pointsPerPip // Display Stats var label statsLabel = na label.delete(statsLabel[1]) // Create performance stats text var string stats = "" if (strategy.closedtrades > 0) winRate = (winningTrades / math.max(totalTrades, 1)) * 100 avgWin = totalProfitPips / math.max(winningTrades, 1) avgLoss = totalLossPips / math.max(totalTrades - winningTrades, 1) plRatio = avgWin / math.max(avgLoss, 1) stats := "Win Rate: " + str.tostring(winRate, "#.##") + "%\n" + "Avg Win: " + str.tostring(avgWin, "#.##") + " pips\n" + "Avg Loss: " + str.tostring(avgLoss, "#.##") + " pips\n" + "P/L Ratio: " + str.tostring(plRatio, "#.##") + "\n" + "Total Trades: " + str.tostring(totalTrades, "#") statsLabel := label.new(x=bar_index, y=high, text=stats, style=label.style_label_down, color=color.new(color.blue, 80))