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

مصنف:چاؤ ژانگ، تاریخ: 2023-11-13 10:47:48
ٹیگز:

img

جائزہ

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

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

یہ حکمت عملی بنیادی طور پر انٹری سگنلز کے لئے حرکت پذیر اوسط کراس اوور پر مبنی ہے۔ خاص طور پر ، ایک تیز ایم اے (ایم اے 1) اور سست ایم اے (ایم اے 2) کی وضاحت کی گئی ہے۔ جب ایم اے 1 ایم اے 2 سے تجاوز کرتا ہے تو ، یہ ایک سگنل ہے جو طویل عرصے سے جاتا ہے۔

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

اس حکمت عملی میں اسٹاپ نقصان اور منافع بھی طے ہوتا ہے۔ اسٹاپ نقصان مارکیٹ میں اچانک الٹ جانے کی صورت میں نقصانات سے بچتا ہے ، جبکہ منافع میں منافع حاصل کرتا ہے۔ وہ انٹری قیمت سے فیصد کی حد کے طور پر طے ہوتے ہیں۔

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

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

یہ ایک سادہ اور بدیہی رجحان کی پیروی کرنے والی حکمت عملی ہے۔ فوائد یہ ہیں:

  1. ایم اے کمبو مارکیٹ شور کو فلٹر کرتا ہے اور رجحان کی سمت میں تالے لگاتا ہے
  2. زاویہ کی حد مختصر مدت کے جھولنے سے گمراہ ہونے سے بچتی ہے
  3. دو طرفہ تجارت سے رینج سے منسلک مارکیٹوں سے فائدہ اٹھانا ممکن ہے
  4. اسٹاپ نقصان اور منافع کنٹرولز کا خطرہ

خطرے کا تجزیہ

کچھ خطرات ہیں جن کا نوٹ کرنا ضروری ہے:

  1. ایم اے میں تاخیر ہوتی ہے اور موڑ پوائنٹس کو یاد کر سکتے ہیں
  2. سٹاپ نقصان کی ضمانت نہیں ہے، تیز رفتار مارکیٹوں میں گیپ کیا جا سکتا ہے
  3. ڈبل کنارے کی تجارت سے خطرہ دوگنا ہوجاتا ہے، مختصر اندراج کا وقت اہم ہے
  4. ایم اے ادوار کی طرح ناقص پیرامیٹرز کی ترتیب نتائج کو متاثر کر سکتی ہے

بہتری کے شعبے

حکمت عملی کو مزید بہتر بنانے کے کچھ طریقے:

  1. درستگی کو بہتر بنانے کے لئے MACD، بولنگر جیسے رجحان فلٹرز شامل کریں
  2. ایم اے کے دوروں کو متحرک طور پر بہتر بنانے کے لئے مشین لرننگ کا استعمال کریں
  3. سٹاپ نقصان کو بہتر بنائیں اور منافع حاصل کریں مثال کے طور پر ٹریلنگ اسٹاپ
  4. نقصانات کو محدود کرنے کے لئے پوزیشن سائزنگ شامل کریں
  5. ADX کے ساتھ سائز کی اوسط ریورس پوزیشن کے ساتھ رجحان کی طاقت کا اندازہ کریں

نتیجہ

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


