संसाधन लोड हो रहा है... लोड करना...

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

लेखक:चाओझांग, दिनांकः 2025-01-06 11:45:38
टैगःईएमएसीवीपीAVWPसमय सीमा

img

अवलोकन

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

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

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

  1. औसत मूल्य की गणना करें (AVWP): उच्च, निम्न और बंद कीमतों के अंकगणितीय औसत को मात्रा से गुणा करें।
  2. संचयी मात्रा अवधि मूल्य की गणना करें: निर्धारित अवधि के दौरान वॉल्यूम भारित कीमतों का योग करें और संचयी मात्रा से विभाजित करें।
  3. समापन मूल्य का ईएमए और सीवीपी का ईएमए अलग से गणना करें।
  4. जब मूल्य ईएमए सीवीपी के ईएमए से ऊपर जाता है तो लंबे संकेत उत्पन्न करें; जब मूल्य ईएमए सीवीपी के ईएमए से नीचे जाता है तो छोटे संकेत उत्पन्न करें।
  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)


संबंधित

अधिक