এটি একটি গতিশীল প্রবণতা অনুসরণকারী ট্রেডিং কৌশল যা এসএমএ সূচকগুলির উপর ভিত্তি করে, মূল্য অঞ্চল, স্টোকাস্টিক সূচক এবং একাধিক লাভ সুরক্ষা প্রক্রিয়া একত্রিত করে। কৌশলটি বিভিন্ন অঞ্চলে মূল্যের গতিবিধি পর্যবেক্ষণ করে, স্বল্পমেয়াদী এবং দীর্ঘমেয়াদী চলমান গড় ক্রসওভার সংকেতগুলিকে একীভূত করে এবং কার্যকর প্রবণতা ক্যাপচারের জন্য বাজার পরিস্থিতি এবং প্রবণতার শক্তি নির্ধারণের জন্য স্টোকাস্টিক সূচকগুলি ব্যবহার করে। কৌশলটি ফল এবং ঝুঁকিগুলি কার্যকরভাবে ভারসাম্য বজায় রাখতে শতাংশ-ভিত্তিক এবং স্থির-পয়েন্ট মুনাফা গ্রহণের প্রক্রিয়া উভয়কেই অন্তর্ভুক্ত করে।
মূল যুক্তিতে বেশ কয়েকটি মূল উপাদান অন্তর্ভুক্ত রয়েছেঃ
কৌশলটি একাধিক প্রযুক্তিগত সূচক এবং মূল্য ক্রিয়াকলাপ বিশ্লেষণ পদ্ধতির সমন্বিত ব্যবহারের মাধ্যমে একটি বিস্তৃত ট্রেডিং সিস্টেম তৈরি করে। এর শক্তি একাধিক নিশ্চিতকরণ প্রক্রিয়া এবং নমনীয় মুনাফা গ্রহণের সিস্টেমে রয়েছে, যখন কৌশলটির কার্যকারিতার উপর বাজারের পরিবেশের প্রভাবের প্রতি মনোযোগ দেওয়া উচিত। ক্রমাগত অপ্টিমাইজেশান এবং উন্নত ঝুঁকি ব্যবস্থাপনার মাধ্যমে কৌশলটি বিভিন্ন বাজারের অবস্থার মধ্যে স্থিতিশীল কর্মক্ষমতা বজায় রাখার সম্ভাবনা দেখায়।
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-18 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="SMA Color Strategy", overlay=true, initial_capital=10000, max_bars_back=5000, max_labels_count=500, max_boxes_count=500, default_qty_type=strategy.fixed, default_qty_value=1, currency=currency.NONE, process_orders_on_close=true) // === INPUTS === zoneLength = input.int(20, "Price Zone Length", minval=5) profitLockPct = input.float(50, "Profit Lock Percentage", minval=1, maxval=100, step=5) / 100 ticksToLock = input.int(12, "Ticks to Activate Lock", minval=1, tooltip="Number of ticks price must move up to activate tick-based lock") ticksToSecure = input.int(10, "Ticks to Secure", minval=1, tooltip="Number of ticks to lock in once activated") // Calculate tick values tickSize = syminfo.mintick ticksToLockPoints = ticksToLock * tickSize ticksToSecurePoints = ticksToSecure * tickSize // Calculate price zones h = ta.highest(high, zoneLength) l = ta.lowest(low, zoneLength) priceRange = h - l lvl5 = h lvl4 = l + (priceRange * 0.75) // Orange line lvl3 = l + (priceRange * 0.50) // Yellow line lvl2 = l + (priceRange * 0.25) // Green line lvl1 = l // Calculate SMAs sma19 = ta.sma(close, 19) sma74 = ta.sma(close, 74) // Stochastic calculation for color logic k = ta.stoch(close, high, low, 60) d = ta.sma(k, 10) // SMA Color Logic with state tracking var color currentSMAColor = color.orange var color previousSMAColor = color.orange var string currentColorName = "ORANGE" var string previousColorName = "ORANGE" smaColor = if d >= 80 or d <= 20 color.rgb(255, 215, 0) else if d > d[1] color.green else if d < d[1] color.red else color.orange // Update color state and names if smaColor != currentSMAColor previousSMAColor := currentSMAColor currentSMAColor := smaColor previousColorName := currentColorName currentColorName := if smaColor == color.rgb(255, 215, 0) "YELLOW" else if smaColor == color.green "GREEN" else if smaColor == color.red "RED" else "ORANGE" // Color logic for SMA74 sma74Color = if smaColor == color.rgb(255, 215, 0) color.rgb(255, 215, 0) else if sma74 < sma19 color.green else color.red // === ENTRY CONDITIONS === smaIsGreen = smaColor == color.green greenCandle = close > open candleAboveOrange = close > lvl4 candleAboveSMA = close > sma19 crossedAboveOrange = ta.crossover(close, lvl4) smaIsYellow = smaColor == color.rgb(255, 215, 0) longCondition1 = smaIsGreen and greenCandle and candleAboveOrange and candleAboveSMA and crossedAboveOrange longCondition2 = smaIsYellow and crossedAboveOrange and candleAboveSMA // === PROFIT LOCK SYSTEM === var float entryPrice = na var float maxPrice = na var float profitLockLevel = na var bool tickLockActivated = false var float tickBasedLockLevel = na // Reset variables on new trade entry if (longCondition1 or longCondition2) entryPrice := close maxPrice := close profitLockLevel := close * (1 - profitLockPct) tickLockActivated := false tickBasedLockLevel := na // Update maximum price and profit locks when in a trade if strategy.position_size > 0 maxPrice := math.max(maxPrice, high) profitLockLevel := math.max(profitLockLevel, maxPrice * (1 - profitLockPct)) // Check if price has moved up enough to activate tick-based lock if not tickLockActivated and (maxPrice - entryPrice) >= ticksToLockPoints tickLockActivated := true tickBasedLockLevel := entryPrice + ticksToSecurePoints // === EXIT CONDITIONS === exitOnYellowLine = close < lvl3 exitOnProfitLock = low < profitLockLevel and strategy.position_size > 0 exitOnTickLock = tickLockActivated and low < tickBasedLockLevel // === TRADE MANAGEMENT === if (longCondition1 or longCondition2) strategy.entry("Long", strategy.long) if strategy.position_size > 0 if exitOnYellowLine strategy.close("Long", comment="Close below yellow") if exitOnProfitLock strategy.close("Long", comment="Profit lock triggered") if exitOnTickLock strategy.close("Long", comment="Tick-based lock triggered") // Plot indicators plot(sma19, "SMA 19", color=smaColor, linewidth=2) plot(sma74, "SMA 74", color=sma74Color, linewidth=2) plot(lvl5, "Upper Zone Top", color=color.red, linewidth=2) plot(lvl4, "Upper Zone Bottom", color=color.orange, linewidth=2) plot(lvl3, "Middle Line", color=color.yellow, linewidth=2) plot(lvl2, "Lower Zone Top", color=color.green, linewidth=2) plot(lvl1, "Lower Zone Bottom", color=color.blue, linewidth=2) // Plot profit lock levels plot(strategy.position_size > 0 ? profitLockLevel : na, "Profit Lock Level", color=color.purple, style=plot.style_linebr, linewidth=2) plot(strategy.position_size > 0 and tickLockActivated ? tickBasedLockLevel : na, "Tick Lock Level", color=color.fuchsia, style=plot.style_linebr, linewidth=2) // Fill zones var p1 = plot(lvl5, display=display.none) var p2 = plot(lvl4, display=display.none) var p3 = plot(lvl2, display=display.none) var p4 = plot(lvl1, display=display.none) fill(p1, p2, color=color.new(color.red, 90)) fill(p3, p4, color=color.new(color.green, 90)) // Debug Table if barstate.islast var table debugTable = table.new(position.top_right, 2, 13, bgcolor=color.new(color.black, 70), frame_width=1) table.cell(debugTable, 0, 0, "Current Color", text_color=color.white) table.cell(debugTable, 1, 0, currentColorName, text_color=currentSMAColor) table.cell(debugTable, 0, 1, "Previous Color", text_color=color.white) table.cell(debugTable, 1, 1, previousColorName, text_color=previousSMAColor) table.cell(debugTable, 0, 2, "Entry 1 (Green)", text_color=color.white) table.cell(debugTable, 1, 2, str.tostring(longCondition1), text_color=color.white) table.cell(debugTable, 0, 3, "Entry 2 (Yellow)", text_color=color.white) table.cell(debugTable, 1, 3, str.tostring(longCondition2), text_color=color.white) table.cell(debugTable, 0, 4, "Current Position", text_color=color.white) table.cell(debugTable, 1, 4, str.tostring(strategy.position_size), text_color=color.white) table.cell(debugTable, 0, 5, "Entry Price", text_color=color.white) table.cell(debugTable, 1, 5, str.tostring(entryPrice), text_color=color.white) table.cell(debugTable, 0, 6, "Max Price", text_color=color.white) table.cell(debugTable, 1, 6, str.tostring(maxPrice), text_color=color.white) table.cell(debugTable, 0, 7, "Profit Lock Level", text_color=color.white) table.cell(debugTable, 1, 7, str.tostring(profitLockLevel), text_color=color.white) table.cell(debugTable, 0, 8, "Tick Lock Active", text_color=color.white) table.cell(debugTable, 1, 8, str.tostring(tickLockActivated), text_color=color.white) table.cell(debugTable, 0, 9, "Tick Lock Level", text_color=color.white) table.cell(debugTable, 1, 9, str.tostring(tickBasedLockLevel), text_color=color.white) table.cell(debugTable, 0, 10, "Price Move (Ticks)", text_color=color.white) table.cell(debugTable, 1, 10, str.tostring(strategy.position_size > 0 ? (maxPrice - entryPrice) / tickSize : 0), text_color=color.white) table.cell(debugTable, 0, 11, "Locked Profit %", text_color=color.white) table.cell(debugTable, 1, 11, str.tostring(strategy.position_size > 0 ? ((maxPrice - entryPrice) / entryPrice * 100) : 0.0) + "%", text_color=color.white) table.cell(debugTable, 0, 12, "Exit Signals", text_color=color.white) table.cell(debugTable, 1, 12, "Y:" + str.tostring(exitOnYellowLine) + " P:" + str.tostring(exitOnProfitLock) + " T:" + str.tostring(exitOnTickLock), text_color=color.white)