ریورس-کیچر حکمت عملی

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

img

جائزہ

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

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

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

  1. طویل یا مختصر موقف کا تعین کرنے کے لئے اہم رجحان کی سمت کا فیصلہ کریں۔ رجحان کا تعین کرنے کے لئے 50 دن کا ای ایم اے اور 21 دن کا ای ایم اے گولڈن کراس / ڈیڈ کراس استعمال کریں۔
  2. ایک ڈاؤن ٹرینڈ میں، جب قیمت بولنگر لوئر بینڈ کے اوپر ٹوٹ جاتی ہے، اور آر ایس آئی صرف oversold علاقے سے واپس اچھالتا ہے، ایک سنہری کراس تشکیل دیتا ہے، یہ اشارہ کرتا ہے کہ oversold علاقے نے پہلے ہی سب سے نیچے کی سطح حاصل کی ہے، خریدنے کا اشارہ دیتے ہیں.
  3. ایک اپ ٹرینڈ میں ، جب قیمت بولنگر اپر بینڈ سے نیچے ہوتی ہے ، اور آر ایس آئی زیادہ خریدنے والے علاقے سے پیچھے ہٹ جاتا ہے ، ایک مردہ کراس تشکیل دیتا ہے ، اس سے یہ ظاہر ہوتا ہے کہ زیادہ خریدنے والا علاقہ پیچھے ہٹنا شروع ہوجاتا ہے ، فروخت کا اشارہ دیتا ہے۔
  4. مذکورہ بالا خرید اور فروخت کے سگنلز کو غلط سگنلز سے بچنے کے لئے ایک ساتھ متحرک کیا جانا چاہئے۔

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

اس حکمت عملی کے فوائد میں شامل ہیں:

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

خطرے کا تجزیہ

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

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

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

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

اصلاح کی اہم سمتوں میں شامل ہیں:

  1. بولنگر بینڈ پیرامیٹرز کو بہتر بنائیں، بہترین ترتیب تلاش کرنے کے لئے مدت کی لمبائی اور معیاری انحراف کو ایڈجسٹ کریں۔
  2. رجحان کے فیصلے کے لئے بہترین مدت کا تعین کرنے کے لئے چلتی اوسط مدت کو بہتر بنائیں.
  3. بہترین overbought/oversold رینج کا پتہ لگانے کے لئے RSI پیرامیٹرز کو ایڈجسٹ کریں۔
  4. انٹری سگنلز کو متنوع بنانے کے لئے KDJ، MACD جیسے دیگر اشارے شامل کریں.
  5. بہتر پیرامیٹرز تلاش کرنے کے لیے مشین لرننگ ماڈلز متعارف کروائیں۔

نتیجہ

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


