وسائل لوڈ ہو رہے ہیں... لوڈنگ...

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

مصنف:چاؤ ژانگ، تاریخ: 2025-01-06 11:45:38
ٹیگز:ای ایم اےسی وی پیاے وی وی پیTOD

img

جائزہ

یہ حکمت عملی ایک تجارتی نظام ہے جو ایکسپونینشل موونگ ایوریج (ای ایم اے) اور مجموعی حجم مدت (سی وی پی) کو یکجا کرتا ہے۔ یہ قیمت ای ایم اے اور مجموعی حجم وزن والی قیمت کے مابین کراس اوور کا تجزیہ کرکے مارکیٹ کے رجحان کے الٹ پوائنٹس پر قبضہ کرتا ہے۔ اس حکمت عملی میں تجارتی سیشنوں کو محدود کرنے کے لئے ایک بلٹ ان ٹائم فلٹر شامل ہے اور تجارتی ادوار کے اختتام پر پوزیشنوں کی خودکار بندش کی حمایت کرتا ہے۔ یہ دو مختلف خارجی طریقوں کی پیش کش کرتا ہے: ریورس کراس اوور آؤٹ اور کسٹم سی وی پی آؤٹ ، جو مضبوط لچک اور موافقت فراہم کرتا ہے۔

حکمت عملی کا اصول

حکمت عملی کا بنیادی منطق مندرجہ ذیل اہم حساب کتاب پر مبنی ہے:

  1. اوسط قیمت کا حساب لگائیں (اے وی ڈبلیو پی): حجم کے ساتھ اعلی ، کم ، اور قریبی قیمتوں کا ریاضیاتی اوسط ضرب کریں۔
  2. مجموعی حجم مدت کی قیمت کا حساب لگائیں: مقررہ مدت کے دوران حجم کے لحاظ سے وزن شدہ قیمتوں کا مجموعہ کریں اور مجموعی حجم سے تقسیم کریں۔
  3. کلینڈر کی قیمت کا EMA اور CVP کا EMA الگ الگ حساب لگائیں۔
  4. جب قیمت EMA CVP s EMA سے تجاوز کرتی ہے تو طویل سگنل تیار کریں۔ جب قیمت EMA CVP s 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)


متعلقہ

مزید