ফিবোনাচি সিকোয়েন্সের উপর ভিত্তি করে অভিযোজিত বলিঙ্গার ব্যান্ড কৌশলের বিশ্লেষণ

ATR BB SMA FIB
সৃষ্টির তারিখ: 2025-01-06 16:41:48 অবশেষে সংশোধন করুন: 2025-01-06 16:41:48
অনুলিপি: 2 ক্লিকের সংখ্যা: 434
1
ফোকাস
1617
অনুসারী

ফিবোনাচি সিকোয়েন্সের উপর ভিত্তি করে অভিযোজিত বলিঙ্গার ব্যান্ড কৌশলের বিশ্লেষণ

ওভারভিউ

এই কৌশলটি একটি উদ্ভাবনী ট্রেডিং সিস্টেম যা ফিবোনাচি সিকোয়েন্স এবং বলিঞ্জার ব্যান্ডকে একত্রিত করে। এটি ফিবোনাচি অনুপাত (1.618, 2.618, 4.236) এর সাথে ঐতিহ্যবাহী বলিঙ্গার ব্যান্ডের মানক বিচ্যুতি গুণিতক প্রতিস্থাপন করে একটি অনন্য মূল্যের ওঠানামা পরিসীমা বিচার ব্যবস্থা গঠন করে। কৌশলটিতে স্টপ-প্রফিট এবং স্টপ-লস সেটিংস এবং ট্রেডিং টাইম উইন্ডো ফিল্টারিং সহ সম্পূর্ণ লেনদেন পরিচালনার ফাংশন অন্তর্ভুক্ত রয়েছে, এটিকে অত্যন্ত ব্যবহারিক এবং নমনীয় করে তোলে।

কৌশল নীতি

কৌশলটির মূল যুক্তিটি মূল্য এবং ফিবোনাচ্চি বলিঙ্গার ব্যান্ডের মধ্যে মিথস্ক্রিয়ার উপর ভিত্তি করে। প্রথমে মধ্যম রেল হিসাবে মূল্যের সরল চলন্ত গড় (SMA) গণনা করুন এবং তারপর উপরের এবং নীচের রেলগুলি তৈরি করতে বিভিন্ন ফিবোনাচি অনুপাত দ্বারা গুণিত ATR ব্যবহার করুন৷ ব্যবহারকারীর দ্বারা নির্বাচিত ফিবোনাচ্চি ব্যান্ড স্তরের মধ্য দিয়ে মূল্য বিরতি হলে, সিস্টেমটি একটি ট্রেডিং সংকেত তৈরি করবে। বিশেষভাবে, একটি দীর্ঘ সংকেত ট্রিগার হয় যখন সর্বনিম্ন মূল্য লক্ষ্য ক্রয় অঞ্চলের চেয়ে কম এবং সর্বোচ্চ মূল্য এই অঞ্চলের চেয়ে বেশি হলে একটি সংক্ষিপ্ত সংকেত ট্রিগার হয় যখন সর্বনিম্ন মূল্য লক্ষ্য বিক্রয় অঞ্চলের চেয়ে কম হয় এবং সর্বোচ্চ মূল্য বেশি হয় এই অঞ্চলের চেয়ে।

কৌশলগত সুবিধা

  1. দৃঢ় অভিযোজনযোগ্যতা: ATR এর মাধ্যমে গতিশীলভাবে ব্যান্ডউইথ সামঞ্জস্য করুন যাতে কৌশলটি বিভিন্ন বাজারের পরিবেশের সাথে আরও ভালভাবে মানিয়ে নিতে পারে
  2. উচ্চ নমনীয়তা: ব্যবহারকারীরা তাদের ট্রেডিং শৈলী অনুসারে ট্রেডিং সংকেত হিসাবে বিভিন্ন ফিবোনাচি ব্যান্ড বেছে নিতে পারেন
  3. নিখুঁত ঝুঁকি ব্যবস্থাপনা: ঝুঁকি কার্যকরভাবে নিয়ন্ত্রণের জন্য অন্তর্নির্মিত স্টপ-প্রফিট, স্টপ-লস এবং সময় ফিল্টারিং ফাংশন
  4. ভিজ্যুয়াল ইন্টিউশন: বিভিন্ন স্বচ্ছতার সাথে ব্যান্ড ডিসপ্লের মাধ্যমে বাজারের কাঠামো বোঝা ব্যবসায়ীদের পক্ষে সহজ।
  5. পরিষ্কার গণনা যুক্তি: ক্লাসিক প্রযুক্তিগত সূচকগুলির সংমিশ্রণ ব্যবহার করে, বোঝা এবং বজায় রাখা সহজ

