متعدد اسٹاپس کے ساتھ رجحان کی پیروی کرنے والی انٹرا ڈے حکمت عملی


تخلیق کی تاریخ: 2023-12-27 15:30:07 آخر میں ترمیم کریں: 2023-12-27 15:30:07
کاپی: 1 کلکس کی تعداد: 612
1
پر توجہ دیں
1621
پیروکار

متعدد اسٹاپس کے ساتھ رجحان کی پیروی کرنے والی انٹرا ڈے حکمت عملی

جائزہ

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

حکمت عملی کا اصول

اس حکمت عملی کا مرکز ایک کثیر اے ٹی آر اسٹاپ میکانزم ہے۔ اس میں اے ٹی آر کے متحرک اسٹاپ کے 3 سیٹ ترتیب دیئے گئے ہیں ، جن کی پیرامیٹرز 5 گنا اے ٹی آر ، 10 گنا اے ٹی آر اور 15 گنا اے ٹی آر ہیں۔ جب قیمت تینوں اسٹاپ لائنوں سے نیچے آجاتی ہے تو ، اس کا اشارہ ہوتا ہے کہ رجحان بدل گیا ہے ، اور اس وقت پوزیشن صاف ہے۔ یہ کثیر اسٹاپ سیٹ مؤثر طریقے سے مختصر مدت کے اتار چڑھاؤ سے پیدا ہونے والے جھوٹے سگنل کو فلٹر کرسکتا ہے۔

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

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

اسٹریٹجک فوائد

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

حکمت عملی کے خطرات اور اصلاحات

اس حکمت عملی کا بنیادی خطرہ یہ ہے کہ اسٹاپ نقصان کو توڑنے کے نتیجے میں نقصان میں اضافہ ہوتا ہے۔ اس کو مندرجہ ذیل طریقوں سے بہتر بنایا جاسکتا ہے:

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

خلاصہ کریں۔

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

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2022-12-20 00:00:00
end: 2023-12-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Lancelot vstop intraday strategy", overlay=true, currency=currency.NONE, initial_capital = 100, commission_type=strategy.commission.percent, 
     commission_value=0.075, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

///Volatility Stop///
lengtha = input(title="Vstop length", type=input.integer, defval=26, minval=1)
mult1a = 5

atr_a = atr(lengtha)
max1a = 0.0
min1a = 0.0
is_uptrend_preva = false
stopa = 0.0
vstop_preva = 0.0
vstop1a = 0.0
is_uptrenda = false
is_trend_changeda = false
max_a = 0.0
min_a = 0.0
vstopa = 0.0
max1a := max(nz(max_a[1]), ohlc4)
min1a := min(nz(min_a[1]), ohlc4)
is_uptrend_preva := nz(is_uptrenda[1], true)
stopa := is_uptrend_preva ? max1a - mult1a * atr_a : min1a + mult1a * atr_a
vstop_preva := nz(vstopa[1])
vstop1a := is_uptrend_preva ? max(vstop_preva, stopa) : min(vstop_preva, stopa)
is_uptrenda := ohlc4 - vstop1a >= 0
is_trend_changeda := is_uptrenda != is_uptrend_preva
max_a := is_trend_changeda ? ohlc4 : max1a
min_a := is_trend_changeda ? ohlc4 : min1a
vstopa := is_trend_changeda ? is_uptrenda ? max_a - mult1a * atr_a : min_a + mult1a * atr_a : 
   vstop1a

///Volatility Stop///
lengthb = input(title="Vstop length", type=input.integer, defval=26, minval=1)
mult1b = 10

atr_b = atr(lengthb)
max1b = 0.0
min1b = 0.0
is_uptrend_prevb = false
stopb = 0.0
vstop_prevb = 0.0
vstop1b = 0.0
is_uptrendb = false
is_trend_changedb = false
max_b = 0.0
min_b = 0.0
vstopb = 0.0
max1b := max(nz(max_b[1]), ohlc4)
min1b := min(nz(min_b[1]), ohlc4)
is_uptrend_prevb := nz(is_uptrendb[1], true)
stopb := is_uptrend_prevb ? max1b - mult1b * atr_b : min1b + mult1b * atr_b
vstop_prevb := nz(vstopb[1])
vstop1b := is_uptrend_prevb ? max(vstop_prevb, stopb) : min(vstop_prevb, stopb)
is_uptrendb := ohlc4 - vstop1b >= 0
is_trend_changedb := is_uptrendb != is_uptrend_prevb
max_b := is_trend_changedb ? ohlc4 : max1b
min_b := is_trend_changedb ? ohlc4 : min1b
vstopb := is_trend_changedb ? is_uptrendb ? max_b - mult1b * atr_b : min_b + mult1b * atr_b : 
   vstop1b
   
///Volatility Stop///
lengthc = input(title="Vstop length", type=input.integer, defval=26, minval=1)
mult1c = 15

atr_c = atr(lengthc)
max1c = 0.0
min1c = 0.0
is_uptrend_prevc = false
stopc = 0.0
vstop_prevc = 0.0
vstop1c = 0.0
is_uptrendc = false
is_trend_changedc = false
max_c = 0.0
min_c = 0.0
vstopc = 0.0
max1c := max(nz(max_c[1]), ohlc4)
min1c := min(nz(min_c[1]), ohlc4)
is_uptrend_prevc := nz(is_uptrendc[1], true)
stopc := is_uptrend_prevc ? max1c - mult1c * atr_c : min1c + mult1c * atr_c
vstop_prevc := nz(vstopc[1])
vstop1c := is_uptrend_prevc ? max(vstop_prevc, stopc) : min(vstop_prevc, stopc)
is_uptrendc := ohlc4 - vstop1c >= 0
is_trend_changedc := is_uptrendc != is_uptrend_prevc
max_c := is_trend_changedc ? ohlc4 : max1c
min_c := is_trend_changedc ? ohlc4 : min1c
vstopc := is_trend_changedc ? is_uptrendc ? max_c - mult1c * atr_c : min_c + mult1c * atr_c : 
   vstop1c

