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

دوہری حرکت پذیر اوسط ریورس کی حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2023-11-17 16:56:24
ٹیگز:

img

جائزہ

ڈبل موونگ ایوریج ریورسشن حکمت عملی ایک عام قلیل مدتی اوسط ریورسشن ٹریڈنگ حکمت عملی ہے۔ حکمت عملی مختلف پیرامیٹرز کی ترتیبات کے ساتھ دو موونگ ایوریجز کے ذریعہ تجارتی سگنل تیار کرتی ہے۔ اس کا مقصد جب رجحان کی تبدیلی ہوتی ہے تو منافع حاصل کرنا ہے۔

حکمت عملی منطق

یہ حکمت عملی تجارتی سگنل پیدا کرنے کے لئے دو حرکت پذیر اوسط استعمال کرتی ہے۔ پہلا ایم اے ما اوپننگ رجحان کی سمت کا تعین کرنے کے لئے استعمال کیا جاتا ہے۔ دوسرا ایم اے میکوسنگ تجارتی سگنل پیدا کرنے کے لئے استعمال کیا جاتا ہے۔

جب ما اوپننگ اوپر جاتا ہے تو ، یہ اس بات کی نشاندہی کرتا ہے کہ موجودہ مارکیٹ ایک اپ ٹرینڈ میں ہے۔ جب ما اوپننگ نیچے جاتا ہے تو ، یہ اس بات کی نشاندہی کرتا ہے کہ موجودہ مارکیٹ ایک ڈاؤن ٹرینڈ میں ہے۔ میکلوسینگ کو 1 سے زیادہ کے ایک گتانک سے ضرب دیا جاتا ہے تاکہ اسے ابتدائی الٹ سگنل پیدا کرنے کے لئے زیادہ حساس بنایا جاسکے۔

خاص طور پر ، جب maopening اوپر جاتا ہے اور maclosing maopening سے نیچے عبور کرتا ہے تو ، اس سے رجحان کی تبدیلی ظاہر ہوتی ہے۔ حکمت عملی مختصر پوزیشن کھولے گی۔ جب maopening نیچے جاتا ہے اور maclosing maopening سے اوپر عبور کرتا ہے تو ، اس سے رجحان کی تبدیلی ظاہر ہوتی ہے۔ حکمت عملی طویل پوزیشن کھولے گی۔

حکمت عملی کے پیرامیٹرز میں ایم اے کی قسم ، لمبائی ، ڈیٹا ماخذ وغیرہ شامل ہیں۔ ان پیرامیٹرز کو ایڈجسٹ کرکے تجارتی کارکردگی کو بہتر بنایا جاسکتا ہے۔ کچھ تشکیل پذیر اختیارات بھی ہیں جیسے انٹری رول ، اسٹاپ نقصان وغیرہ۔

فوائد کا تجزیہ

ڈبل ایم اے ریورس اسٹریٹیجی کے اہم فوائد یہ ہیں:

  1. مختصر مدت کی تجارت کے لئے موزوں ، چھوٹا ڈراؤون۔ تیز رفتار حرکت پذیر اوسط کم ڈراؤون کے ساتھ مختصر مدت کی تبدیلیوں کو تیزی سے پکڑ سکتے ہیں۔

  2. لاگو کرنے میں آسان اور سمجھنے میں آسان۔ دو ایم اے کے کراس اوور سے واضح تجارتی سگنل پیدا ہوتے ہیں۔

  3. متعدد سایڈست پیرامیٹرز کے ساتھ انتہائی ترتیب دینے والا۔ دو ایم اے اور گتانک کے پیرامیٹرز کو بہتر بنایا جاسکتا ہے۔

  4. واضح منطق کے بہاؤ کے ساتھ خودکار کرنا آسان ہے۔ سادہ منطق اور اعلی تعدد کی تجارت اسے خودکار تجارت کے لئے بہت موزوں بناتی ہے۔

  5. سٹاپ نقصان کے طریقہ کار کے ساتھ کنٹرول خطرے. منتقل سٹاپ نقصان یا قدر سٹاپ نقصان ایک تجارت کے نقصان کو محدود کر سکتے ہیں.