/*backtest
start: 2023-10-24 00:00:00
end: 2023-11-23 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This is an Open source work. Please do acknowledge in case you want to reuse whole or part of this code.
// Please see the documentation to know the details about this.

//@version=5
strategy('Strategy:Reversal-Catcher', shorttitle="Reversal-Catcher", overlay=true , currency=currency.NONE, initial_capital=100000)

// Inputs
src = input(close, title="Source (close, high, low, open etc.")

BBlength = input.int(defval=20, minval=1,title="Bollinger Period Length, default 20")
BBmult = input.float(defval=1.5, minval=1.0, maxval=4, step=0.1, title="Bollinger Bands Standard Deviation, default is 1.5")

fastMovingAvg = input.int(defval=21, minval=5,title="Fast Exponential Moving Average, default 21", group = "Trends")
slowMovingAvg = input.int(defval=50, minval=8,title="Slow Exponential Moving Average, default 50", group = "Trends")

rsiLenght = input.int(defval=14, title="RSI Lenght, default 14", group = "Momentum")
overbought = input.int(defval=70, title="Overbought limit (RSI), default 70", group = "Momentum")
oversold = input.int(defval=30, title="Oversold limit (RSI), default 30", group = "Momentum")

hide = input.bool(defval=true, title="Hide all plots and legends from the chart (default: true)")


// Trade related
tradeType = input.string(defval='Both', group="Trade settings", title="Trade Type", options=['Both', 'TrendFollowing', 'Reversal'], tooltip="Consider all types of trades? Or only Trend Following or only Reversal? (default: Both).")
endOfDay = input.int(defval=1500, title="Close all trades, default is 3:00 PM, 1500 hours (integer)", group="Trade settings")
mktAlwaysOn = input.bool(defval=false, title="Markets that never closed (Crypto, Forex, Commodity)", tooltip="Some markers never closes. For those cases, make this checked. (Default: off)", group="Trade settings")


// Utils
annotatePlots(txt, val, hide) => 
    if (not hide)
        var l1 = label.new(bar_index, val, txt, style=label.style_label_left, size = size.tiny, textcolor = color.white, tooltip = txt)
        label.set_xy(l1, bar_index, val)

/////////////////////////////// Indicators /////////////////////
vwap = ta.vwap(src)
plot(hide ? na : vwap, color=color.purple, title="VWAP", style = plot.style_line)
annotatePlots('VWAP', vwap, hide)

// Bollinger Band of present time frame
[BBbasis, BBupper, BBlower] = ta.bb(src, BBlength, BBmult)
p1 = plot(hide ? na : BBupper, color=color.blue,title="Bollinger Bands Upper Line")
p2 = plot(hide ? na : BBlower, color=color.blue,title="Bollinger Bands Lower Line")
p3 = plot(hide ? na : BBbasis, color=color.maroon,title="Bollinger Bands Width", style=plot.style_circles, linewidth = 1)
annotatePlots('BB-Upper', BBupper, hide)
annotatePlots('BB-Lower', BBlower, hide)
annotatePlots('BB-Base(20-SMA)', BBbasis, hide)

// RSI
rsi = ta.rsi(src, rsiLenght)

// Trend following
ema50 = ta.ema(src, slowMovingAvg)
ema21 = ta.ema(src, fastMovingAvg)
annotatePlots('21-EMA', ema21, hide)
annotatePlots('50-EMA', ema50, hide)


// Trend conditions
upTrend = ema21 > ema50 
downTrend = ema21 < ema50


// Condition to check Special Entry: HH_LL
// Long side:
hhLLong = barstate.isconfirmed and (low > low[1]) and (high > high[1]) and (close > high[1])
hhLLShort = barstate.isconfirmed and (low < low[1]) and (high < high[1]) and (close < low[1])

longCond =  barstate.isconfirmed and (high[1] < BBlower[1]) and (close > BBlower) and (close < BBupper) and hhLLong and ta.crossover(rsi, oversold) and downTrend
shortCond = barstate.isconfirmed and (low[1] > BBupper[1]) and (close < BBupper) and (close > BBlower) and hhLLShort and ta.crossunder(rsi, overbought) and upTrend

// Trade execute
h = hour(time('1'), syminfo.timezone)
m = minute(time('1'), syminfo.timezone)
hourVal = h * 100 + m
totalTrades = strategy.opentrades + strategy.closedtrades
if (mktAlwaysOn or (hourVal < endOfDay))
    // Entry
    var float sl = na
    var float target = na
    if (longCond)
        strategy.entry("enter long", strategy.long, 1, limit=na, stop=na, comment="Long[E]")
        sl := low[1]
        target := high >= BBbasis ? BBupper : BBbasis
        alert('Buy:' + syminfo.ticker + ' ,SL:' + str.tostring(math.floor(sl)) + ', Target:' + str.tostring(target), alert.freq_once_per_bar)
    if (shortCond)
        strategy.entry("enter short", strategy.short, 1, limit=na, stop=na, comment="Short[E]")
        sl := high[1]
        target := low <= BBbasis ? BBlower : BBbasis
        alert('Sell:' + syminfo.ticker + ' ,SL:' + str.tostring(math.floor(sl)) + ', Target:' + str.tostring(target), alert.freq_once_per_bar)

    // Exit: target or SL
    if ((close >= target) or (close <= sl))
        strategy.close("enter long", comment=close < sl ? "Long[SL]" : "Long[T]")
    if ((close <= target) or (close >= sl))
        strategy.close("enter short", comment=close > sl ? "Short[SL]" : "Short[T]")
else if (not mktAlwaysOn)
    // Close all open position at the end if Day
    strategy.close_all(comment = "EoD[Exit]", alert_message = "EoD Exit", immediately = true)


مزید