ডায়নামিক ট্রেডিং তত্ত্বের সূচকীয় চলমান গড় এবং ক্রমবর্ধমান ভলিউম চক্র ক্রসওভার কৌশল

EMA CVP AVWP TOD
সৃষ্টির তারিখ: 2025-01-06 11:45:38 অবশেষে সংশোধন করুন: 2025-01-06 11:45:38
অনুলিপি: 1 ক্লিকের সংখ্যা: 346
1
ফোকাস
1617
অনুসারী

ডায়নামিক ট্রেডিং তত্ত্বের সূচকীয় চলমান গড় এবং ক্রমবর্ধমান ভলিউম চক্র ক্রসওভার কৌশল

ওভারভিউ

এই কৌশলটি একটি ট্রেডিং সিস্টেম যা এক্সপোনেনশিয়াল মুভিং এভারেজ (EMA) এবং ক্রমবর্ধমান ভলিউম পিরিয়ড (CVP) একত্রিত করে। এটি ক্রমবর্ধমান ভলিউম-ওয়েটেড প্রাইসের সাথে মূল্যের একটি সূচকীয় চলমান গড়ের ছেদ বিশ্লেষণ করে বাজারের প্রবণতার টার্নিং পয়েন্ট ক্যাপচার করে। কৌশলটিতে একটি বিল্ট-ইন টাইম ফিল্টার রয়েছে যা ট্রেডিং পিরিয়ডকে সীমিত করতে পারে এবং ট্রেডিং পিরিয়ডের শেষে পজিশনের স্বয়ংক্রিয় সমাপ্তি সমর্থন করে। কৌশল দুটি ভিন্ন প্রস্থান পদ্ধতি প্রদান করে: বিপরীত ক্রসওভার প্রস্থান এবং কাস্টমাইজড CVP প্রস্থান, এটি অত্যন্ত নমনীয় এবং অভিযোজনযোগ্য করে তোলে।

কৌশল নীতি

কৌশলটির মূল যুক্তি নিম্নলিখিত মূল গণনার উপর ভিত্তি করে:

  1. গড় মূল্য গণনা করুন (AVWP): উচ্চ, নিম্ন এবং সমাপনী মূল্যের গাণিতিক গড়কে ভলিউম দ্বারা গুণ করুন।
  2. ক্রমবর্ধমান ভলিউম পিরিয়ড মান গণনা করুন: সেট সময়ের মধ্যে ভলিউম-ওয়েটেড মূল্য জমা করুন এবং ক্রমবর্ধমান ভলিউম দ্বারা ভাগ করুন।
  3. সমাপনী মূল্যের EMA এবং CVP-এর EMA যথাক্রমে গণনা করুন।
  4. যখন মূল্য EMA CVP এর EMA অতিক্রম করে তখন একটি ছোট সংকেত তৈরি হয় যখন মূল্য EMA CVP-এর EMA অতিক্রম করে।
  5. প্রস্থান সংকেত একটি বিপরীত ক্রসওভার সংকেত বা একটি কাস্টম CVP সময়ের উপর ভিত্তি করে একটি ক্রসওভার সংকেত হতে পারে।

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

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

কৌশলগত ঝুঁকি

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

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

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

সারসংক্ষেপ

এটি সম্পূর্ণ কাঠামো এবং স্পষ্ট যুক্তি সহ একটি পরিমাণগত ট্রেডিং কৌশল। EMA এবং CVP-এর সুবিধাগুলিকে একত্রিত করার মাধ্যমে, একটি ট্রেডিং সিস্টেম তৈরি করা হয় যা উভয় প্রবণতা ক্যাপচার করতে পারে এবং ঝুঁকি নিয়ন্ত্রণে ফোকাস করতে পারে। কৌশলটি অত্যন্ত কাস্টমাইজযোগ্য এবং বিভিন্ন বাজার পরিবেশে ব্যবহারের জন্য উপযুক্ত। অপ্টিমাইজেশন পরামর্শ বাস্তবায়নের মাধ্যমে, কৌশলটির কর্মক্ষমতা আরও উন্নতির জন্য জায়গা রয়েছে।