خطرے کا تجزیہ

اس حکمت عملی کے کچھ خطرات بھی ہیں:

  1. ایم اے کراس اوور سگنلز کی تاخیر۔ ایم اے خود قیمت سے پیچھے رہ جاتے ہیں۔ کراس اوور کچھ عرصے تک رجحان کے الٹ جانے کے بعد ہوسکتا ہے۔

  2. وِپسا تجارت کا خطرہ۔ الٹا رجحان تیزی سے دوبارہ الٹا ہوسکتا ہے ، جس سے لگاتار نقصانات کا سبب بنتا ہے۔

  3. ڈراؤونگ اب بھی موجود ہے۔ اگرچہ اسٹاپ نقصان واحد نقصان کو محدود کرتا ہے ، لیکن مسلسل اسٹاپ نقصان اب بھی بڑے ڈراؤونگ کا باعث بن سکتا ہے۔

  4. اوور فٹنگ کا خطرہ۔ پیرامیٹر کی زیادہ سے زیادہ اصلاح سے براہ راست تجارت میں اوور فٹنگ اور خراب کارکردگی کا باعث بن سکتی ہے۔

حل میں شامل ہیں:

  1. تیز رفتار ایم اے تلاش کرنے کے لئے پیرامیٹرز کو بہتر بنائیں.

  2. فلٹرز شامل کریں، جیسے حجم اور اتار چڑھاؤ کے اشارے، وپسا تجارت سے بچنے کے لئے.

  3. مسلسل سٹاپ نقصان کا امکان کم کرنے کے لئے سٹاپ نقصان کی پوزیشن کو ایڈجسٹ کریں.

  4. پیرامیٹر سیٹوں کی مضبوطی کا ٹیسٹ تاکہ زیادہ فٹنگ کے خطرات کا اندازہ لگایا جاسکے۔

بہتری کی ہدایات

اسٹریٹیجی کو مندرجہ ذیل پہلوؤں میں مزید بہتر بنایا جاسکتا ہے:

  1. مختلف قسم کے ایم اے کا تجربہ کریں تاکہ زیادہ حساس تلاش کریں، جیسے کاما، زیلیما وغیرہ۔

  2. زیادہ سے زیادہ مجموعہ تلاش کرنے کے لئے ایم اے لمبائی کو بہتر بنائیں۔ عام طور پر کم مدت میں بہتر کارکردگی ہوتی ہے۔

  3. مختلف اعداد و شمار کے ذرائع کی جانچ کریں، جیسے قریب، درمیانی قیمت، عام قیمت وغیرہ.

  4. غیر مناسب الٹ سگنل سے بچنے کے لئے رجحان فلٹر شامل کریں، جیسے ڈونچیان چینل.

  5. تصدیق کے لیے دیگر اشارے شامل کریں، جیسے MACD، OBV وغیرہ۔

  6. خطرے کے انتظام کے طریقہ کار کو بہتر بنائیں ، جیسے اسٹاپ نقصان ، زیادہ سے زیادہ اکاؤنٹ نقصان وغیرہ کو منتقل کرنا۔

  7. بہترین اثاثہ جات کی تقسیم تلاش کرنے کے لئے پورٹ فولیو کی اصلاح.

  8. زیادہ فٹنگ کے خطرات کا اندازہ کرنے کے لئے پیرامیٹرز کی استحکام کا ٹیسٹ۔

نتیجہ

ڈبل ایم اے ریورس ایک سادہ اور عملی قلیل مدتی تجارتی حکمت عملی ہے۔ یہ مقداری تجارت کے ساتھ قلیل مدتی الٹ پھیروں کو پکڑنے کے لئے موزوں ہے۔ تاہم ، پسماندہ اور وِپسا تجارت جیسے خطرات موجود ہیں۔ حکمت عملی کو پیرامیٹرز کو بہتر بنانے ، فلٹرز شامل کرنے ، رسک کنٹرول وغیرہ کو بڑھانے سے بہتر بنایا جاسکتا ہے تاکہ اچھی حقیقی تجارتی کارکردگی کے ساتھ مستحکم اور موثر حکمت عملی تیار کی جاسکے۔


/*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()

مزید