ڈائنامک ٹریڈنگ تھیوری کی ایکسپونیشنل موونگ ایوریج اور مجموعی حجم سائیکل کراس اوور حکمت عملی

EMA CVP AVWP TOD
تخلیق کی تاریخ: 2025-01-06 11:45:38 آخر میں ترمیم کریں: 2025-01-06 11:45:38
کاپی: 0 کلکس کی تعداد: 62
1
پر توجہ دیں
1166
پیروکار

ڈائنامک ٹریڈنگ تھیوری کی ایکسپونیشنل موونگ ایوریج اور مجموعی حجم سائیکل کراس اوور حکمت عملی

جائزہ

یہ حکمت عملی ایک تجارتی نظام ہے جو ایکسپونینشل موونگ ایوریج (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. Hysteresis کا خطرہ: EMA میں خود ایک مخصوص hysteresis ہے، جو داخلے اور باہر نکلنے کے وقت میں معمولی تاخیر کا سبب بن سکتا ہے۔
  2. اتار چڑھاؤ والے بازار کا خطرہ: ایک طرف اور اتار چڑھاؤ والے بازار میں غلط سگنلز پیدا ہو سکتے ہیں۔
  3. پیرامیٹر کی حساسیت: مختلف پیرامیٹر کے امتزاج حکمت عملی کی کارکردگی میں بڑے فرق کا باعث بن سکتے ہیں۔
  4. لیکویڈیٹی کا خطرہ: کم لیکویڈیٹی مارکیٹوں میں، سی وی پی کے حسابات کافی حد تک درست نہیں ہوسکتے ہیں۔
  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)