یہ ایک تجارتی حکمت عملی ہے جو دوہری ایم اے سی ڈی اشارے کو قیمت کے عمل کے تجزیے کے ساتھ جوڑتی ہے۔ یہ حکمت عملی 15 منٹ کے ٹائم فریم پر ایم اے سی ڈی ہسٹوگرام میں رنگ کی تبدیلیوں کے ذریعے مارکیٹ کے رجحانات کی نشاندہی کرتی ہے ، 5 منٹ کے ٹائم فریم پر مضبوط موم بتی کے نمونوں کی تلاش کرتی ہے ، اور 1 منٹ کے ٹائم فریم پر بریک آؤٹ سگنلز کی تصدیق کرتی ہے۔ یہ اے ٹی آر پر مبنی متحرک اسٹاپ نقصان اور ٹریلنگ ٹیک منافع کے طریقہ کار کو استعمال کرتی ہے تاکہ منافع کی صلاحیت کو زیادہ سے زیادہ کرتے ہوئے خطرہ کو مؤثر طریقے سے سنبھال سکے۔
یہ حکمت عملی مارکیٹ کے رجحانات کی تصدیق کے لئے مختلف پیرامیٹرز (34/144/9 اور 100/200/50) کے ساتھ دو MACD اشارے کا استعمال کرتی ہے۔ جب دونوں MACD ہسٹوگرام ایک ہی رنگ کے رجحان کو ظاہر کرتے ہیں تو ، نظام 5 منٹ کے چارٹ پر مضبوط موم بتیوں کے نمونوں کی تلاش کرتا ہے ، جس کی خصوصیات ان کے سائے سے 1.5 گنا زیادہ جسموں کی ہوتی ہے۔ ایک بار جب ایک مضبوط موم بتی کی نشاندہی کی جاتی ہے تو ، نظام 1 منٹ کے چارٹ پر بریک آؤٹ کی نگرانی کرتا ہے۔ جب قیمتیں اوپر کی طرف بڑھتی ہوئی رجحانات میں اعلی سطحوں سے اوپر یا نیچے کی طرف بڑھتی ہوئی رجحانات میں کم ہوجاتی ہیں تو پوزیشنیں کھولی جاتی ہیں۔ اسٹاپس کو اے ٹی آر کی بنیاد پر مقرر کیا جاتا ہے ، جبکہ متحرک لینے کے منافع کے لئے 1.5x اے ٹی آر ملٹیپل کا استعمال کیا جاتا ہے۔
یہ ایک جامع حکمت عملی کا نظام ہے جو تکنیکی تجزیہ اور رسک مینجمنٹ کو جوڑتا ہے۔ یہ متعدد ٹائم فریم تجزیہ اور سخت سگنل فلٹرنگ کے ذریعے تجارتی معیار کو یقینی بناتا ہے جبکہ متحرک اسٹاپس اور ٹریلنگ منافع کے ذریعے مؤثر طریقے سے رسک کا انتظام کرتا ہے۔ حکمت عملی میں مضبوط موافقت ہے لیکن مارکیٹ کے حالات کی بنیاد پر مسلسل اصلاح کی ضرورت ہے۔ براہ راست تجارت کے لئے ، مکمل بیک ٹیسٹنگ اور پیرامیٹر کی اصلاح کی سفارش کی جاتی ہے ، ساتھ ہی مخصوص مارکیٹ کی خصوصیات کی بنیاد پر ایڈجسٹمنٹ بھی کی جاتی ہے۔
/*backtest start: 2024-01-01 00:00:00 end: 2024-11-24 00:00:00 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // @version=5 strategy("Price Action + Double MACD Strategy with ATR Trailing", overlay=true) // Inputs for MACD fastLength1 = input.int(34, title="First MACD Fast Length") slowLength1 = input.int(144, title="First MACD Slow Length") signalLength1 = input.int(9, title="First MACD Signal Length") fastLength2 = input.int(100, title="Second MACD Fast Length") slowLength2 = input.int(200, title="Second MACD Slow Length") signalLength2 = input.int(50, title="Second MACD Signal Length") // Input for ATR Trailing atrMultiplier = input.float(1.5, title="ATR Multiplier for Trailing") // Inputs for Stop Loss atrStopMultiplier = input.float(1.0, title="ATR Multiplier for Stop Loss") // MACD Calculations [macdLine1, signalLine1, macdHist1] = ta.macd(close, fastLength1, slowLength1, signalLength1) [macdLine2, signalLine2, macdHist2] = ta.macd(close, fastLength2, slowLength2, signalLength2) // Get 15M MACD histogram colors macdHist1Color = request.security(syminfo.tickerid, "15", (macdHist1 >= 0 ? (macdHist1[1] < macdHist1 ? #26A69A : #B2DFDB) : (macdHist1[1] < macdHist1 ? #FFCDD2 : #FF5252))) macdHist2Color = request.security(syminfo.tickerid, "15", (macdHist2 >= 0 ? (macdHist2[1] < macdHist2 ? #26A69A : #B2DFDB) : (macdHist2[1] < macdHist2 ? #FFCDD2 : #FF5252))) // Check MACD color conditions isMacdUptrend = macdHist1Color == #26A69A and macdHist2Color == #26A69A isMacdDowntrend = macdHist1Color == #FF5252 and macdHist2Color == #FF5252 // Function to detect strong 5M candles isStrongCandle(open, close, high, low) => body = math.abs(close - open) tail = math.abs(high - low) - body body > tail * 1.5 // Ensure body is larger than the tail // Variables to track state var float fiveMinuteHigh = na var float fiveMinuteLow = na var bool tradeExecuted = false var bool breakoutDetected = false var float entryPrice = na var float stopLossPrice = na var float longTakeProfit = na var float shortTakeProfit = na // Check for new 15M candle and reset flags if ta.change(time("15")) tradeExecuted := false // Reset trade execution flag breakoutDetected := false // Reset breakout detection if isStrongCandle(open[1], close[1], high[1], low[1]) fiveMinuteHigh := high[1] fiveMinuteLow := low[1] else fiveMinuteHigh := na fiveMinuteLow := na // Get 1-minute close prices close1m = request.security(syminfo.tickerid, "5", close) // Ensure valid breakout direction and avoid double breakouts if not na(fiveMinuteHigh) and not breakoutDetected for i = 1 to 3 if close1m[i] > fiveMinuteHigh and not tradeExecuted // 1M breakout check with close breakoutDetected := true if isMacdUptrend // Open Long trade entryPrice := close stopLossPrice := close - (atrStopMultiplier * ta.atr(14)) // ATR-based stop loss longTakeProfit := close + (atrMultiplier * ta.atr(14)) // Initialize take profit strategy.entry("Long", strategy.long) tradeExecuted := true break // Exit the loop after detecting a breakout else if close1m[i] < fiveMinuteLow and not tradeExecuted // 1M breakout check with close breakoutDetected := true if isMacdDowntrend // Open Short trade entryPrice := close stopLossPrice := close + (atrStopMultiplier * ta.atr(14)) // ATR-based stop loss shortTakeProfit := close - (atrMultiplier * ta.atr(14)) // Initialize take profit strategy.entry("Short", strategy.short) tradeExecuted := true break // Exit the loop after detecting a breakout // Update trailing take-profit dynamically if tradeExecuted and strategy.position_size > 0 // Long trade longTakeProfit := math.max(longTakeProfit, close + (atrMultiplier * ta.atr(14))) strategy.exit("Long TP/SL", "Long", stop=stopLossPrice, limit=longTakeProfit) else if tradeExecuted and strategy.position_size < 0 // Short trade shortTakeProfit := math.min(shortTakeProfit, close - (atrMultiplier * ta.atr(14))) strategy.exit("Short TP/SL", "Short", stop=stopLossPrice, limit=shortTakeProfit) // Reset trade state when position is closed if strategy.position_size == 0 tradeExecuted := false entryPrice := na longTakeProfit := na shortTakeProfit := na