কৌশলগত ঝুঁকি

  1. মিথ্যা ব্রেকআউটের ঝুঁকি: ব্রেকআউটের পরপরই দাম কমতে পারে, একটি মিথ্যা সংকেত তৈরি করে
  2. প্যারামিটার সংবেদনশীলতা: ফিবোনাচি অনুপাতের বিভিন্ন পছন্দ কৌশল কর্মক্ষমতাকে উল্লেখযোগ্যভাবে প্রভাবিত করতে পারে
  3. সময় নির্ভরতা: ট্রেডিং টাইম উইন্ডো চালু থাকলে, গুরুত্বপূর্ণ ট্রেডিং সুযোগ মিস হতে পারে
  4. বাজারের পরিবেশ নির্ভরতা: অস্থির বাজারে অনেক বেশি ট্রেডিং সংকেত তৈরি হতে পারে

কৌশল অপ্টিমাইজেশনের দিকনির্দেশনা

  1. সংকেত নিশ্চিতকরণ প্রক্রিয়া: যুগান্তকারী নিশ্চিতকরণ হিসাবে ভলিউম বা ভরবেগ সূচক যুক্ত করার সুপারিশ করা হয়
  2. ডায়নামিক প্যারামিটার অপ্টিমাইজেশান: ফিবোনাচি অনুপাত বাজারের অস্থিরতার উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে সামঞ্জস্য করা যেতে পারে
  3. মার্কেট এনভায়রনমেন্ট ফিল্টারিং: ট্রেন্ড জাজমেন্ট ফাংশন যোগ করুন এবং বিভিন্ন মার্কেট এনভায়রনমেন্টে বিভিন্ন প্যারামিটার ব্যবহার করুন
  4. সিগন্যাল ওয়েটিং সিস্টেম: সিগন্যালের নির্ভরযোগ্যতা উন্নত করতে একাধিক টাইম ফ্রেম বিশ্লেষণ স্থাপন করুন
  5. অবস্থান ব্যবস্থাপনা অপ্টিমাইজেশান: বাজারের অস্থিরতা এবং সংকেত শক্তির উপর ভিত্তি করে গতিশীলভাবে অবস্থানের আকার সামঞ্জস্য করুন

সারসংক্ষেপ

এটি এমন একটি কৌশল যা ফিবোনাচি সিকোয়েন্সের মাধ্যমে প্রথাগত বলিঙ্গার ব্যান্ড কৌশলকে অপ্টিমাইজ করে ক্লাসিক প্রযুক্তিগত বিশ্লেষণ সরঞ্জামগুলির একটি উদ্ভাবনী সংমিশ্রণকে একত্রিত করে। এর প্রধান সুবিধাটি অভিযোজনযোগ্যতা এবং নমনীয়তার মধ্যে রয়েছে, তবে এটি ব্যবহার করার সময়, আপনাকে প্যারামিটার নির্বাচন এবং বাজারের পরিবেশের মিলের দিকে মনোযোগ দিতে হবে। অতিরিক্ত নিশ্চিতকরণ সূচক যোগ করে এবং সিগন্যাল জেনারেশন মেকানিজম অপ্টিমাইজ করে এই কৌশলটিতে উন্নতির জন্য যথেষ্ট জায়গা রয়েছে।

কৌশল সোর্স কোড
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
// © sapphire_edge 

