
এই কৌশলটি প্রবণতা-অনুসন্ধানের ব্যবসায়ের জন্য প্রবণতা-অনুসন্ধানের ব্যবসায়ের জন্য প্রবণতা-অনুসন্ধানের ব্যবসায়ের জন্য প্রবণতা-অনুসন্ধানের ব্যবসায়ের জন্য প্রবণতা-অনুসন্ধানের ব্যবসায়ের জন্য প্রবণতা-অনুসন্ধানের ব্যবসায়ের জন্য প্রবণতা-অনুসন্ধানের ব্যবসায়ের জন্য প্রবণতা-অনুসন্ধানের ব্যবসায়ের জন্য প্রবণতা-অনুসন্ধানের ব্যবসায়ের জন্য প্রবণতা-অনুসন্ধানের ব্যবসায়ের জন্য প্রবণতা-অনুসন্ধানের ব্যবসায়ের জন্য প্রবণতা-অনুসন্ধানের ব্যবসায়ের জন্য প্রবণতা-অনুসন্ধানের ব্যবসায়ের জন্য প্রবণতা-অনুসন্ধানের ব্যবসায়ের জন্য প্রবণতা-অনুসন্ধানের ব্যবসায়ের জন্য প্রবণতা-অনুসন্ধানের ব্যবসায়ের জন্য প্রবণতা-অনুসন্ধানের ব্যব
কৌশলটি 10 দিনের দৈর্ঘ্যের একটি সরল চলমান গড় ব্যবহার করে দামের প্রবণতার দিক নির্ধারণ করে। যখন দাম চলমান গড়ের উপরে থাকে, তখন এটি একটি উত্থান প্রবণতা হিসাবে বিবেচিত হয়; যখন দাম চলমান গড়ের নীচে থাকে, তখন এটি একটি পতনশীল প্রবণতা হিসাবে বিবেচিত হয়।
ট্রেন্ডের দিকনির্দেশনা নির্ধারণের পরে, কৌশলটি সম্ভাব্য প্রবণতা বিপর্যয়ের জন্য একটি সিরিজ সূর্যের K-লাইন এবং সূর্যের K-লাইন ফর্ম্যাটগুলির উপর ভিত্তি করে সিদ্ধান্ত নেবে। সাধারণ সূর্যের ফর্ম্যাটগুলির মধ্যে রয়েছে সূর্যোদয়, প্রভাতের তারা, তিনটি সাদা সৈনিক ইত্যাদি; সাধারণ সূর্যের ফর্ম্যাটগুলির মধ্যে রয়েছে সূর্যোদয়, তিনটি ক্রাউন ইত্যাদি। যখন একটি উত্থান প্রবণতা সূর্যের সংকেত সনাক্ত করে, কৌশলটি ক্রয় করে; যখন একটি পতন প্রবণতা সূর্যের সংকেত সনাক্ত করে, কৌশলটি বিক্রয় করে।
উপরন্তু, কৌশলটি মূল সমর্থন এবং প্রতিরোধের স্তরের সাথে মিলিত হয় যাতে প্রবেশের নির্দিষ্ট মূল্য নির্ধারণ করা যায়। যদি এটি একটি উত্থান প্রবণতার অধীনে ক্রয় করা হয় তবে এটি প্রথম সমর্থনটি ভেঙে দেওয়ার সময় ক্রয় করা হবে।
এই কৌশলটির সবচেয়ে বড় সুবিধা হ’ল এটি একই সাথে প্রবণতা বিচার এবং বিপরীত সংকেতকে একত্রিত করে, যা এটিকে সময়মতো প্রবণতা বিপরীত পয়েন্টগুলি ক্যাপচার করতে এবং প্রবণতা ট্র্যাকিং চালানোর অনুমতি দেয়। এই কৌশলটি সহজ চলমান গড় কৌশলগুলির তুলনায় মুনাফা অর্জনের সম্ভাবনাকে উল্লেখযোগ্যভাবে বাড়িয়ে তুলতে পারে।
এছাড়া, কৌশলটিতে K-লাইন ফর্ম্যাট যুক্ত করার সিদ্ধান্তটি তার অপ্রত্যাশিত ঘটনাগুলির মোকাবেলা করার ক্ষমতাও বাড়িয়ে তোলে। যখন বাজারে কম সম্ভাব্যতার ঘটনা ঘটে যা মিথ্যা ব্রেকআউটের দিকে পরিচালিত করে, তখন K-লাইন ফর্ম্যাটগুলি ফিল্টারিংয়ের ভূমিকা পালন করতে পারে এবং ভুল লেনদেন এড়াতে পারে।
এই কৌশলটির প্রধান ঝুঁকিটি হল চলমান গড় প্যারামিটার সেটিং এবং কে-লাইন আকৃতির বিচারের নির্ভুলতা। যদি চলমান গড়ের সময়কালটি ভুলভাবে সেট করা হয় তবে ট্রেন্ডের বিচারের ভুল হতে পারে। যদি কে-লাইন আকৃতির বিচারের ভুল হয় তবে ট্রেডিং সিদ্ধান্তের ভুল হতে পারে।
উপরন্তু, একটি বিপরীত K-লাইন আকৃতি 100% নিশ্চিত করে না যে প্রবণতাটি বিপরীত হবে, তাই কৌশলটি একটি নির্দিষ্ট ঝুঁকি নিয়ে থাকে। যখন বাজার একটি বৃহত্তর পরিসরে বিপরীত হয়, তখন কৌশলটি আরও বড় ক্ষতির কারণ হতে পারে।
এই কৌশলটির অপ্টিমাইজেশনের জন্য যথেষ্ট জায়গা রয়েছে। উদাহরণস্বরূপ, চলমান গড়ের প্যারামিটারগুলিকে গতিশীলভাবে সামঞ্জস্য করা যেতে পারে, বিভিন্ন বাজারের পর্যায়ে বিভিন্ন চলমান গড়ের সময়কাল ব্যবহার করা যেতে পারে।
এছাড়াও, ট্রেন্ড এবং হট স্পটগুলির জন্য আরও কিছু ফ্যাক্টর যুক্ত করার কথা বিবেচনা করা যেতে পারে, যেমন ট্রেডিং ভলিউমের পরিবর্তন, অস্থিরতার সূচক ইত্যাদি, যা কৌশলটিকে আরও বিস্তৃত এবং শক্তিশালী করে তোলে।
এই কৌশলটি সামগ্রিকভাবে স্টক মার্কেটের মাঝারি মেয়াদী প্রবণতা অনুসরণ করার জন্য খুব উপযুক্ত এবং উচ্চ স্থিতিশীল রিটার্ন অর্জন করতে পারে। যদি আরও অপ্টিমাইজ করা হয় তবে এটি একটি ভাল কাজ করে এমন একটি পরিমাণগত কৌশল হওয়ার সম্ভাবনা রয়েছে। বিনিয়োগকারীরা যদি এই কৌশলটি ব্যবহার করতে পারে তবে তারা দীর্ঘমেয়াদী পোর্টফোলিও তৈরি করতে পারে যাতে একক শেয়ারের ঝুঁকি নিয়ন্ত্রণের পাশাপাশি আরও ভাল অতিরিক্ত রিটার্ন অর্জন করতে পারে।
/*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)