/*backtest
start: 2023-11-05 00:00:00
end: 2023-11-12 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//written by markjames12210@gmail.com
//@version=5
strategy(title="MJ-Dual Moving Average",initial_capital=10000,overlay=false)

// import TradingView/ZigZag/6 as ZigZagLib 

// // Create Zig Zag instance from user settings.
// var zigZag = ZigZagLib.newInstance(
//   ZigZagLib.Settings.new(
//       input.float(5.0, "Price deviation for reversals (%)", 0.00001, 100.0, 0.5, "0.00001 - 100"),
//       input.int(10, "Pivot legs", 2),
//       input(#2962FF, "Line color"),
//       input(true, "Extend to last bar"),
//       input(true, "Display reversal price"),
//       input(true, "Display cumulative volume"),
//       input(true, "Display reversal price change", inline = "priceRev"),
//       input.string("Absolute", "", ["Absolute", "Percent"], inline = "priceRev"),
//       true)
//  )

// // Update 'zigZag' object on each bar with new ​pivots, ​volume, lines, labels.
// zigZag.update()
// // plot(zigZag.pivots, "zigZag")

ma1= ta.sma(close,8)
ma2= ta.sma(close,21)

angleCriteria = input.int(title="Angle", defval=7, minval=1, maxval=13)

i_lookback   = input.int(2,     "Angle Period", minval = 1)
i_atrPeriod  = input.int(10,    "ATR Period",   minval = 1)
i_angleLevel = input.int(6,     "Angle Level",  minval = 1)
i_maSource   = input.source(close, "MA Source")
TP = input.float(1, "TP", minval = 0.1)
SL = input.float(1, "SL", minval = 0.1)

f_angle(_src, _lookback, _atrPeriod) =>
    rad2degree = 180 / 3.141592653589793238462643  //pi 
    ang = rad2degree * math.atan((_src[0] - _src[_lookback]) / ta.atr(_atrPeriod)/_lookback)
    ang
_angle = f_angle(ma2, i_lookback, i_atrPeriod)
plot(ta.atr(i_atrPeriod), "atr")
// plot(ma1,color=#FF0000)
// plot(ma2,color=#00FF00)

crosso=ta.crossover(ma1,ma2) 
crossu=ta.crossunder(ma1,ma2)

_lookback = 15

f_somethingHappened(_cond, _lookback) =>
    bool _crossed = false
    for i = 1 to _lookback
        if _cond[i]
            _crossed := true
    _crossed
    
longcrossed = f_somethingHappened(crosso,_lookback)
shortcrossed = f_somethingHappened(crossu,_lookback)

atr_factor = 1
atr = ta.atr(i_atrPeriod)
e = atr * atr_factor 

afr = close 
afr := nz(afr[1], afr)

atr_factoryHigh = close + e
atr_factoryLow = close - e 

if atr_factoryLow > afr 
    afr := atr_factoryLow
if atr_factoryHigh < afr 
    afr := atr_factoryHigh

// plot(afr, "afr", display = display.data_window)
// plot(atr_factoryHigh, "afr", color = color.yellow, display = display.all)
// plot(atr_factoryLow, "afr", color = color.green, display = display.all)


inLong() => strategy.position_size > 0
inShort() => strategy.position_size < 0
inZero() => not inLong() and not inShort()

long = longcrossed and _angle > angleCriteria
short= shortcrossed and _angle < -(angleCriteria)

plotshape(long, "Buy", shape.arrowup, location.belowbar, color = #FF0000)
plotshape(short, "Sell", shape.arrowdown, location.abovebar, color = #00FF00)

var longTp = 0.0
var longSl = 0.0
var shortTp = 0.0
var shortSl = 0.0
[b_middle, b_high, b_low] = ta.bb(close, 20, 2)
entry_price = strategy.opentrades.entry_price(0)

if inZero()
    if short
        longTp := close * (1 + TP/100)
        longSl := close * (1 - SL/100)
        strategy.entry("LONG",strategy.long, comment = "tp:" + str.tostring(longTp) + " sl:" + str.tostring(longSl))
    if long
        shortTp := close * (1 - TP/100)
        shortSl := close * (1 + SL/100)
        strategy.entry("SHORT",strategy.short, comment = "tp:" + str.tostring(shortTp) + " sl:" + str.tostring(shortSl))

if inLong()
    // if close - entry_price > close * 0.005
    //     longSl := entry_price + close * 0.001
    if high > longTp
        strategy.close("LONG")
        if (close - open) > close * 0.014
            shortTp := close * (1 - TP/100)
            shortSl := close * (1 + SL/100)
            strategy.entry("SHORT",strategy.short, comment = "tp:" + str.tostring(shortTp) + " sl:" + str.tostring(shortSl))

    if close < longSl
        strategy.close("LONG")
    if open >= b_high and close >= b_high
        strategy.close("LONG")
    // if high > b_high and entry_price < high
    //     strategy.close("LONG")


if inShort()
    // if entry_price - close > close * 0.005
    //     shortSl := entry_price - close * 0.001
    if low < shortTp
        strategy.close("SHORT")
        if (open - close) > close * 0.014
            longTp := close * (1 + TP/100)
            longSl := close * (1 - SL/100)
            strategy.entry("LONG",strategy.long, comment = "tp:" + str.tostring(longTp) + " sl:" + str.tostring(longSl))


    if close > shortSl
        strategy.close("SHORT")
    if open < b_low and close < b_low
        strategy.close("SHORT")
    // if low < b_low and entry_price > low
    //     strategy.close("SHORT")

مزید