// # ========================================================================= #
// #                  
// #        _____                   __    _              ______    __         
// #      / ___/____ _____  ____  / /_  (_)_______     / ____/___/ /___ ____ 
// #      \__ \/ __ `/ __ \/ __ \/ __ \/ / ___/ _ \   / __/ / __  / __ `/ _ \
// #     ___/ / /_/ / /_/ / /_/ / / / / / /  /  __/  / /___/ /_/ / /_/ /  __/
// #    /____/\__,_/ .___/ .___/_/ /_/_/_/   \___/  /_____/\__,_/\__, /\___/ 
// #              /_/   /_/                                     /____/       
// #                                      
// # ========================================================================= #

strategy(shorttitle="⟡Sapphire⟡ FiboBands Strategy", title="[Sapphire] Fibonacci Bollinger Bands Strategy", initial_capital= 50000, currency= currency.USD,default_qty_value = 1,commission_type= strategy.commission.cash_per_contract,overlay= true )

// # ========================================================================= #
// #                       // Settings Menu //
// # ========================================================================= #

// --------------------    Main Settings    -------------------- //
groupFiboBands = "FiboBands"
length = input.int(20, minval = 1, title = 'Length', group=groupFiboBands)
src = input(close, title = 'Source', group=groupFiboBands)
offset = input.int(0, 'Offset', minval = -500, maxval = 500, group=groupFiboBands)

fibo1 = input(defval = 1.618, title = 'Fibonacci Ratio 1', group=groupFiboBands)
fibo2 = input(defval = 2.618, title = 'Fibonacci Ratio 2', group=groupFiboBands)
fibo3 = input(defval = 4.236, title = 'Fibonacci Ratio 3', group=groupFiboBands)

fiboBuy = input.string(options = ['Fibo 1', 'Fibo 2', 'Fibo 3'], defval = 'Fibo 1', title = 'Fibonacci Buy', group=groupFiboBands)
fiboSell = input.string(options = ['Fibo 1', 'Fibo 2', 'Fibo 3'], defval = 'Fibo 1', title = 'Fibonacci Sell', group=groupFiboBands)

showSignals = input.bool(true, title="Show Signals", group=groupFiboBands)
signalOffset = input.int(5, title="Signal Vertical Offset", group=groupFiboBands)

// --------------------    Trade Management Inputs    -------------------- //
groupTradeManagement = "Trade Management"
useProfitPerc    = input.bool(false, title="Enable Profit Target", group=groupTradeManagement)
takeProfitPerc  = input.float(1.0, title="Take Profit (%)", step=0.1, group=groupTradeManagement)
useStopLossPerc    = input.bool(false, title="Enable Stop Loss", group=groupTradeManagement)
stopLossPerc    = input.float(1.0, title="Stop Loss (%)", step=0.1, group=groupTradeManagement)

// --------------------    Time Filter Inputs    -------------------- //
groupTimeOfDayFilter = "Time of Day Filter"
useTimeFilter1  = input.bool(false, title="Enable Time Filter 1", group=groupTimeOfDayFilter)
startHour1      = input.int(0, title="Start Hour (24-hour format)", minval=0, maxval=23, group=groupTimeOfDayFilter)
startMinute1    = input.int(0, title="Start Minute", minval=0, maxval=59, group=groupTimeOfDayFilter)
endHour1        = input.int(23, title="End Hour (24-hour format)", minval=0, maxval=23, group=groupTimeOfDayFilter)
endMinute1      = input.int(45, title="End Minute", minval=0, maxval=59, group=groupTimeOfDayFilter)
closeAtEndTimeWindow = input.bool(false, title="Close Trades at End of Time Window", group=groupTimeOfDayFilter)

// --------------------    Trading Window    -------------------- //
isWithinTradingWindow(startHour, startMinute, endHour, endMinute) =>
    nyTime            = timestamp("America/New_York", year, month, dayofmonth, hour, minute)
    nyHour            = hour(nyTime)
    nyMinute          = minute(nyTime)
    timeInMinutes     = nyHour * 60 + nyMinute
    startInMinutes    = startHour * 60 + startMinute
    endInMinutes      = endHour * 60 + endMinute
    timeInMinutes    >= startInMinutes and timeInMinutes <= endInMinutes

timeCondition =  (useTimeFilter1 ? isWithinTradingWindow(startHour1, startMinute1, endHour1, endMinute1) : true)

