یہ حکمت عملی رجحان کی سمت اور موم بتی کے نمونوں کا تعین کرنے کے لئے چلتی اوسط کو جوڑتی ہے تاکہ ممکنہ الٹ پوائنٹس کی نشاندہی کی جاسکے ، تاکہ تجارت کے بعد رجحان کو نافذ کیا جاسکے۔ حکمت عملی پہلے مجموعی رجحان کی سمت کا فیصلہ کرنے کے لئے چلتی اوسط کا استعمال کرتی ہے ، اور پھر رجحان کی سمت کے ساتھ داخلہ سگنل کے طور پر ممکنہ الٹ موم بتی کے نمونوں کی تلاش کرتی ہے تاکہ رجحان کو ٹریک کیا جاسکے۔
یہ حکمت عملی قیمت کے رجحان کا تعین کرنے کے لئے 10 دن کی سادہ چلتی اوسط کو اپناتی ہے۔ جب قیمت چلتی اوسط سے اوپر ہوتی ہے تو اسے اپ ٹرینڈ سمجھا جاتا ہے۔ جب قیمت چلتی اوسط سے نیچے ہوتی ہے تو اسے ڈاؤن ٹرینڈ سمجھا جاتا ہے۔
رجحان کی سمت کا تعین کرنے کے بعد ، حکمت عملی تیزی اور bearish موم بتی کے نمونوں کی ایک سیریز کی بنیاد پر ممکنہ رجحان الٹ پوائنٹس کا فیصلہ کرے گی۔ عام تیزی کے نمونوں میں مارننگ اسٹار ، بولش اینگلفنگ ، تھری وائٹ سولجرز وغیرہ شامل ہیں۔ عام کمی کے نمونوں میں ایوننگ اسٹار ، تھری بلیک کروز وغیرہ شامل ہیں۔ جب اپ ٹرینڈ میں تیزی کا اشارہ ملتا ہے تو ، حکمت عملی خریدنے کا آرڈر دے گی؛ جب ڈاؤن ٹرینڈ میں کمی کا اشارہ ملتا ہے تو ، حکمت عملی فروخت کا آرڈر دے گی۔
اس کے علاوہ ، حکمت عملی میں مخصوص انٹری قیمت کا تعین کرنے کے لئے اہم سپورٹ اور مزاحمت کی سطح بھی شامل ہے۔ مثال کے طور پر ، جب اپ ٹرینڈ میں خریدتے ہیں تو ، وہ پہلی سپورٹ کی سطح کو توڑنے پر خریدیں گے۔
اس حکمت عملی کا سب سے بڑا فائدہ یہ ہے کہ یہ رجحان کی تشخیص اور الٹ جانے والے سگنل دونوں کو جوڑتا ہے تاکہ یہ رجحان کی پیروی کرنے کے لئے بروقت انداز میں رجحان کے موڑ کے مقامات کو پکڑ سکے۔ سادہ حرکت پذیر اوسط حکمت عملی کے مقابلے میں ، یہ حکمت عملی منافع بخش کو بہت بہتر بنا سکتی ہے۔
اس کے علاوہ ، موم بتی کے نمونہ کی تشخیص کو شامل کرنے سے اچانک واقعات سے نمٹنے کی صلاحیت میں بھی اضافہ ہوتا ہے۔ جب کم امکان کا واقعہ مارکیٹ میں جھوٹے بریک آؤٹ کا سبب بنتا ہے تو ، موم بتی کا نمونہ غلط تجارت سے بچنے کے لئے فلٹر کا کردار ادا کرسکتا ہے۔
اس حکمت عملی کے اہم خطرات چلتی اوسط پیرامیٹر کی ترتیبات اور موم بتی پیٹرن کے فیصلے کی درستگی میں ہیں۔ اگر چلتی اوسط مدت غلط طریقے سے طے کی جاتی ہے تو ، اس سے غلط رجحان کا تعین ہوگا؛ اگر موم بتی پیٹرن کے فیصلے میں غلطیاں ہیں تو ، اس سے غلط تجارتی فیصلے بھی ہوں گے۔
اس کے علاوہ ، الٹ پلٹ موم بتی کے پیٹرن 100٪ یقین کے ساتھ رجحان کی الٹ کی ضمانت نہیں دے سکتے ہیں ، لہذا حکمت عملی میں ابھی بھی کچھ خطرات موجود ہیں۔ جب مارکیٹ بڑی الٹ دیکھتی ہے تو ، یہ حکمت عملی میں زیادہ نقصانات لا سکتی ہے۔
اس حکمت عملی میں ابھی بھی اصلاح کے لئے کافی گنجائش ہے۔ مثال کے طور پر ، ہم متحرک طور پر اوسط کی پیرامیٹرز کو ایڈجسٹ کرنے اور مختلف مارکیٹ کے مراحل میں مختلف متحرک اوسط ادوار کو اپنانے پر غور کرسکتے ہیں۔ ہم فیصلہ کی درستگی کو بہتر بنانے کے لئے تاریخی اعداد و شمار کا استعمال کرتے ہوئے موم بتی کے نمونوں کے فیصلے کے ماڈلز کو تربیت دینے کے لئے مشین لرننگ کے طریقوں کو بھی متعارف کروا سکتے ہیں۔
اس کے علاوہ، ہم رجحانات اور گرم علاقوں کا اندازہ کرنے کے لئے مزید عوامل شامل کرنے پر بھی غور کرسکتے ہیں، جیسے ٹریڈنگ حجم میں تبدیلی، اتار چڑھاؤ کے اشارے، وغیرہ، حکمت عملی کو زیادہ جامع اور مضبوط بنانے کے لئے.
عام طور پر ، یہ حکمت عملی اسٹاک مارکیٹ میں درمیانی مدتی رجحانات کو ٹریک کرنے کے لئے بہت موزوں ہے اور نسبتا high اعلی اور مستحکم منافع حاصل کرسکتی ہے۔ اگر مزید بہتر بنایا جائے تو ، اس میں ایک اچھی طرح سے کام کرنے والی مقداری حکمت عملی بننے کی صلاحیت ہے۔ اگر سرمایہ کار اس حکمت عملی کے استعمال کو سمجھتے ہیں تو ، وہ اس کا استعمال انفرادی اسٹاک کے خطرات کو کنٹرول کرنے کے لئے طویل مدتی ہولڈنگز کی تعمیر کے لئے بھی کرسکتے ہیں جبکہ بہتر اضافی منافع حاصل کرتے ہیں۔
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Trend Following Strategy with Candlestick Patterns", overlay=true) // Moving Average ma_period = input(10, title="Moving Average Period") moving_average = ta.sma(close, ma_period) // Candlestick Patterns // Custom Function abs(x) => x >= 0 ? x : -x // Candlestick Patterns isDoji() => (close - open) <= (high - low) * 0.1 isMarubozuWhite() => close == high and open == low and close > open isHammer() => (high - low) >= 3 * abs(open - close) and (close - low) / (0.001 + high - low) > 0.6 and (open - low) / (0.001 + high - low) > 0.6 isInvertedHammer() => (high - low) >= 3 * abs(open - close) and (high - close) / (0.001 + high - low) > 0.6 and (high - open) / (0.001 + high - low) > 0.6 isLongLowerShadow() => (low - close) > 2 * abs(open - close) and (low - open) / (0.001 + high - low) > 0.6 isUpsideTasukiGap() => close[1] < open[1] and open > close and open > close[1] and close < open[1] isRisingWindow() => high[1] < low and close > open isPiercing() => close[1] < open[1] and close > open and close > ((open + low) / 2) and close < open[1] and open < close[1] isBullishEngulfing() => close[1] < open[1] and close > open and high > high[1] and low < low[1] isTweezerBottom() => low == ta.valuewhen(low == ta.lowest(low, 10), low, 0) and low == ta.valuewhen(low == ta.lowest(low, 20), low, 0) isBullishAbandonedBaby() => close[2] < open[2] and close[1] > open[1] and low[1] > ta.valuewhen(high == ta.highest(high, 2), high, 0) and open > close and close > ta.valuewhen(high == ta.highest(high, 2), high, 0) isMorningStar() => close[2] < open[2] and close[1] < open[1] and close > open[1] and open < close[2] and open > close[1] isMorningDojiStar() => close[2] < open[2] and close[1] < open[1] and isDoji() and close > open[1] and open < close[2] and open > close[1] isDragonflyDoji() => isDoji() and (high - close) / (0.001 + high - low) < 0.1 and (open - low) / (0.001 + high - low) > 0.6 isThreeWhiteSoldiers() => close[2] < open[2] and close[1] < open[1] and close > open and open < close[2] and open < close[1] and close > open[1] isRisingThreeMethods() => close[4] < open[4] and close[1] < open[1] and close > open and open < close[4] and open < close[1] and close > open[1] isMarubozuBlack() => close == low and open == high and open > close isGravestoneDoji() => isDoji() and (close - low) / (0.001 + high - low) < 0.1 and (high - open) / (0.001 + high - low) > 0.6 isHangingMan() => (high - low) >= 4 * abs(open - close) and (open - close) / (0.001 + high - low) > 0.6 and (high - open) / (0.001 + high - low) > 0.6 isLongUpperShadow() => (high - open) > 2 * abs(open - close) and (high - close) / (0.001 + high - low) > 0.6 isDownsideTasukiGap() => close[1] > open[1] and open < close and open < close[1] and close > open[1] isFallingWindow() => low[1] > high and close < open isDarkCloudCover() => close[1] > open[1] and close < open and close < ((open + high) / 2) and close > open[1] and open > close[1] isBearishEngulfing() => close[1] > open[1] and close < open and high > high[1] and low < low[1] isTweezerTop() => high == ta.valuewhen(high == ta.highest(high, 10), high, 0) and high == ta.valuewhen(high == ta.highest(high, 20), high, 0) isAbandonedBaby() => close[2] > open[2] and close[1] < open[1] and high[1] < ta.valuewhen(low == ta.lowest(low, 2), low, 0) and open < close and close < ta.valuewhen(low == ta.lowest(low, 2), low, 0) isEveningDojiStar() => close[2] > open[2] and close[1] > open[1] and isDoji() and close < open[1] and open > close[2] and open < close[1] isEveningStar() => close[2] > open[2] and close[1] > open[1] and close < open[1] and open > close[2] and open < close[1] isThreeBlackCrows() => close[2] > open[2] and close[1] > open[1] and close < open and open > close[2] and open > close[1] and close < open[1] isFallingThreeMethods() => close[4] > open[4] and close[1] > open isShootingStar() => (high - low) >= 3 * abs(open - close) and (high - close) / (0.001 + high - low) > 0.6 and (high - open) / (0.001 + high - low) > 0.6 doji = isDoji() marubozuWhite = isMarubozuWhite() hammer = isHammer() invertedHammer = isInvertedHammer() longLowerShadow = isLongLowerShadow() upsideTasukiGap = isUpsideTasukiGap() risingWindow = isRisingWindow() piercing = isPiercing() bullishEngulfing = isBullishEngulfing() tweezerBottom = isTweezerBottom() bullishAbandonedBaby = isBullishAbandonedBaby() morningStar = isMorningStar() morningDojiStar = isMorningDojiStar() dragonflyDoji = isDragonflyDoji() threeWhiteSoldiers = isThreeWhiteSoldiers() risingThreeMethods = isRisingThreeMethods() marubozuBlack = isMarubozuBlack() gravestoneDoji = isGravestoneDoji() hangingMan = isHangingMan() longUpperShadow = isLongUpperShadow() downsideTasukiGap = isDownsideTasukiGap() fallingWindow = isFallingWindow() darkCloudCover = isDarkCloudCover() bearishEngulfing = isBearishEngulfing() tweezerTop = isTweezerTop() abandonedBaby = isAbandonedBaby() eveningDojiStar = isEveningDojiStar() eveningStar = isEveningStar() threeBlackCrows = isThreeBlackCrows() fallingThreeMethods = isFallingThreeMethods() shootingStar = isShootingStar() isBullishPattern() => (isMarubozuWhite() or isHammer() or isInvertedHammer() or isDoji() or isMorningStar() or isBullishEngulfing() or isThreeWhiteSoldiers() or isMarubozuBlack() or isHangingMan() or isDownsideTasukiGap() or isDarkCloudCover()) isBearishPattern() => (isMarubozuBlack() or isInvertedHammer() or isLongUpperShadow() or isTweezerTop() or isGravestoneDoji() or isEveningStar() or isBearishEngulfing() or isThreeBlackCrows() or isShootingStar()) isBullishCandle = isBullishPattern() isBearishCandle = isBearishPattern() // Calculate Pivot Points pivotPoint(high, low, close) => (high + low + close) / 3 r1 = pivotPoint(high[1], low[1], close[1]) * 2 - low[1] s1 = pivotPoint(high[1], low[1], close[1]) * 2 - high[1] r2 = pivotPoint(high[1], low[1], close[1]) + (high[1] - low[1]) s2 = pivotPoint(high[1], low[1], close[1]) - (high[1] - low[1]) r3 = high[1] + 2 * (pivotPoint(high[1], low[1], close[1]) - low[1]) s3 = low[1] - 2 * (high[1] - pivotPoint(high[1], low[1], close[1])) // Trend Identification is_uptrend = close > moving_average is_downtrend = close < moving_average // Entry and Exit Conditions with Trend Identification enterLong = is_uptrend and isBullishCandle and close > r1 exitLong = is_uptrend and (bearishEngulfing or doji or close < s1) enterShort = is_downtrend and isBearishCandle and close < s1 exitShort = is_downtrend and (bullishEngulfing or doji or close > r1) // Strategy Execution if enterLong and strategy.position_size == 0 and strategy.position_size[1] == 0 and close > r1 strategy.entry("Buy", strategy.long, qty=1) if exitLong and strategy.position_size > 0 strategy.close("Buy") if enterShort and strategy.position_size == 0 and close < s1 strategy.entry("Sell", strategy.short, qty=1) if exitShort and strategy.position_size < 0 strategy.close("Sell") // Stop-Loss and Trailing Stop-Loss stop_loss_pct = input(2.0, title="Stop Loss Percentage") trailing_stop_loss_pct = input(1.0, title="Trailing Stop Loss Percentage") trailing_stop_loss_active = input(true, title="Trailing Stop Loss Active") // Stop-Loss stop_loss_level = strategy.position_avg_price * (1 - stop_loss_pct / 100) strategy.exit("Stop Loss", "Buy", loss=stop_loss_level) // Trailing Stop-Loss // Plotting Moving Average plot(moving_average, color=color.blue, title="Moving Average", linewidth=2) // Plotting Candlestick Patterns plotshape(isBullishCandle, title="Bullish Candle", location=location.belowbar, color=color.green, style=shape.labelup) plotshape(isBearishCandle, title="Bearish Candle", location=location.abovebar, color=color.red, style=shape.labeldown) // Plotting Support and Resistance Levels //hline(r1, "Resistance Level 1", color=color.red, linestyle=hline.style_dotted) //hline(s1, "Support Level 1", color=color.green, linestyle=hline.style_dotted)