ڈبل موونگ ایوریج ریورسشن حکمت عملی ایک عام قلیل مدتی اوسط ریورسشن ٹریڈنگ حکمت عملی ہے۔ حکمت عملی مختلف پیرامیٹرز کی ترتیبات کے ساتھ دو موونگ ایوریجز کے ذریعہ تجارتی سگنل تیار کرتی ہے۔ اس کا مقصد جب رجحان کی تبدیلی ہوتی ہے تو منافع حاصل کرنا ہے۔
یہ حکمت عملی تجارتی سگنل پیدا کرنے کے لئے دو حرکت پذیر اوسط استعمال کرتی ہے۔ پہلا ایم اے ما اوپننگ رجحان کی سمت کا تعین کرنے کے لئے استعمال کیا جاتا ہے۔ دوسرا ایم اے میکوسنگ تجارتی سگنل پیدا کرنے کے لئے استعمال کیا جاتا ہے۔
جب ما اوپننگ اوپر جاتا ہے تو ، یہ اس بات کی نشاندہی کرتا ہے کہ موجودہ مارکیٹ ایک اپ ٹرینڈ میں ہے۔ جب ما اوپننگ نیچے جاتا ہے تو ، یہ اس بات کی نشاندہی کرتا ہے کہ موجودہ مارکیٹ ایک ڈاؤن ٹرینڈ میں ہے۔ میکلوسینگ کو 1 سے زیادہ کے ایک گتانک سے ضرب دیا جاتا ہے تاکہ اسے ابتدائی الٹ سگنل پیدا کرنے کے لئے زیادہ حساس بنایا جاسکے۔
خاص طور پر ، جب maopening اوپر جاتا ہے اور maclosing maopening سے نیچے عبور کرتا ہے تو ، اس سے رجحان کی تبدیلی ظاہر ہوتی ہے۔ حکمت عملی مختصر پوزیشن کھولے گی۔ جب maopening نیچے جاتا ہے اور maclosing maopening سے اوپر عبور کرتا ہے تو ، اس سے رجحان کی تبدیلی ظاہر ہوتی ہے۔ حکمت عملی طویل پوزیشن کھولے گی۔
حکمت عملی کے پیرامیٹرز میں ایم اے کی قسم ، لمبائی ، ڈیٹا ماخذ وغیرہ شامل ہیں۔ ان پیرامیٹرز کو ایڈجسٹ کرکے تجارتی کارکردگی کو بہتر بنایا جاسکتا ہے۔ کچھ تشکیل پذیر اختیارات بھی ہیں جیسے انٹری رول ، اسٹاپ نقصان وغیرہ۔
ڈبل ایم اے ریورس اسٹریٹیجی کے اہم فوائد یہ ہیں:
مختصر مدت کی تجارت کے لئے موزوں ، چھوٹا ڈراؤون۔ تیز رفتار حرکت پذیر اوسط کم ڈراؤون کے ساتھ مختصر مدت کی تبدیلیوں کو تیزی سے پکڑ سکتے ہیں۔
لاگو کرنے میں آسان اور سمجھنے میں آسان۔ دو ایم اے کے کراس اوور سے واضح تجارتی سگنل پیدا ہوتے ہیں۔
متعدد سایڈست پیرامیٹرز کے ساتھ انتہائی ترتیب دینے والا۔ دو ایم اے اور گتانک کے پیرامیٹرز کو بہتر بنایا جاسکتا ہے۔
واضح منطق کے بہاؤ کے ساتھ خودکار کرنا آسان ہے۔ سادہ منطق اور اعلی تعدد کی تجارت اسے خودکار تجارت کے لئے بہت موزوں بناتی ہے۔
سٹاپ نقصان کے طریقہ کار کے ساتھ کنٹرول خطرے. منتقل سٹاپ نقصان یا قدر سٹاپ نقصان ایک تجارت کے نقصان کو محدود کر سکتے ہیں.
اس حکمت عملی کے کچھ خطرات بھی ہیں:
ایم اے کراس اوور سگنلز کی تاخیر۔ ایم اے خود قیمت سے پیچھے رہ جاتے ہیں۔ کراس اوور کچھ عرصے تک رجحان کے الٹ جانے کے بعد ہوسکتا ہے۔
وِپسا تجارت کا خطرہ۔ الٹا رجحان تیزی سے دوبارہ الٹا ہوسکتا ہے ، جس سے لگاتار نقصانات کا سبب بنتا ہے۔
ڈراؤونگ اب بھی موجود ہے۔ اگرچہ اسٹاپ نقصان واحد نقصان کو محدود کرتا ہے ، لیکن مسلسل اسٹاپ نقصان اب بھی بڑے ڈراؤونگ کا باعث بن سکتا ہے۔
اوور فٹنگ کا خطرہ۔ پیرامیٹر کی زیادہ سے زیادہ اصلاح سے براہ راست تجارت میں اوور فٹنگ اور خراب کارکردگی کا باعث بن سکتی ہے۔
حل میں شامل ہیں:
تیز رفتار ایم اے تلاش کرنے کے لئے پیرامیٹرز کو بہتر بنائیں.
فلٹرز شامل کریں، جیسے حجم اور اتار چڑھاؤ کے اشارے، وپسا تجارت سے بچنے کے لئے.
مسلسل سٹاپ نقصان کا امکان کم کرنے کے لئے سٹاپ نقصان کی پوزیشن کو ایڈجسٹ کریں.
پیرامیٹر سیٹوں کی مضبوطی کا ٹیسٹ تاکہ زیادہ فٹنگ کے خطرات کا اندازہ لگایا جاسکے۔
اسٹریٹیجی کو مندرجہ ذیل پہلوؤں میں مزید بہتر بنایا جاسکتا ہے:
مختلف قسم کے ایم اے کا تجربہ کریں تاکہ زیادہ حساس تلاش کریں، جیسے کاما، زیلیما وغیرہ۔
زیادہ سے زیادہ مجموعہ تلاش کرنے کے لئے ایم اے لمبائی کو بہتر بنائیں۔ عام طور پر کم مدت میں بہتر کارکردگی ہوتی ہے۔
مختلف اعداد و شمار کے ذرائع کی جانچ کریں، جیسے قریب، درمیانی قیمت، عام قیمت وغیرہ.
غیر مناسب الٹ سگنل سے بچنے کے لئے رجحان فلٹر شامل کریں، جیسے ڈونچیان چینل.
تصدیق کے لیے دیگر اشارے شامل کریں، جیسے MACD، OBV وغیرہ۔
خطرے کے انتظام کے طریقہ کار کو بہتر بنائیں ، جیسے اسٹاپ نقصان ، زیادہ سے زیادہ اکاؤنٹ نقصان وغیرہ کو منتقل کرنا۔
بہترین اثاثہ جات کی تقسیم تلاش کرنے کے لئے پورٹ فولیو کی اصلاح.
زیادہ فٹنگ کے خطرات کا اندازہ کرنے کے لئے پیرامیٹرز کی استحکام کا ٹیسٹ۔
ڈبل ایم اے ریورس ایک سادہ اور عملی قلیل مدتی تجارتی حکمت عملی ہے۔ یہ مقداری تجارت کے ساتھ قلیل مدتی الٹ پھیروں کو پکڑنے کے لئے موزوں ہے۔ تاہم ، پسماندہ اور وِپسا تجارت جیسے خطرات موجود ہیں۔ حکمت عملی کو پیرامیٹرز کو بہتر بنانے ، فلٹرز شامل کرنے ، رسک کنٹرول وغیرہ کو بڑھانے سے بہتر بنایا جاسکتا ہے تاکہ اچھی حقیقی تجارتی کارکردگی کے ساتھ مستحکم اور موثر حکمت عملی تیار کی جاسکے۔
/*backtest start: 2023-10-17 00:00:00 end: 2023-11-16 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title = "hamster-bot MRS 2", overlay = true, default_qty_type = strategy.percent_of_equity, initial_capital = 100, default_qty_value = 100, pyramiding = 9, commission_value = 0.045, backtest_fill_limits_assumption = 1) info_options = "Options" on_close = input(false, title = "Entry on close", inline=info_options, group=info_options) OFFS = input.int(0, minval = 0, maxval = 1, title = "| Offset View", inline=info_options, group=info_options) trade_offset = input.int(0, minval = 0, maxval = 1, title = "Trade", inline=info_options, group=info_options) use_kalman_filter = input.bool(false, title="Use Kalman filter", group=info_options) //MA Opening info_opening = "MA Opening" maopeningtyp = input.string("SMA", title="Type", options=["SMA", "EMA", "TEMA", "DEMA", "ZLEMA", "WMA", "Hma", "Thma", "Ehma", "H", "L", "DMA"], title = "", inline=info_opening, group=info_opening) maopeningsrc = input.source(ohlc4, title = "", inline=info_opening, group=info_opening) maopeninglen = input.int(3, minval = 1, maxval = 200, title = "", inline=info_opening, group=info_opening) //MA Closing info_closing = "MA Closing" maclosingtyp = input.string("SMA", title="Type", options=["SMA", "EMA", "TEMA", "DEMA", "ZLEMA", "WMA", "Hma", "Thma", "Ehma", "H", "L", "DMA"], title = "", inline=info_closing, group=info_closing) maclosingsrc = input.source(ohlc4, title = "", inline=info_closing, group=info_closing) maclosinglen = input.int(3, minval = 1, maxval = 200, title = "", inline=info_closing, group=info_closing) maclosingmul = input.float(1, step = 0.005, title = "mul", inline=info_closing, group=info_closing) long1on = input(true, title = "", inline = "long1") long1shift = input.float(0.96, step = 0.005, title = "Long", inline = "long1") long1lot = input.int(10, minval = 0, maxval = 10000, step = 10, title = "Lot 1", inline = "long1") short1on = input(true, title = "", inline = "short1") short1shift = input.float(1.04, step = 0.005, title = "short", inline = "short1") short1lot = input.int(10, minval = 0, maxval = 10000, step = 10, title = "Lot 1", inline = "short1") startTime = input(timestamp("01 Jan 2010 00:00 +0000"), "Start date", inline = "period") finalTime = input(timestamp("31 Dec 2030 23:59 +0000"), "Final date", inline = "period") HMA(_src, _length) => ta.wma(2 * ta.wma(_src, _length / 2) - ta.wma(_src, _length), math.round(math.sqrt(_length))) EHMA(_src, _length) => ta.ema(2 * ta.ema(_src, _length / 2) - ta.ema(_src, _length), math.round(math.sqrt(_length))) THMA(_src, _length) => ta.wma(ta.wma(_src,_length / 3) * 3 - ta.wma(_src, _length / 2) - ta.wma(_src, _length), _length) tema(sec, length)=> tema1= ta.ema(sec, length) tema2= ta.ema(tema1, length) tema3= ta.ema(tema2, length) tema_r = 3*tema1-3*tema2+tema3 donchian(len) => math.avg(ta.lowest(len), ta.highest(len)) ATR_func(_src, _len)=> atrLow = low - ta.atr(_len) trailAtrLow = atrLow trailAtrLow := na(trailAtrLow[1]) ? trailAtrLow : atrLow >= trailAtrLow[1] ? atrLow : trailAtrLow[1] supportHit = _src <= trailAtrLow trailAtrLow := supportHit ? atrLow : trailAtrLow trailAtrLow f_dema(src, len)=> EMA1 = ta.ema(src, len) EMA2 = ta.ema(EMA1, len) DEMA = (2*EMA1)-EMA2 f_zlema(src, period) => lag = math.round((period - 1) / 2) ema_data = src + (src - src[lag]) zl= ta.ema(ema_data, period) f_kalman_filter(src) => float value1= na float value2 = na value1 := 0.2 * (src - src[1]) + 0.8 * nz(value1[1]) value2 := 0.1 * (ta.tr) + 0.8 * nz(value2[1]) lambda = math.abs(value1 / value2) alpha = (-math.pow(lambda, 2) + math.sqrt(math.pow(lambda, 4) + 16 * math.pow(lambda, 2)))/8 value3 = float(na) value3 := alpha * src + (1 - alpha) * nz(value3[1]) //SWITCH ma_func(modeSwitch, src, len, use_k_f=true) => modeSwitch == "SMA" ? use_kalman_filter and use_k_f ? f_kalman_filter(ta.sma(src, len)) : ta.sma(src, len) : modeSwitch == "RMA" ? use_kalman_filter and use_k_f ? f_kalman_filter(ta.rma(src, len)) : ta.rma(src, len) : modeSwitch == "EMA" ? use_kalman_filter and use_k_f ? f_kalman_filter(ta.ema(src, len)) : ta.ema(src, len) : modeSwitch == "TEMA" ? use_kalman_filter and use_k_f ? f_kalman_filter(tema(src, len)) : tema(src, len): modeSwitch == "DEMA" ? use_kalman_filter and use_k_f ? f_kalman_filter(f_dema(src, len)) : f_dema(src, len): modeSwitch == "ZLEMA" ? use_kalman_filter and use_k_f ? f_kalman_filter(f_zlema(src, len)) : f_zlema(src, len): modeSwitch == "WMA" ? use_kalman_filter and use_k_f ? f_kalman_filter(ta.wma(src, len)) : ta.wma(src, len): modeSwitch == "VWMA" ? use_kalman_filter and use_k_f ? f_kalman_filter(ta.vwma(src, len)) : ta.vwma(src, len): modeSwitch == "Hma" ? use_kalman_filter and use_k_f ? f_kalman_filter(HMA(src, len)) : HMA(src, len): modeSwitch == "Ehma" ? use_kalman_filter and use_k_f ? f_kalman_filter(EHMA(src, len)) : EHMA(src, len): modeSwitch == "Thma" ? use_kalman_filter and use_k_f ? f_kalman_filter(THMA(src, len/2)) : THMA(src, len/2): modeSwitch == "ATR" ? use_kalman_filter and use_k_f ? f_kalman_filter(ATR_func(src, len)): ATR_func(src, len) : modeSwitch == "L" ? use_kalman_filter and use_k_f ? f_kalman_filter(ta.lowest(len)): ta.lowest(len) : modeSwitch == "H" ? use_kalman_filter and use_k_f ? f_kalman_filter(ta.highest(len)): ta.highest(len) : modeSwitch == "DMA" ? donchian(len) : na //Var sum = 0.0 maopening = 0.0 maclosing = 0.0 os = maopeningsrc cs = maclosingsrc pos = strategy.position_size p = 0.0 p := pos == 0 ? (strategy.equity / 100) / close : p[1] truetime = true loss = 0.0 maxloss = 0.0 equity = 0.0 //MA Opening maopening := ma_func(maopeningtyp, maopeningsrc, maopeninglen) //MA Closing maclosing := ma_func(maclosingtyp, maclosingsrc, maclosinglen) * maclosingmul long1 = long1on == false ? 0 : long1shift == 0 ? 0 : long1lot == 0 ? 0 : maopening == 0 ? 0 : maopening * long1shift short1 = short1on == false ? 0 : short1shift == 0 ? 0 : short1lot == 0 ? 0 : maopening == 0 ? 0 : maopening * short1shift //Colors maopeningcol = maopening == 0 ? na : color.blue maclosingcol = maclosing == 0 ? na : color.fuchsia long1col = long1 == 0 ? na : color.green short1col = short1 == 0 ? na : color.red //Lines plot(maopening, offset = OFFS, color = maopeningcol) plot(maclosing, offset = OFFS, color = maclosingcol) long1line = long1 == 0 ? close : long1 short1line = short1 == 0 ? close : short1 plot(long1line, offset = OFFS, color = long1col) plot(short1line, offset = OFFS, color = short1col) //Lots lotlong1 = p * long1lot lotshort1 = p * short1lot //Entry if maopening > 0 and maclosing > 0 and truetime //Long sum := 0 strategy.entry("L", strategy.long, lotlong1, limit = on_close ? na : long1, when = long1 > 0 and pos <= sum and (on_close ? close <= long1[trade_offset] : true)) sum := lotlong1 //Short sum := 0 pos := -1 * pos strategy.entry("S", strategy.short, lotshort1, limit = on_close ? na : short1, when = short1 > 0 and pos <= sum and (on_close ? close >= short1[trade_offset] : true)) sum := lotshort1 strategy.exit("Exit", na, limit = maclosing) if time > finalTime strategy.close_all()