یہ بولنگر بینڈ اور موم بتی کے نمونوں کے تجزیے پر مبنی رجحان کی پیروی کرنے والی حکمت عملی ہے۔ یہ حکمت عملی بنیادی طور پر موم بتی کے نمونوں کا مشاہدہ کرکے مارکیٹ کے ممکنہ الٹ پوائنٹس کی نشاندہی کرتی ہے جب قیمت بولنگر بینڈ کو چھوتی ہے ، جس میں وکس اور جسم کے مابین تناسب کا تعلق ہوتا ہے۔ اس کے علاوہ ، یہ حکمت عملی ہر تجارت کے لئے نمائش کو کنٹرول کرنے کے لئے ایک مقررہ رسک ماڈل استعمال کرتی ہے اور تجارتی درستگی کو بڑھانے کے لئے متعدد ٹائم فریم تجزیہ کا استعمال کرتی ہے۔
حکمت عملی کا بنیادی منطق کئی اہم عناصر پر مبنی ہے۔ پہلا ، یہ قیمت کی اتار چڑھاؤ کی حد کا تعین کرنے کے لئے 20 ادوار میں بولنگر بینڈ کا حساب لگاتا ہے۔ دوسرا ، جب قیمت بولنگر بینڈ کو چھوتی ہے تو ، یہ موم بتی کے جسم اور اوپری / نچلے وِکس کے مابین تناسب کا تجزیہ کرتی ہے ، جب تناسب مقررہ حد سے تجاوز کرتا ہے تو اسے ممکنہ الٹ سگنل کے طور پر سمجھتی ہے۔ تیسرا ، یہ اسٹاپ نقصان کی جگہ کے لئے کلیدی معاونت اور مزاحمت کی سطح کا حساب لگاتا ہے۔ آخر میں ، یہ اکاؤنٹ بیلنس کے مقررہ فیصد (1٪) کی بنیاد پر ہر تجارت کے لئے پوزیشن کے سائز کا حساب لگاتا ہے ، متحرک رسک مینجمنٹ کو نافذ کرتا ہے۔ حکمت عملی میں مختلف ٹائمنگ آپشنز بھی پیش کیے جاتے ہیں ، جن میں اختتامی قیمت ، افتتاحی قیمت ، روزانہ اعلی اور روزانہ کم اندراج شامل ہیں۔
اس حکمت عملی میں کلاسیکی تکنیکی تجزیہ کے اوزار کو جدید رسک مینجمنٹ کے طریقوں کے ساتھ ملا کر نسبتا comprehensive جامع تجارتی نظام بنایا گیا ہے۔ بنیادی فوائد اس کے سخت رسک کنٹرول اور لچکدار انٹری میکانزم میں ہیں ، جبکہ عملی ایپلی کیشنز میں مارکیٹ کے ماحول کی تبدیلیوں اور سگنل کی وشوسنییتا کی تصدیق پر توجہ دینے کی ضرورت ہے۔ تجویز کردہ اصلاح کی سمتوں کے ذریعے ، مزید بہتری کی گنجائش ہے ، خاص طور پر سگنل فلٹرنگ اور رسک مینجمنٹ کے پہلوؤں میں۔
/*backtest start: 2024-01-01 00:00:00 end: 2024-11-26 00:00:00 period: 12h basePeriod: 12h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Trade Entry Detector, based on Wick to Body Ratio when price tests Bollinger Bands", overlay=true, default_qty_type=strategy.fixed) // Input for primary analysis time frame timeFrame = "D" // Daily time frame // Bollinger Band settings length = input.int(20, title="Bollinger Band Length", minval=1) mult = input.float(2.0, title="Standard Deviation Multiplier", minval=0.1) source = input(close, title="Source") // Entry ratio settings wickToBodyRatio = input.float(1.0, title="Minimum Wick-to-Body Ratio", minval=0) // Order Fill Timing Option fillOption = input.string("Daily Close", title="Order Fill Timing", options=["Daily Close", "Daily Open", "HOD", "LOD"]) // Account and risk settings accountBalance = 100000 // Account balance in dollars riskPercentage = 1.0 // Risk percentage per trade riskAmount = (riskPercentage / 100) * accountBalance // Fixed 1% risk amount // Request daily data for calculations dailyHigh = request.security(syminfo.tickerid, timeFrame, high) dailyLow = request.security(syminfo.tickerid, timeFrame, low) dailyClose = request.security(syminfo.tickerid, timeFrame, close) dailyOpen = request.security(syminfo.tickerid, timeFrame, open) // Calculate Bollinger Bands on the daily time frame dailyBasis = request.security(syminfo.tickerid, timeFrame, ta.sma(source, length)) dailyDev = mult * request.security(syminfo.tickerid, timeFrame, ta.stdev(source, length)) dailyUpperBand = dailyBasis + dailyDev dailyLowerBand = dailyBasis - dailyDev // Calculate the body and wick sizes on the daily time frame dailyBodySize = math.abs(dailyOpen - dailyClose) dailyUpperWickSize = dailyHigh - math.max(dailyOpen, dailyClose) dailyLowerWickSize = math.min(dailyOpen, dailyClose) - dailyLow // Conditions for a candle with an upper wick or lower wick that touches the Bollinger Bands upperWickCondition = (dailyUpperWickSize / dailyBodySize >= wickToBodyRatio) and (dailyHigh > dailyUpperBand) lowerWickCondition = (dailyLowerWickSize / dailyBodySize >= wickToBodyRatio) and (dailyLow < dailyLowerBand) // Define the swing high and swing low for stop loss placement var float swingLow = na var float swingHigh = na if (ta.pivothigh(dailyHigh, 5, 5)) swingHigh := dailyHigh[5] if (ta.pivotlow(dailyLow, 5, 5)) swingLow := dailyLow[5] // Determine entry price based on chosen fill option var float longEntryPrice = na var float shortEntryPrice = na if lowerWickCondition longEntryPrice := fillOption == "Daily Close" ? dailyClose : fillOption == "Daily Open" ? dailyOpen : fillOption == "HOD" ? dailyHigh : dailyLow if upperWickCondition shortEntryPrice := fillOption == "Daily Close" ? dailyClose : fillOption == "Daily Open" ? dailyOpen : fillOption == "HOD" ? dailyHigh : dailyLow // Execute the long and short entries with expiration var int longOrderExpiry = na var int shortOrderExpiry = na if not na(longEntryPrice) longOrderExpiry := bar_index + 2 // Order expires after 2 days if not na(shortEntryPrice) shortOrderExpiry := bar_index + 2 // Order expires after 2 days // Check expiration and execute orders if (longEntryPrice and bar_index <= longOrderExpiry and high >= longEntryPrice) longStopDistance = close - nz(swingLow, close) longPositionSize = longStopDistance > 0 ? riskAmount / longStopDistance : na if (not na(longPositionSize)) strategy.entry("Long", strategy.long, qty=longPositionSize) longEntryPrice := na // Reset after entry if (shortEntryPrice and bar_index <= shortOrderExpiry and low <= shortEntryPrice) shortStopDistance = nz(swingHigh, close) - close shortPositionSize = shortStopDistance > 0 ? riskAmount / shortStopDistance : na if (not na(shortPositionSize)) strategy.entry("Short", strategy.short, qty=shortPositionSize) shortEntryPrice := na // Reset after entry // Exit logic: hit the opposing Bollinger Band if (strategy.position_size > 0) // Long position strategy.exit("Exit Long", "Long", limit=dailyUpperBand) else if (strategy.position_size < 0) // Short position strategy.exit("Exit Short", "Short", limit=dailyLowerBand) if (strategy.position_size > 0) // Long position strategy.exit("Stop Loss Long", "Long", stop=swingLow) else if (strategy.position_size < 0) // Short position strategy.exit("Stop Loss Short", "Short", stop=swingHigh) // Plot daily Bollinger Bands and levels on the chosen time frame plot(dailyUpperBand, color=color.blue, linewidth=1, title="Daily Upper Bollinger Band") plot(dailyLowerBand, color=color.blue, linewidth=1, title="Daily Lower Bollinger Band") plot(dailyBasis, color=color.gray, linewidth=1, title="Daily Middle Bollinger Band")