یہ حکمت عملی دو حجم وزن والے چلتے ہوئے اوسط کو تیز اور سست لائنوں کے طور پر شمار کرتی ہے۔ یہ دونوں لائنوں کے درمیان فرق کی بنیاد پر رجحان کی سمت کا تعین کرتی ہے اور اس کے مطابق لمبی یا مختصر پوزیشنیں لیتی ہے۔ یہ حکمت عملی مارکیٹ کے رجحانات کو ٹریک کرنے میں آسان اور موثر ہے۔
صارف کی طرف سے متعین تیز رفتار اور سست رفتار ادوار کی بنیاد پر حجم وزن والے چلتے ہوئے اوسط کا استعمال کرتے ہوئے تیز رفتار اور سست رفتار لائنوں کا حساب لگائیں۔
تیز اور سست لائنوں کے درمیان فرق کا حساب لگائیں۔
رجحان کی سمت کا تعین کریں۔ سست لائن کے اوپر تیز لائن کا کراس اوور بڑھتی ہوئی رجحان کی نشاندہی کرتا ہے اور نیچے کراس اوور نیچے کی رجحان کی نشاندہی کرتا ہے۔
لمبی / مختصر سگنل جاری کریں۔ جب تیز لائن سست لائن سے تجاوز کرتی ہے تو لمبی حد تک جائیں۔ جب تیز لائن سست لائن سے تجاوز کرتی ہے تو مختصر ہوجائیں۔
صارف کی طرف سے مقرر مقررہ فی صد یا متحرک ATR کی بنیاد پر سٹاپ نقصان مقرر کریں.
باہر نکلنے کے قواعد۔ اگر سٹاپ نقصان کو نشانہ بنایا جاتا ہے یا ریورس سگنل ہوتا ہے تو پوزیشن بند کریں۔
رجحانات کی نشاندہی کرنے اور جھوٹے بریک آؤٹ سے بچنے کے لئے مقداری اشارے کا استعمال کرتا ہے۔
تیز اور سست لائن کا امتزاج مارکیٹ کے شور کو فلٹر کرتا ہے اور اوور ٹریڈنگ سے بچتا ہے۔
سٹاپ نقصان مؤثر طریقے سے نیچے کی طرف خطرے کو کنٹرول.
سادہ اور سمجھنے میں آسان منطق۔
مختلف مصنوعات اور وقت کے فریم کے لئے حسب ضرورت پیرامیٹرز.
پیرامیٹرز کی غلط ترتیب سے زیادہ تجارت یا نظر انداز ہونے والے رجحانات پیدا ہوسکتے ہیں۔
فکسڈ سٹاپ نقصان مارکیٹ کے بدلتے حالات کے لیے بہت سخت ہو سکتا ہے۔
حجم اور قیمت کے تعلقات میں تبدیلیوں کا اثر اثر پڑ سکتا ہے.
خطرہ 1 پیرامیٹر کی اصلاح کے ذریعے کم کیا جا سکتا ہے.
خطرہ 2 کو متحرک اے ٹی آر اسٹاپ نقصان کے ذریعے حل کیا جاسکتا ہے۔
خطرہ 3 حجم تبدیلیوں کی نگرانی کی ضرورت ہے.
تیز رفتار اور سست لائن پیرامیٹرز کے مختلف مجموعے کی جانچ کریں.
حجم قیمت کے دیگر اشارے جیسے OBV، ولیمز ٪ R وغیرہ کی کوشش کریں.
اتار چڑھاؤ پر مبنی رکاوٹیں شامل کریں.
دوسرے اشارے کے ساتھ مجموعہ کا اندازہ کریں.
مختلف تجارتی آلات میں کارکردگی کا تجربہ کریں۔
اس حکمت عملی میں تیز اور سست مقداری حرکت پذیر اوسط کا استعمال ہوتا ہے تاکہ سادہ منطق کے ساتھ رجحانات کو ٹریک کیا جاسکے۔ پیرامیٹرز کو بہتر بنایا جاسکتا ہے اور خطرے کو کنٹرول کرنا بند ہوجاتا ہے۔ اشارے کو جوڑنے پر مزید تشخیص سے تاثیر میں اضافہ ہوسکتا ہے۔
/*backtest start: 2023-08-18 00:00:00 end: 2023-09-17 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("EVWMA 6HR", overlay=false, precision=2, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075) // Credit to QuantNomad for the main idea behind this code /////////////// Time Frame /////////////// _1 = input(false, "════════ Test Period ═══════") testStartYear = input(2017, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0) testStopYear = input(2019, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(31, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0) testPeriod() => true ///////////// EVWMA ///////////// _2 = input(false, "════════ EVMA ═══════") fast_sum_length = input(5, title = "Fast Sum Length", type = input.integer) slow_sum_length = input(11, title = "Slow Sum Length", type = input.integer) fast_vol_period = sum(volume, fast_sum_length) slow_vol_period = sum(volume, slow_sum_length) fast_evwma = 0.0 fast_evwma := ((fast_vol_period - volume) * nz(fast_evwma[1], close) + volume * close) / (fast_vol_period) slow_evwma = 0.0 slow_evwma := ((slow_vol_period - volume) * nz(slow_evwma[1], close) + volume * close) / (slow_vol_period) diff = fast_evwma - slow_evwma /////////////// Strategy /////////////// long = fast_evwma > slow_evwma short = fast_evwma < slow_evwma last_long = 0.0 last_short = 0.0 last_long := long ? time : nz(last_long[1]) last_short := short ? time : nz(last_short[1]) long_signal = crossover(last_long, last_short) short_signal = crossover(last_short, last_long) last_open_long_signal = 0.0 last_open_short_signal = 0.0 last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1]) last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1]) last_long_signal = 0.0 last_short_signal = 0.0 last_long_signal := long_signal ? time : nz(last_long_signal[1]) last_short_signal := short_signal ? time : nz(last_short_signal[1]) in_long_signal = last_long_signal > last_short_signal in_short_signal = last_short_signal > last_long_signal last_high = 0.0 last_low = 0.0 last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1]) last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1]) since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) /////////////// Dynamic ATR Stop Losses /////////////// _4 = input(false, "════════ Stop Loss ═══════") SL_type = input("Fixed", options=["Fixed", "ATR Derived"], title="Stop Loss Type") sl_inp = input(9.0, title='Fixed Stop Loss %') / 100 atrLkb = input(20, minval=1, title='ATR Stop Period') atrMult = input(1.5, step=0.25, title='ATR Stop Multiplier') atr1 = atr(atrLkb) longStop1 = 0.0 longStop1 := short_signal ? na : long_signal ? close - (atr1 * atrMult) : longStop1[1] shortStop1 = 0.0 shortStop1 := long_signal ? na : short_signal ? close + (atr1 * atrMult) : shortStop1[1] slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na slShort = strategy.position_avg_price * (1 + sl_inp) long_sl = in_long_signal ? slLong : na short_sl = in_short_signal ? slShort : na _5 = input(false, "══════ Longs or Shorts ═════") useLongs = input(true, title="Use Longs") useShorts = input(true, title="Use Shorts") /////////////// Execution /////////////// if testPeriod() if useLongs strategy.entry("L", strategy.long, when=long) strategy.exit("L SL", "L", stop = SL_type == "Fixed" ? long_sl : longStop1, when=since_longEntry > -1) if useShorts strategy.exit("S SL", "S", stop = SL_type == "Fixed" ? short_sl : shortStop1, when=since_shortEntry > -1) strategy.entry("S", strategy.short, when=short) if not useShorts strategy.close("L", when=short) if not useLongs strategy.close("S", when=long) /////////////// Plotting /////////////// bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=30) p1 = plot(diff, title = "Delta", color = long ? color.lime : short ? color.red : na, transp=0) p2 = plot(0, color = color.white) fill(p1, p2, color = long ? color.lime : short ? color.red : na, transp=60)