কৌশল সোর্স কোড
/*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⟡ EMA/CVP", title="[Sapphire] EMA/CVP Strategy", initial_capital= 50000, currency= currency.USD,default_qty_value = 1,commission_type= strategy.commission.cash_per_contract,overlay= true )

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

// --------------------    Main Settings    -------------------- //
groupEMACVP = "EMA / Cumulative Volume Period"
tradeDirection = input.string(title='Trade Direction', defval='LONG', options=['LONG', 'SHORT'], group=groupEMACVP)
emaLength = input.int(25, title='EMA Length', minval=1, maxval=200, group=groupEMACVP)
cumulativePeriod = input.int(100, title='Cumulative Volume Period', minval=1, maxval=200, step=5, group=groupEMACVP)
exitType = input.string(title="Exit Type", defval="Crossover", options=["Crossover", "Custom CVP" ], group=groupEMACVP)
cumulativePeriodForClose = input.int(50, title='Cumulative Period for Close Signal', minval=1, maxval=200, step=5, group=groupEMACVP)
showSignals = input.bool(true, title="Show Signals", group=groupEMACVP)
signalOffset = input.int(5, title="Signal Vertical Offset", group=groupEMACVP)

// --------------------    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 //
// # ========================================================================= #

avgPrice = (high + low + close) / 3
avgPriceVolume = avgPrice * volume

cumulPriceVolume = math.sum(avgPriceVolume, cumulativePeriod)
cumulVolume = math.sum(volume, cumulativePeriod)
cumValue = cumulPriceVolume / cumulVolume

cumulPriceVolumeClose = math.sum(avgPriceVolume, cumulativePeriodForClose)
cumulVolumeClose = math.sum(volume, cumulativePeriodForClose)
cumValueClose = cumulPriceVolumeClose / cumulVolumeClose

emaVal = ta.ema(close, emaLength)
emaCumValue = ta.ema(cumValue, emaLength)

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

// Strategy Entry Conditions
longEntryCondition = ta.crossover(emaVal, emaCumValue) and tradeDirection == 'LONG'
shortEntryCondition = ta.crossunder(emaVal, emaCumValue) and tradeDirection == 'SHORT'

// User-Defined Exit Conditions
longExitCondition = false
shortExitCondition = false

if exitType == "Crossover"
    longExitCondition := ta.crossunder(emaVal, emaCumValue)
    shortExitCondition := ta.crossover(emaVal, emaCumValue)

if exitType == "Custom CVP"
    emaCumValueClose = ta.ema(cumValueClose, emaLength)
    longExitCondition := ta.crossunder(emaVal, emaCumValueClose)
    shortExitCondition := ta.crossover(emaVal, emaCumValueClose)

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

// Strategy Execution
if longEntryCondition and timeCondition
    strategy.entry('Long', strategy.long)
    label.new(bar_index, high - signalOffset, "◭", style=label.style_label_up, color = color.rgb(119, 0, 255, 20), textcolor=color.white)

if shortEntryCondition and timeCondition
    strategy.entry('Short', strategy.short)
    label.new(bar_index, low + signalOffset, "⧩", style=label.style_label_down, color = color.rgb(255, 85, 0, 20), textcolor=color.white)

if strategy.position_size > 0 and longExitCondition
    strategy.close('Long')

if strategy.position_size < 0 and shortExitCondition
    strategy.close('Short')

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

plot(emaVal, title='EMA', color=color.new(color.green, 25))
plot(emaCumValue, title='Cumulative EMA', color=color.new(color.purple, 35))
fill(plot(emaVal), plot(emaCumValue), color=emaVal > emaCumValue ? #008ee6 : #d436a285, title='EMA and Cumulative Area', transp=70)