
اس حکمت عملی میں رجحان کی سمت کا تعین کرنے کے لئے چلتی اوسط کا استعمال کیا جاتا ہے ، اور رجحان کی پیروی کرنے کے لئے K لائن کی شکل کا تعین کرنے کے لئے موڑ کے نقطہ نظر کا استعمال کیا جاتا ہے۔ اس حکمت عملی میں پہلے رجحان کی مجموعی سمت کا تعین کرنے کے لئے چلتی اوسط کا استعمال کیا جاتا ہے ، اور پھر رجحان کی سمت میں ممکنہ الٹ K لائن کی شکل کو تلاش کرنے کے لئے داخلہ سگنل کے طور پر تلاش کیا جاتا ہے ، تاکہ اس رجحان کی پیروی کی جاسکے۔
حکمت عملی قیمتوں کے رجحان کی سمت کا تعین کرنے کے لئے 10 دن کی لمبائی کی ایک سادہ حرکت پذیری اوسط کا استعمال کرتی ہے۔ جب قیمت حرکت پذیری اوسط سے زیادہ ہوتی ہے تو ، اسے اوپر کی طرف بڑھنے کا رجحان سمجھا جاتا ہے۔ جب قیمت حرکت پذیری اوسط سے کم ہوتی ہے تو ، اسے نیچے کی طرف جانے کا رجحان سمجھا جاتا ہے۔
رجحان کی سمت کا تعین کرنے کے بعد ، حکمت عملی ممکنہ رجحان کی تبدیلی کے بارے میں فیصلہ کرنے کے لئے کین لائن K لائن شکلوں اور کین لائن K لائن شکلوں کی ایک سیریز کی بنیاد پر کام کرتی ہے۔ عام کین لائن شکلوں میں طلوع ستارہ ، صبح کا ستارہ ، تین سفید سپاہی وغیرہ شامل ہیں۔ عام کین لائن شکلوں میں شام کا ستارہ ، تین کبوتر وغیرہ شامل ہیں۔ جب بڑھتے ہوئے رجحان میں کین لائن سگنل کی نشاندہی کی جاتی ہے تو ، حکمت عملی خریدنے کے لئے کام کرتی ہے۔ جب گرنے والے رجحان میں کین لائن سگنل کی نشاندہی کی جاتی ہے تو ، حکمت عملی بیچنے کے لئے کام کرتی ہے۔
اس کے علاوہ ، حکمت عملی داخل ہونے کی مخصوص قیمت کا تعین کرنے کے لئے اہم معاونت مزاحمت کی سطح کے ساتھ مل کر کام کرتی ہے۔ جیسا کہ اوپر کی طرف جانے والے رجحان کے تحت خریدنا ، پہلی معاونت کو توڑنے پر خریداری کی جائے گی۔
اس حکمت عملی کا سب سے بڑا فائدہ یہ ہے کہ یہ ایک ہی وقت میں رجحان کا فیصلہ اور الٹ سگنل کو جوڑتا ہے ، جس سے یہ بروقت رجحان کے موڑ کو پکڑ سکتا ہے ، اور رجحان سے باخبر رہنے کے عمل کو انجام دے سکتا ہے۔ یہ حکمت عملی سادہ حرکت پذیر اوسط حکمت عملی کے مقابلے میں منافع کی امکانات کو بہت بہتر بنا سکتی ہے۔
اس کے علاوہ ، حکمت عملی میں K لائن فارمیٹ کے فیصلے شامل کرنے سے اس کی غیر متوقع واقعات سے نمٹنے کی صلاحیت میں بھی اضافہ ہوتا ہے۔ جب مارکیٹ میں کم امکانات کے واقعات ہوتے ہیں جس کی وجہ سے جعلی پیشرفت ہوتی ہے تو ، K لائن فارمیٹ غلط تجارت سے بچنے کے لئے فلٹرنگ کا کام کرسکتا ہے۔
اس حکمت عملی کا بنیادی خطرہ اوسط اوسط پیرامیٹرز کی ترتیب اور K لائن فارمیٹ کے فیصلے کی درستگی میں ہے۔ اگر اوسط اوسط کی مدت کو غیر مناسب طریقے سے ترتیب دیا جائے تو ، اس سے رجحان کا فیصلہ کرنے میں غلطی ہوسکتی ہے۔ اگر K لائن فارمیٹ کے فیصلے میں غلطی ہو تو ، اس سے تجارتی فیصلے میں غلطی ہوسکتی ہے۔
اس کے علاوہ ، ایک الٹ K لائن کی شکل 100٪ رجحان کی تبدیلی کی ضمانت نہیں دیتی ہے ، لہذا حکمت عملی میں کچھ خطرہ بھی موجود ہے۔ جب مارکیٹ میں بڑے پیمانے پر الٹ ہوتا ہے تو ، حکمت عملی کو زیادہ نقصان پہنچا سکتا ہے۔
اس حکمت عملی میں بہت زیادہ اصلاح کی گنجائش ہے۔ مثال کے طور پر ، متحرک طور پر منتقل اوسط کے پیرامیٹرز کو ایڈجسٹ کرنے پر غور کیا جاسکتا ہے ، مارکیٹ کے مختلف مراحل میں مختلف اوسط اوسط دورانیے کو اپنایا جاسکتا ہے۔ اس میں مشین لرننگ کے طریقوں کو شامل کیا جاسکتا ہے ، جس میں تاریخی اعداد و شمار کا استعمال کرتے ہوئے K لائن کی شکل کے فیصلے کے ماڈل کی تربیت کی جاسکتی ہے ، تاکہ فیصلے کی درستگی کو بہتر بنایا جاسکے۔
اس کے علاوہ، اس حکمت عملی کو مزید جامع اور مستحکم بنانے کے لئے رجحانات اور گرم علاقوں جیسے ٹریڈنگ حجم میں تبدیلی، اتار چڑھاؤ کے اشارے وغیرہ کو شامل کرنے پر غور کیا جا سکتا ہے.
یہ حکمت عملی مجموعی طور پر اسٹاک مارکیٹ کے درمیانی مدت کے رجحانات کی پیروی کرنے کے لئے موزوں ہے ، اور اعلی مستحکم منافع حاصل کرسکتا ہے۔ اگر مزید اصلاح کی جائے تو ، یہ ایک اچھی طرح سے کام کرنے والی مقداری حکمت عملی بننے کا امکان ہے۔ اگر سرمایہ کار اس حکمت عملی کے استعمال پر قابو پالیں تو ، وہ اس کا استعمال طویل مدتی پورٹ فولیو کی تعمیر کے لئے بھی کرسکتے ہیں ، تاکہ انفرادی حصص کے خطرے پر قابو پانے کے ساتھ ساتھ بہتر اضافی منافع حاصل کیا جاسکے۔
/*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)