// Check if the current bar is the last one within the specified time window
isEndOfTimeWindow() =>
    nyTime            = timestamp("America/New_York", year, month, dayofmonth, hour, minute)
    nyHour            = hour(nyTime)
    nyMinute          = minute(nyTime)
    timeInMinutes     = nyHour * 60 + nyMinute
    endInMinutes      = endHour1 * 60 + endMinute1
    timeInMinutes == endInMinutes

// Logic to close trades if the time window ends
if timeCondition and closeAtEndTimeWindow and isEndOfTimeWindow()
    strategy.close_all(comment="Closing trades at end of time window")

// # ========================================================================= #
// #                       // Calculations //
// # ========================================================================= #

sma = ta.sma(src, length)
atr = ta.atr(length)

ratio1 = atr * fibo1
ratio2 = atr * fibo2
ratio3 = atr * fibo3

upper3 = sma + ratio3
upper2 = sma + ratio2
upper1 = sma + ratio1

lower1 = sma - ratio1
lower2 = sma - ratio2
lower3 = sma - ratio3

// # ========================================================================= #
// #                       // Signal Logic //
// # ========================================================================= #

// --------------------    Entry Logic    -------------------- //
targetBuy = fiboBuy == 'Fibo 1' ? upper1 : fiboBuy == 'Fibo 2' ? upper2 : upper3
buy = low < targetBuy and high > targetBuy

// --------------------    User-Defined Exit Logic    -------------------- //
targetSell = fiboSell == 'Fibo 1' ? lower1 : fiboSell == 'Fibo 2' ? lower2 : lower3
sell = low < targetSell and high > targetSell

// # ========================================================================= #
// #                       // Strategy Management //
// # ========================================================================= #

// --------------------    Trade Execution Flags    -------------------- //
var bool buyExecuted = false
var bool sellExecuted = false

float labelOffset = ta.atr(14) * signalOffset

// --------------------    Buy Logic    -------------------- //
if buy and timeCondition 
    if useProfitPerc or useStopLossPerc
        strategy.entry("Buy", strategy.long, stop=(useStopLossPerc ? close * (1 - stopLossPerc / 100) : na), limit=(useProfitPerc ? close * (1 + takeProfitPerc / 100) : na))
    else
        strategy.entry("Buy", strategy.long)

    if showSignals and not buyExecuted
        buyExecuted := true  
        sellExecuted := false  
        label.new(bar_index, high - labelOffset, "◭", style=label.style_label_up, color = color.rgb(119, 0, 255, 20), textcolor=color.white)

// --------------------    Sell Logic    -------------------- //
if sell and timeCondition
    if useProfitPerc or useStopLossPerc
        strategy.entry("Sell", strategy.short, stop=(useStopLossPerc ? close * (1 + stopLossPerc / 100) : na), limit=(useProfitPerc ? close * (1 - takeProfitPerc / 100) : na))
    else
        strategy.entry("Sell", strategy.short)

    if showSignals and not sellExecuted
        sellExecuted := true 
        buyExecuted := false  
        label.new(bar_index, low + labelOffset, "⧩", style=label.style_label_down, color = color.rgb(255, 85, 0, 20), textcolor=color.white)



// # ========================================================================= #
// #                         // Plots and Charts //
// # ========================================================================= #

plot(sma, style = plot.style_line, title = 'Basis', color = color.new(color.orange, 0), linewidth = 2, offset = offset)

upp3 = plot(upper3, title = 'Upper 3', color = color.new(color.teal, 90), offset = offset)
upp2 = plot(upper2, title = 'Upper 2', color = color.new(color.teal, 60), offset = offset)
upp1 = plot(upper1, title = 'Upper 1', color = color.new(color.teal, 30), offset = offset)

low1 = plot(lower1, title = 'Lower 1', color = color.new(color.teal, 30), offset = offset)
low2 = plot(lower2, title = 'Lower 2', color = color.new(color.teal, 60), offset = offset)
low3 = plot(lower3, title = 'Lower 3', color = color.new(color.teal, 90), offset = offset)

fill(upp3, low3, title = 'Background', color = color.new(color.teal, 95))