یہ حکمت عملی متعدد وی ڈبلیو اے پی (بڑے پیمانے پر وزن والی اوسط قیمت) کی سطحوں پر مبنی ہے ، جس میں کھلی قیمت ، اعلی قیمت ، کم قیمت ، اور غیر معمولی طور پر زیادہ حجم والی موم بتیوں کی وی ڈبلیو اے پی شامل ہے۔ یہ حکمت عملی غیر معمولی حجم کی صورتحال پر بھی غور کرتے ہوئے ، وی ڈبلیو اے پی کی سطحوں کو سپورٹ اور مزاحمت کے طور پر استعمال کرتی ہے۔ جب قیمت وی ڈبلیو اے پی کی سطحوں کو توڑتی ہے اور کچھ شرائط کو پورا کرتی ہے تو ، یہ حکمت عملی تجارتی سگنل تیار کرتی ہے۔ اس کے علاوہ ، حکمت عملی باہر نکلنے کی شرط کے طور پر رفتار کی تبدیلیوں کا پتہ لگانے کے لئے آر ایس آئی اشارے کا استعمال کرتی ہے۔
اس حکمت عملی میں متعدد وی ڈبلیو اے پی کی سطح اور غیر معمولی حجم کا پتہ لگانے کا استعمال مختلف تجارتی سگنلز پیدا کرنے کے لئے کیا جاتا ہے۔ وی ڈبلیو اے پی سے قیمت کی متعلقہ پوزیشن ، اختتامی قیمت اور افتتاحی قیمت کے درمیان تعلقات ، اور آر ایس آئی اشارے پر غور کرکے ، حکمت عملی مارکیٹ میں اہم تبدیلیوں اور وقت پر باہر نکلنے کی تجارت کو پکڑنے کی کوشش کرتی ہے۔ تاہم ، اس حکمت عملی میں کچھ خطرات بھی ہیں ، جیسے مارکیٹ کے انتہائی حالات ، اوور ٹریڈنگ ، اور پیچھے رہ جانے والے باہر نکلنے کے سگنلز میں موافقت۔ حکمت عملی کو مزید بہتر بنانے کے لئے ، کوئی وی ڈبلیو اے پی کے حساب کتاب کے طریقہ کار کو بہتر بنانے ، غیر معمولی حجم کے لئے فیصلے کے معیار ، نقل مکانی کی اقدار کی ترتیب ، اور رسک مینجمنٹ کے اقدامات اور مزید اشارے کے مجموعے کو متعارف کرانے پر غور کرسکتا ہے۔ مجموعی طور پر ، یہ وی ڈبلیو اے پی پر مبنی تجارت کے لئے ایک اچھا نقطہ اغاز فراہم کرتا ہے لیکن پھر بھی مارکیٹ کے اصل حالات کی بنیاد پر اصلاح اور ایڈجسٹمنٹ کی ضرورت ہوتی ہے۔
/*backtest start: 2024-05-30 00:00:00 end: 2024-06-06 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("5 Anchored VWAP Strategy with Abnormally High Volume Candle", overlay=true) // Initialize VWAP variables var float vwap_open = na var float vwap_high = na var float vwap_low = na var float vwap_high_volume = na var float cum_v_open = 0 var float cum_v_high = 0 var float cum_v_low = 0 var float cum_v_high_volume = 0 var float cum_pv_open = 0 var float cum_pv_high = 0 var float cum_pv_low = 0 var float cum_pv_high_volume = 0 var float highest_volume = 0 // Initialize YTD high and low variables var float ytd_high = na var float ytd_low = na // Parameters for abnormal volume detection length = 20 volume_threshold = 2.0 // Displacement parameters displacement_percentage = 0.01 // 1% displacement // Calculate average volume avg_volume = ta.sma(volume, length) // Check if it's the first day of the year is_first_day_of_year = year(time) != year(time[1]) // Reset YTD high and low on the first day of the year if is_first_day_of_year ytd_high := high ytd_low := low // Update YTD high and low ytd_high := na(ytd_high) ? high : math.max(ytd_high, high) ytd_low := na(ytd_low) ? low : math.min(ytd_low, low) // Update cumulative variables for open VWAP cum_v_open += volume cum_pv_open += close * volume if cum_v_open != 0 vwap_open := cum_pv_open / cum_v_open // Update cumulative variables for high VWAP if high == ytd_high cum_v_high := 0 cum_pv_high := 0 cum_v_high += volume cum_pv_high += close * volume if cum_v_high != 0 vwap_high := cum_pv_high / cum_v_high // Update cumulative variables for low VWAP if low == ytd_low cum_v_low := 0 cum_pv_low := 0 cum_v_low += volume cum_pv_low += close * volume if cum_v_low != 0 vwap_low := cum_pv_low / cum_v_low // Check for new high-volume candle that is also abnormally high and reset cumulative variables for high-volume VWAP new_high_volume = false if volume > highest_volume and volume > volume_threshold * avg_volume highest_volume := volume cum_v_high_volume := 0 cum_pv_high_volume := 0 new_high_volume := true cum_v_high_volume += volume cum_pv_high_volume += close * volume if cum_v_high_volume != 0 vwap_high_volume := cum_pv_high_volume / cum_v_high_volume // Plot VWAPs plot(vwap_open, color=color.red, linewidth=2, title="VWAP Open") plot(vwap_high, color=color.green, linewidth=2, title="VWAP High") plot(vwap_low, color=color.blue, linewidth=2, title="VWAP Low") plot(vwap_high_volume, color=color.purple, linewidth=2, title="VWAP High Volume") // Plot a vertical line on the chart only when a new high-volume VWAP anchor occurs bgcolor(new_high_volume ? color.new(color.purple, 90) : na, offset=-1) // Calculate displacement amounts displacement_amount_open = vwap_open * displacement_percentage displacement_amount_high = vwap_high * displacement_percentage displacement_amount_low = vwap_low * displacement_percentage displacement_amount_high_volume = vwap_high_volume * displacement_percentage // Check for gaps on the opposite side of a VWAP gap_up_opposite_open = na(close[1]) ? false : (open > close[1] and open < vwap_open and close[1] > vwap_open) gap_down_opposite_open = na(close[1]) ? false : (open < close[1] and open > vwap_open and close[1] < vwap_open) gap_up_opposite_high = na(close[1]) ? false : (open > close[1] and open < vwap_high and close[1] > vwap_high) gap_down_opposite_high = na(close[1]) ? false : (open < close[1] and open > vwap_high and close[1] < vwap_high) gap_up_opposite_low = na(close[1]) ? false : (open > close[1] and open < vwap_low and close[1] > vwap_low) gap_down_opposite_low = na(close[1]) ? false : (open < close[1] and open > vwap_low and close[1] < vwap_low) gap_up_opposite_high_volume = na(close[1]) ? false : (open > close[1] and open < vwap_high_volume and close[1] > vwap_high_volume) gap_down_opposite_high_volume = na(close[1]) ? false : (open < close[1] and open > vwap_high_volume and close[1] < vwap_high_volume) // RSI calculation for momentum change detection rsi = ta.rsi(close, 14) long_exit_condition = rsi > 70 short_exit_condition = rsi < 30 // Debugging Plots plotshape(not gap_up_opposite_open and not gap_down_opposite_open and close > vwap_open and low < vwap_open - displacement_amount_open and close[1] < vwap_open, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small, title="Open Long Signal") plotshape(not gap_up_opposite_open and not gap_down_opposite_open and close < vwap_open and high > vwap_open + displacement_amount_open and close[1] > vwap_open, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small, title="Open Short Signal") plotshape(not gap_up_opposite_high and not gap_down_opposite_high and close > vwap_high and low < vwap_high - displacement_amount_high and close[1] < vwap_high, style=shape.triangledown, location=location.abovebar, color=color.blue, size=size.small, title="High Long Signal") plotshape(not gap_up_opposite_high and not gap_down_opposite_high and close < vwap_high and high > vwap_high + displacement_amount_high and close[1] > vwap_high, style=shape.triangleup, location=location.belowbar, color=color.orange, size=size.small, title="High Short Signal") plotshape(not gap_up_opposite_low and not gap_down_opposite_low and close > vwap_low and low < vwap_low - displacement_amount_low and close[1] < vwap_low, style=shape.triangledown, location=location.abovebar, color=color.purple, size=size.small, title="Low Long Signal") plotshape(not gap_up_opposite_low and not gap_down_opposite_low and close < vwap_low and high > vwap_low + displacement_amount_low and close[1] > vwap_low, style=shape.triangleup, location=location.belowbar, color=color.yellow, size=size.small, title="Low Short Signal") plotshape(not gap_up_opposite_high_volume and not gap_down_opposite_high_volume and close > vwap_high_volume and low < vwap_high_volume - displacement_amount_high_volume and close[1] < vwap_high_volume, style=shape.triangledown, location=location.abovebar, color=color.teal, size=size.small, title="High Volume Long Signal") plotshape(not gap_up_opposite_high_volume and not gap_down_opposite_high_volume and close < vwap_high_volume and high > vwap_high_volume + displacement_amount_high_volume and close[1] > vwap_high_volume, style=shape.triangleup, location=location.belowbar, color=color.fuchsia, size=size.small, title="High Volume Short Signal") // Trading signals based on VWAP support/resistance with displacement, no gaps on the opposite side, and bounce conditions if not gap_up_opposite_open and not gap_down_opposite_open if (close > vwap_open and low < vwap_open) if close > open strategy.entry("Long_Open_Wick", strategy.long, comment="Wick") else strategy.entry("Long_Open_Crossover", strategy.long, comment="Crossover") if (close < vwap_open and high > vwap_open) if close < open strategy.entry("Short_Open_Wick", strategy.short, comment="Wick") else strategy.entry("Short_Open_Crossover", strategy.short, comment="Crossover") if not gap_up_opposite_high and not gap_down_opposite_high if (close > vwap_high and low < vwap_high) if close > open strategy.entry("Long_High_Wick", strategy.long, comment="Wick") else strategy.entry("Long_High_Crossover", strategy.long, comment="Crossover") if (close < vwap_high and high > vwap_high) if close < open strategy.entry("Short_High_Wick", strategy.short, comment="Wick") else strategy.entry("Short_High_Crossover", strategy.short, comment="Crossover") if not gap_up_opposite_low and not gap_down_opposite_low if (close > vwap_low and low < vwap_low) if close > open strategy.entry("Long_Low_Wick", strategy.long, comment="Wick") else strategy.entry("Long_Low_Crossover", strategy.long, comment="Crossover") if (close < vwap_low and high > vwap_low) if close < open strategy.entry("Short_Low_Wick", strategy.short, comment="Wick") else strategy.entry("Short_Low_Crossover", strategy.short, comment="Crossover") if not gap_up_opposite_high_volume and not gap_down_opposite_high_volume if (close > vwap_high_volume and low < vwap_high_volume) if close > open strategy.entry("Long_High_Volume_Wick", strategy.long, comment="Wick") else strategy.entry("Long_High_Volume_Crossover", strategy.long, comment="Crossover") if (close < vwap_high_volume and high > vwap_high_volume) if close < open strategy.entry("Short_High_Volume_Wick", strategy.short, comment="Wick") else strategy.entry("Short_High_Volume_Crossover", strategy.short, comment="Crossover") // Exit trades based on RSI momentum change if strategy.position_size > 0 and long_exit_condition strategy.close("Long_Open_Wick") strategy.close("Long_Open_Crossover") strategy.close("Long_High_Wick") strategy.close("Long_High_Crossover") strategy.close("Long_Low_Wick") strategy.close("Long_Low_Crossover") strategy.close("Long_High_Volume_Wick") strategy.close("Long_High_Volume_Crossover") if strategy.position_size < 0 and short_exit_condition strategy.close("Short_Open_Wick") strategy.close("Short_Open_Crossover") strategy.close("Short_High_Wick") strategy.close("Short_High_Crossover") strategy.close("Short_Low_Wick") strategy.close("Short_Low_Crossover") strategy.close("Short_High_Volume_Wick") strategy.close("Short_High_Volume_Crossover")