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

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

img

جائزہ

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

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

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

b = abs(close-open)/(high - low)
c = min(max(b, 0), 1)  
Ratio OCHL Averager = c*close + (1-c)*previous Ratio OCHL Averager

یہاں b دن کے اندر قیمتوں کی نقل و حرکت کا تناسب ہے اور c معمول b ہے۔ تناسب OCHL اوسط میں چلتی اوسط کی تعمیر کے لئے کھلی ، بند ، اعلی اور کم قیمتوں کو شامل کیا گیا ہے۔

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

فوائد

  1. ریشو او سی ایچ ایل اوسط قیمت کے اعداد و شمار کو ہموار کرتا ہے اور مارکیٹ کے شور کو فلٹر کرتا ہے ، جس سے تجارتی سگنل زیادہ قابل اعتماد ہوتا ہے۔

  2. مختلف ٹائم فریم کے ساتھ مل کر دوہری چلتی اوسط کراس اوور ایک نئے رجحان کے آغاز کا بہتر اندازہ کرسکتا ہے۔

  3. تیز رفتار اور سست لائن کی مدت کو مختلف مارکیٹ کے حالات کے مطابق ایڈجسٹ کیا جا سکتا ہے.

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

  5. سٹاپ نقصان اور منافع لے لو کو خطرات کو کنٹرول کرنے کے لئے لچکدار طریقے سے مقرر کیا جا سکتا ہے.

خطرات

  1. چلتی اوسط کراس اوور سے بہت زیادہ غلط سگنل پیدا ہوسکتے ہیں۔ فلٹریشن کے لئے دیگر تکنیکی اشارے کی ضرورت ہوسکتی ہے۔

  2. تیز رفتار اور سست لائن کے ادوار کو معقول حد تک منتخب کیا جانا چاہئے، ورنہ یہ حکمت عملی کی کارکردگی کو متاثر کر سکتا ہے.

  3. یہ ایک رجحان کی پیروی کرنے والی حکمت عملی ہے جو رینج سے منسلک مارکیٹ کے لئے موزوں نہیں ہے۔ رجحان کے حالات میں استعمال کیا جانا چاہئے۔

  4. نقصانات کو کم کرنے اور منافع کی سطح کو بہتر بنانے کے لئے اسٹاپ نقصان اور منافع لینے کو مناسب طریقے سے ایڈجسٹ کیا جانا چاہئے۔

اصلاح کی ہدایات

  1. سگنل فلٹرنگ اور معیار کو بہتر بنانے کے لیے ایم اے سی ڈی، کے ڈی جے جیسے رفتار کے اشارے کو یکجا کرنے پر غور کریں۔

  2. بہترین پیرامیٹرز تلاش کرنے کے لئے مختلف تیز رفتار اور سست لائن مدت کے مجموعے کی جانچ کریں.

  3. سٹاپ نقصان کو بہتر بنائیں اور بیک ٹیسٹ کے نتائج کی بنیاد پر منافع لیں.

  4. کچھ مارکیٹ کے حالات میں پیرامیٹرز کو متحرک طور پر ایڈجسٹ کرنے پر غور کریں ، مثال کے طور پر ، حد سے محدود مارکیٹ میں مدت میں اضافہ کریں۔

نتیجہ

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


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

//@version=4
strategy(title="[XC] Adaptive Strategy V3 - Ratio OCHL Averager no repaint",shorttitle="R_OHCL", overlay=true, currency=currency.EUR,initial_capital=10000,
     default_qty_value=100, default_qty_type=strategy.percent_of_equity , calc_on_every_tick=false, calc_on_order_fills=true)


//                  ╔═ SETTINGS                  ╗
//░░░░░░░░░░░░░░░░░ ╚════════════════════════════╝ ░░░░░░░░░░░░░░░░░░░░░░░░

strategy_1     = input ( defval=true   , type=input.bool    , title="STRATEGY 1? —>"      )
Recursive      = input(false)
RES201         = "Min",RES202= "D",RES203 = "W",RES204 = "M"

//++ Resolution 1 ++
inp_resolution1 = input(600, minval=1, title="Resolution Line 1")
restype1        = input ( defval="Min"  , type=input.string , title= "Resolution Line 1" , options=[ "Min","D","W","M"])
multiplier1     = restype1 == "Min" ? "" : restype1 == "D" ? "D" : restype1 == "W" ? "W" : "M"
resolution1     = tostring(inp_resolution1)+ multiplier1