plot(vstopa, color=is_uptrenda ? color.green : color.red, style=plot.style_line, linewidth=1)
plot(vstopb, color=is_uptrendb ? color.green : color.red, style=plot.style_line, linewidth=1)
plot(vstopc, color=is_uptrendc ? color.green : color.red, style=plot.style_line, linewidth=1)

vstoplongcondition = close > vstopa and close > vstopb and close > vstopc and vstopa > vstopb and vstopa > vstopc and vstopb > vstopc
vstoplongclosecondition = crossunder(close, vstopa)
vstopshortcondition = close < vstopa and close < vstopb and close < vstopc and vstopa < vstopb and vstopa < vstopc and vstopb < vstopc
vstopshortclosecondition = crossover(close, vstopa)

///Renko///
TF = input(title='TimeFrame', type=input.resolution, defval="240")
ATRlength = input(title="ATR length", type=input.integer, defval=60, minval=2, maxval=100)
SMAlength = input(title="SMA length", type=input.integer, defval=5, minval=2, maxval=100)
SMACurTFlength = input(title="SMA CurTF length", type=input.integer, defval=20, minval=2, maxval=100)

HIGH = security(syminfo.tickerid, TF, high)
LOW = security(syminfo.tickerid, TF, low)
CLOSE = security(syminfo.tickerid, TF, close)
ATR = security(syminfo.tickerid, TF, atr(ATRlength))
SMA = security(syminfo.tickerid, TF, sma(close, SMAlength))
SMACurTF = sma(close, SMACurTFlength)

RENKOUP = float(na)
RENKODN = float(na)
H = float(na)
COLOR = color(na)
BUY = int(na)
SELL = int(na)
UP = bool(na)
DN = bool(na)
CHANGE = bool(na)

RENKOUP := na(RENKOUP[1]) ? (HIGH + LOW) / 2 + ATR / 2 : RENKOUP[1]
RENKODN := na(RENKOUP[1]) ? (HIGH + LOW) / 2 - ATR / 2 : RENKODN[1]
H := na(RENKOUP[1]) or na(RENKODN[1]) ? RENKOUP - RENKODN : RENKOUP[1] - RENKODN[1]
COLOR := na(COLOR[1]) ? color.white : COLOR[1]
BUY := na(BUY[1]) ? 0 : BUY[1]
SELL := na(SELL[1]) ? 0 : SELL[1]
UP := false
DN := false
CHANGE := false

if not CHANGE and close >= RENKOUP[1] + H * 3
    CHANGE := true
    UP := true
    RENKOUP := RENKOUP[1] + ATR * 3
    RENKODN := RENKOUP[1] + ATR * 2
    COLOR := color.lime
    SELL := 0
    BUY := BUY + 3
    BUY

if not CHANGE and close >= RENKOUP[1] + H * 2
    CHANGE := true
    UP := true
    RENKOUP := RENKOUP[1] + ATR * 2
    RENKODN := RENKOUP[1] + ATR
    COLOR := color.lime
    SELL := 0
    BUY := BUY + 2
    BUY

if not CHANGE and close >= RENKOUP[1] + H
    CHANGE := true
    UP := true
    RENKOUP := RENKOUP[1] + ATR
    RENKODN := RENKOUP[1]
    COLOR := color.lime
    SELL := 0
    BUY := BUY + 1
    BUY

if not CHANGE and close <= RENKODN[1] - H * 3
    CHANGE := true
    DN := true
    RENKODN := RENKODN[1] - ATR * 3
    RENKOUP := RENKODN[1] - ATR * 2
    COLOR := color.red
    BUY := 0
    SELL := SELL + 3
    SELL

if not CHANGE and close <= RENKODN[1] - H * 2
    CHANGE := true
    DN := true
    RENKODN := RENKODN[1] - ATR * 2
    RENKOUP := RENKODN[1] - ATR
    COLOR := color.red
    BUY := 0
    SELL := SELL + 2
    SELL

if not CHANGE and close <= RENKODN[1] - H
    CHANGE := true
    DN := true
    RENKODN := RENKODN[1] - ATR
    RENKOUP := RENKODN[1]
    COLOR := color.red
    BUY := 0
    SELL := SELL + 1
    SELL

plotshape(UP, style=shape.arrowup, location=location.abovebar, size=size.normal)
plotshape(DN, style=shape.arrowdown, location=location.belowbar, size=size.normal)

p1 = plot(RENKOUP, style=plot.style_line, linewidth=1, color=COLOR)
p2 = plot(RENKODN, style=plot.style_line, linewidth=1, color=COLOR)
fill(p1, p2, color=COLOR, transp=80)

///Long Entry///
longcondition = vstoplongcondition and UP
if (longcondition)
    strategy.entry("Long", strategy.long)
    
///Long exit///
closeconditionlong = vstoplongclosecondition or DN
if (closeconditionlong)
    strategy.close("Long")
    
// ///Short Entry///
// shortcondition = vstopshortcondition and DN
// if (shortcondition)
//     strategy.entry("Short", strategy.short)
    
// ///Short exit///
// closeconditionshort = vstopshortclosecondition or UP
// if (closeconditionshort)
//     strategy.close("Short")