রিসোর্স লোড হচ্ছে... লোডিং...

ডায়নামিক ট্রেডিং তত্ত্বঃ এক্সপোনেনশিয়াল মুভিং মিডিয়ার এবং ক্রমবর্ধমান ভলিউম পিরিয়ড ক্রসওভার কৌশল

লেখক:চাওঝাং, তারিখঃ 2025-01-06 11:45:38
ট্যাগঃইএমএসিভিপিএভিডব্লিউপিসময়সীমা

img

সারসংক্ষেপ

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

কৌশল নীতি

কৌশলটির মূল যুক্তি নিম্নলিখিত মূল হিসাবের উপর ভিত্তি করেঃ

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

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

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

কৌশলগত ঝুঁকি

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

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

  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⟡ 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)


সম্পর্কিত

আরো