//++ Resolution 2 ++
inp_resolution2 = input(1440, minval=1, title="Resolution Line 2")
restype2        = input ( defval="Min"  , type=input.string , title= "Resolution Line 2" , options=["Min","D","W","M"])
multiplier2     = restype2 == "Min" ? "" : restype2 == "D" ? "D" : restype2 == "W" ? "W" : "M"
resolution2     = tostring(inp_resolution2)+ multiplier2

StopLoss        = input(defval = 500 , title = "Stop Loss", minval = 0)
TakeProfit      = input(defval = 2500 , title = "Take Profit", minval = 0)
// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = TakeProfit  >= 1 ? TakeProfit  : na
useStopLoss     = StopLoss    >= 1 ? StopLoss    : na


//                  ╔═ BACKTEST RANGE            ╗
//░░░░░░░░░░░░░░░░░ ╚════════════════════════════╝ ░░░░░░░░░░░░░░░░░░░░░░░░
line_breakBTR  = input ( defval = true   , type=input.bool   , title="BACKTEST RANGE —"      ) 
FromYear       = input ( defval = 2019, title = "From Year", minval = 2017)
FromMonth      = input ( defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay        = input ( defval = 2, title = "From Day", minval = 1, maxval = 31)
//FromHour     = input ( defval = 1, title = "From Hour", minval = 1, maxval = 24)
ToYear         = input ( defval = 9999, title = "To Year", minval = 2017)
//ToHour       = input ( defval = 0, title = "From Hour", minval = 0, maxval = 24)
ToMonth        = input ( defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay          = input ( defval = 1, title = "To Day", minval = 1, maxval = 31)

// === FUNCTION EXAMPLE ===
start     = timestamp(syminfo.timezone, FromYear, FromMonth, FromDay, 0, 00)  // backtest start window
finish    = timestamp(syminfo.timezone, ToYear  , ToMonth  , ToDay  , 0, 59)  // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

//                  ╔═ INDICATOR                 ╗
//░░░░░░░░░░░░░░░░░ ╚════════════════════════════╝ ░░░░░░░░░░░░░░░░░░░░░░░░

// "Ratio OCHL Averager" -> alexgrover / tradingview.com/script/RGAtOI6h-Ratio-OCHL-Averager-An-Alternative-to-VWAP/

rochla( res,Recursive)=>
    //Recursive = false
    H =  security(syminfo.tickerid,res,high[1],gaps = barmerge.gaps_off,  lookahead = barmerge.lookahead_on)
    L =  security(syminfo.tickerid,res,low[1] ,gaps = barmerge.gaps_off,  lookahead = barmerge.lookahead_on)
    d = 0.
    //----
    a = Recursive ? nz(d[1],open) : open
    b = abs(close-a)/(H - L)
    c = b > 1 ? 1 : b
    d := c*close+(1-c)*nz(d[1],close)



strat1_line1=rochla(resolution1,Recursive)
strat1_line2=rochla(resolution2,Recursive)

plot(strat1_line1, title="Ratio OCHL Averager 1", color=#DAA520,linewidth=2,transp=0)
plot(strat1_line2, title="Ratio OCHL Averager 2", color=#B22222,linewidth=2,transp=0)



//                  ╔═ STRATEGY 1                ╗
//░░░░░░░░░░░░░░░░░ ╚════════════════════════════╝ ░░░░░░░░░░░░░░░░░░░░░░░░

trading_strat1_line1 = strategy_1 == 1    ? strat1_line1   : na
trading_strat1_line2 = strategy_1 == 1    ? strat1_line2   : na

longCross  = crossunder (trading_strat1_line2, trading_strat1_line1) ? true : false
shortCross = crossover  (trading_strat1_line2, trading_strat1_line1) ? true : false

plot( longCross  ? trading_strat1_line1 : na , title = "Long"  , color=color.aqua, style=plot.style_circles, linewidth=5, offset= 0)
plot( shortCross ? trading_strat1_line2 : na , title = "Short" , color=color.red , style=plot.style_circles, linewidth=5, offset= 0)



//                  ╔═ Backtest 1                ╗
//░░░░░░░░░░░░░░░░░ ╚════════════════════════════╝ ░░░░░░░░░░░░░░░░░░░░░░░░


strategy.exit("close",loss = useStopLoss, profit = useTakeProfit)

if longCross  and window() and strategy_1 == 1 
    strategy.entry("Go Long", strategy.long)
if shortCross and window() and strategy_1 == 1 
    strategy.entry("Go Short", strategy.short)

//end

مزید