गतिशील ट्रेडिंग सिद्धांत की घातीय मूविंग औसत और संचयी वॉल्यूम चक्र क्रॉसओवर रणनीति

EMA CVP AVWP TOD
निर्माण तिथि: 2025-01-06 11:45:38 अंत में संशोधित करें: 2025-01-06 11:45:38
कॉपी: 1 क्लिक्स: 346
1
ध्यान केंद्रित करना
1617
समर्थक

गतिशील ट्रेडिंग सिद्धांत की घातीय मूविंग औसत और संचयी वॉल्यूम चक्र क्रॉसओवर रणनीति

अवलोकन

यह रणनीति एक ट्रेडिंग प्रणाली है जो एक्सपोनेंशियल मूविंग एवरेज (ईएमए) और संचयी वॉल्यूम अवधि (सीवीपी) को जोड़ती है। यह मूल्य के घातीय चल औसत और संचयी मात्रा-भारित मूल्य के क्रॉसओवर का विश्लेषण करके बाजार के रुझान में महत्वपूर्ण मोड़ को पकड़ता है। इस रणनीति में अंतर्निहित समय फिल्टर हैं जो ट्रेडिंग के घंटों को सीमित कर सकते हैं और ट्रेडिंग अवधि के अंत में पोजीशनों को स्वचालित रूप से बंद करने में सहायता कर सकते हैं। यह रणनीति दो अलग-अलग निकास विधियां प्रदान करती है: रिवर्स क्रॉस एग्जिट और कस्टम सीवीपी एग्जिट, जो इसे अधिक लचीला और अनुकूलनीय बनाती है।

रणनीति सिद्धांत

रणनीति का मूल तर्क निम्नलिखित प्रमुख गणनाओं पर आधारित है:

  1. औसत मूल्य (AVWP) की गणना करें: उच्चतम, निम्नतम और समापन मूल्यों के अंकगणितीय माध्य को मात्रा से गुणा करें।
  2. संचयी मात्रा अवधि मान की गणना करें: निर्धारित अवधि में मात्रा-भारित मूल्य जोड़ें और संचयी मात्रा से विभाजित करें।
  3. समापन मूल्य के ईएमए और सीवीपी के ईएमए की अलग-अलग गणना करें।
  4. जब मूल्य ईएमए ऊपर की ओर सीवीपी ईएमए को पार करता है तो एक दीर्घ संकेत उत्पन्न होता है; जब मूल्य ईएमए नीचे की ओर सीवीपी ईएमए को पार करता है तो एक लघु संकेत उत्पन्न होता है।
  5. निकास संकेत एक रिवर्स क्रॉसओवर संकेत या कस्टम सीवीपी चक्र पर आधारित क्रॉसओवर संकेत हो सकता है।

रणनीतिक लाभ

  1. सिग्नल प्रणाली मजबूत है: यह बाजार के रुझान को अधिक सटीक रूप से निर्धारित करने के लिए मूल्य प्रवृत्तियों और ट्रेडिंग वॉल्यूम की जानकारी को जोड़ती है।
  2. मजबूत अनुकूलनशीलता: ईएमए अवधि और सीवीपी अवधि को विभिन्न बाजार वातावरणों के अनुकूल बनाने के लिए समायोजित किया जा सकता है।
  3. उत्तम जोखिम प्रबंधन: अंतर्निहित समय फिल्टर, उन अवधियों के दौरान परिचालन से बच सकते हैं जो व्यापार के लिए उपयुक्त नहीं हैं।
  4. लचीला निकास तंत्र: दो अलग-अलग निकास विधियां प्रदान की जाती हैं, और आप बाजार की विशेषताओं के अनुसार उपयुक्त निकास विधि चुन सकते हैं।
  5. अच्छा दृश्य: यह रणनीति सिग्नल मार्कर और ट्रेंड क्षेत्र भरने सहित एक स्पष्ट ग्राफिकल इंटरफ़ेस प्रदान करती है।

रणनीतिक जोखिम

  1. हिस्टैरिसिस जोखिम: ईएमए में स्वयं एक निश्चित हिस्टैरिसिस होता है, जिसके कारण प्रवेश और निकास के समय में थोड़ी देरी हो सकती है।
  2. अस्थिर बाजार का जोखिम: अस्थिर बाजार में झूठे संकेत उत्पन्न हो सकते हैं।
  3. पैरामीटर संवेदनशीलता: विभिन्न पैरामीटर संयोजनों के कारण रणनीति प्रदर्शन में बड़े अंतर हो सकते हैं।
  4. तरलता जोखिम: कम तरलता वाले बाज़ारों में, CVP गणनाएँ पर्याप्त सटीक नहीं हो सकती हैं।
  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)