متعدد معاون RSI اشارے کی حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2023-12-06 11:57:29
ٹیگز:

img

جائزہ

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

یہ کیسے کام کرتا ہے

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

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

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

اس حکمت عملی کا سب سے بڑا فائدہ سگنل کے معیار کو بہتر بنانے کے لئے ایک کثیر عنصر کی تصدیق کے طریقہ کار کے ذریعے حاصل کی گئی اس کی اعلی گرفتاری کی کارکردگی ہے۔ خاص طور پر یہ مندرجہ ذیل پہلوؤں میں ظاہر ہوتا ہے۔

  1. خود RSI اشارے میں مارکیٹ کے نظام اور زیادہ سے زیادہ حالات کی نشاندہی کرنے کی مضبوط صلاحیت ہے۔
  2. ملٹی فیکٹر تصدیق کے لئے متعدد معاون ٹولز کی مدد سے سگنل کا معیار بہتر ہوتا ہے اور بڑی مقدار میں جھوٹے مثبت نتائج کو فلٹر کیا جاتا ہے۔
  3. حکمت عملی پیرامیٹرز کے لئے حساس نہیں ہے اور بہتر بنانے کے لئے آسان ہے.

خطرات اور حل

اس حکمت عملی سے وابستہ کچھ خطرات اب بھی موجود ہیں ، جو بنیادی طور پر دو پہلوؤں پر مرکوز ہیں:

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

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

اس حکمت عملی کے لئے آگے بڑھنے کے لئے مندرجہ ذیل پہلوؤں کو بہتر بنانے کی ضرورت ہے:

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

نتیجہ

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


/*backtest
start: 2022-12-05 00:00:00
end: 2023-03-24 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
//@version=4

strategy(shorttitle='Ain1',title='All in One Strategy', overlay=true, initial_capital = 1000, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value=0.18, calc_on_every_tick=true)

kcolor = #0094FF
dcolor = #FF6A00



// -----------------  Strategy Inputs -------------------------------------------------------------
//Backtest dates with auto finish date of today
start = input(defval = timestamp("01 April 2021 00:00 -0500"), title = "Start Time", type = input.time)
finish = input(defval = timestamp("31 December 2021 00:00 -0600"), title = "Start Time", type = input.time)
window()  => true


// Strategy Selection - Long, Short, or Both
strat = input(title="Strategy", defval="Long/Short", options=["Long Only", "Long/Short", "Short Only"])
strat_val = strat == "Long Only" ? 1 : strat == "Long/Short" ? 0 : -1

// Risk Management Inputs
sl= input(10.0, "Stop Loss %", minval = 0, maxval = 100, step = 0.01)
stoploss = sl/100
tp = input(20.0, "Target Profit %", minval = 0, maxval = 100, step = 0.01)
TargetProfit = tp/100

// RSI and Stochastic Inputs
length = input(14, "RSI Length", minval=1)
ob_min = input(52, "Overbought Lookback Minimum Value", minval=0, maxval=200)
ob_lb = input(25, "Overbought Lookback Bars", minval=0, maxval=100)
os_min = input(50, "Oversold Lookback Minimum Value", minval=0, maxval=200)
os_lb = input(35, "Oversold Lookback Bars", minval=0, maxval=100)
source = input(title="Source", type=input.source, defval=close)
RSI = rsi(source, length)

// Define f_print function to show key recommendations for RSI
// f_print(_text) =>
//     // Create label on the first bar.
//     var _label = label(na),
//     label.delete(_label), 
//     _label := label.new(
//      time + (time-time[1]), 
//      ohlc4,
//      _text,
//      xloc.bar_time,
//      yloc.price,
//      color(na),
//      label.style_none,
//      color.gray,
//      size.large,
//      text.align_left
//      )
    

    
// Display highest and lowest RSI values

AvgHigh(src,cnt,val) =>
    total = 0.0
    count = 0
    for i = 0 to cnt
        if src[i] > val
            count := count + 1
            total := total + src[i]
    round(total / count)
    
RSI_high = AvgHigh(RSI, ob_lb, ob_min)

AvgLow(src,cnt,val) =>
    total = 0.0
    count = 0
    for i = 5 to cnt by 5
        if src[i] < val
            count := count + 1
            total := total + src[i]
    round(total / count)

RSI_low = AvgLow(RSI, os_lb, os_min)


// f_print("Recommended RSI Settings:" + "\nOverbought = " + tostring(RSI_high) + "\nOversold = " + tostring(RSI_low))


overbought= input(62, "Overbought")
oversold= input(35, "Oversold")


// Price Movement Inputs
look_back = input(9,"Look Back Bars")
high_source = input(high,"High Source")
low_source= input(low,"Low Source")
HTF = input("","Curernt or Higher time frame only", type=input.resolution)

// EMA and SMA Background Inputs
smoothK     = input(3, "K", minval=1)
smoothD     = input(3, "D", minval=1)
k_mode      = input("SMA", "K Mode", options=["SMA", "EMA", "WMA"])

// MACD Inputs
fastLength = input(5, minval=1, title="EMA Fast Length")
slowLength = input(10, minval=1, title="EMA Slow Length")

// Selections to show or hide the overlays
showZones = input(true, title="Show Bullish/Bearish Zones")
showStoch = input(true, title="Show Stochastic Overlays")
showRSIBS = input(true, title="Show RSI Buy Sell Zones")
showMACD = input(true, title="Show MACD")
color_bars=input(true, "Color Bars")
useXRSI = input(false, "Use RSI crossing back, select only one")
useMACD = input(false, "Use MACD Only, select only one")
useCRSI = input(false, "Use Tweaked Connors RSI, select only one")


// ------------------ Background Colors based on EMA Indicators -----------------------------------
// Uses standard lengths of 9 and 21, if you want control delete the constant definition and uncomment the inputs
haClose(gap) => (open[gap] + high[gap] + low[gap] + close[gap]) / 4
rsi_ema = rsi(haClose(0), length)
v2 = ema(rsi_ema, length)                                                
v3 = 2 * v2 - ema(v2, length)  
emaA = ema(rsi_ema, fastLength)                                     
emaFast = 2 * emaA - ema(emaA, fastLength)
emaB = ema(rsi_ema, slowLength)                                     
emaSlow = 2 * emaB - ema(emaB, slowLength)  

// bullish signal rule: 
bullishRule =emaFast > emaSlow
// bearish signal rule: 
bearishRule =emaFast < emaSlow

// current trading State
ruleState = 0
ruleState := bullishRule ? 1 : bearishRule ? -1 : nz(ruleState[1])
bgcolor(showZones ? ( ruleState==1 ? color.blue : ruleState==-1 ? color.red : color.gray ) : na , title=" Bullish/Bearish Zones", transp=95)


// ------------------  Stochastic Indicator Overlay -----------------------------------------------

// Calculation
// Use highest highs and lowest lows
h_high = highest(high_source ,look_back)
l_low = lowest(low_source ,look_back)

stoch = stoch(RSI, RSI, RSI, length)
k =
 k_mode=="EMA" ? ema(stoch, smoothK) :
 k_mode=="WMA" ? wma(stoch, smoothK) :
 sma(stoch, smoothK)
d = sma(k, smoothD)
k_c = change(k)
d_c = change(d)
kd = k - d

// Plot
signalColor = k>oversold and d<overbought and k>d and k_c>0 and d_c>0 ? kcolor : 
 k<overbought and d>oversold and k<d and k_c<0 and d_c<0 ? dcolor : na
kp = plot(showStoch ? k : na, "K", transp=80, color=kcolor)
dp = plot(showStoch ? d : na, "D", transp=80, color=dcolor)
fill(kp, dp, color = signalColor, title="K-D", transp=88)
signalUp = showStoch ? not na(signalColor) and kd>0 : na
signalDown = showStoch ? not na(signalColor) and kd<0 : na
plot(signalUp ? kd : na, "Signal Up", color=kcolor, transp=90, style=plot.style_columns)
plot(signalDown ? (kd+100) : na , "Signal Down", color=dcolor, transp=90, style=plot.style_columns, histbase=100)


// -------------- Add Price Movement to Strategy for better visualization -------------------------
// Calculations
h1 = vwma(high, length)
l1 = vwma(low, length)
hp = h_high[1]
lp = l_low[1]

// Plot
var plot_color=#353535
var sig = 0
if (h1 >hp)
    sig:=1
    plot_color:=color.lime
else if (l1 <lp)
    sig:=-1
    plot_color:=color.maroon
plot(1,title = "Price Movement Bars", style=plot.style_columns,color=plot_color)
plot(sig,title="Signal 1 or -1",display=display.none)



// --------------------------------------- RSI Plot ----------------------------------------------
// Plot Oversold and Overbought Lines
over = hline(oversold, title="Oversold", color=color.green)
under = hline(overbought, title="Overbought", color=color.red)
fill(over, under, color=#9915FF, transp=90, title="Band Background")


// Show RSI and EMA crosses with arrows and RSI Color (tweaked Connors RSI)
// Improves strategy setting ease by showing where EMA 5 crosses EMA 10 from above to confirm overbought conditions or trend reversals
// This shows where you should enter shorts or exit longs

// Tweaked Connors RSI Calculation
connor_ob = 80
connor_os = 20
ma3 = sma(close,3)
ma20 = sma(close, 20)
ma50 = sma(close, 50)
erection = ((((close[1]-close[2])/close[2]) + ((close[0]-close[1])/close[1]))/2)*100

// Buy Sell Zones using tweaked Connors RSI (RSI values of 80 and 20 for Crypto as well as ma3, ma20, and ma50 are the tweaks)
RSI_SELL = ma20 > ma50 and open > ma3 and RSI >= connor_ob and erection <=4 and window()
RSI_BUY = ma20 < ma50 and ma3 > close and RSI <= connor_os and window()

// Color Definition
col = useCRSI ? (close > ma20 and close < ma3 and RSI <= connor_os ? color.lime : close < ma20 and close > ma3 and RSI <= connor_ob ? color.red : color.yellow ) : color.yellow

// Plot colored RSI Line
plot(RSI, title="RSI", linewidth=3, color=col)


// Shape Plots
plotshape(showRSIBS ? RSI_BUY: na, title = "RSI Buy", style = shape.arrowup, text = "RSI Buy", location = location.bottom, color=color.green, textcolor=color.green, size=size.small)
plotshape(showRSIBS ? RSI_SELL: na, title = "RSI Sell", style = shape.arrowup, text = "RSI Sell", location = location.bottom, color=color.red, textcolor=color.red, size=size.small)


// MACD as another complement to RSI strategy
[macdLine, signalLine, _] = macd(close, fastLength, slowLength, length)

bartrendcolor = macdLine > signalLine and k > 50 and RSI > 50 ? color.teal : macdLine < signalLine and k < 50 and RSI < 50 ? color.maroon : macdLine < signalLine ? color.yellow : color.gray
barcolor(color = color_bars ? bartrendcolor : na)


MACDBuy = crossover(macdLine, signalLine) and macdLine<0 and RSI<RSI_low and window()
MACDSell = crossunder(macdLine, signalLine) and macdLine>0 and RSI>RSI_high and window()

plotshape(showMACD ? MACDBuy: na, title = "MACD Buy", style = shape.arrowup, text = "MACD Buy", color=color.green, textcolor=color.green, size=size.small)
plotshape(showMACD ? MACDSell: na, title = "MACD Sell", style = shape.arrowdown, text = "MACD Sell", color=color.red, textcolor=color.red, size=size.small)
bgcolor(showMACD ? (MACDBuy ? color.teal : MACDSell ? color.maroon : na) : na, title ="MACD Signals", transp=50)


// -------------------------------- Entry and Exit Logic ------------------------------------


// Entry Logic
XRSI_OB = crossunder(RSI, overbought) and window()
RSI_OB = crossover(RSI, overbought) and window()
XRSI_OS = crossover(RSI, oversold) and window()
RSI_OS = crossunder(RSI, oversold) and window()


// Strategy Entry and Exit with built in Risk Management
GoLong = strat_val > -1 ? (useXRSI ? XRSI_OS : useMACD ? MACDBuy : useCRSI ? RSI_BUY : RSI_OS) : false

GoShort = strat_val < 1 ? (useXRSI ? XRSI_OB : useMACD ? MACDSell : useCRSI ? RSI_SELL : RSI_OB) : false

convert_percent_to_points(percent) =>
    strategy.position_size != 0 ? round(percent * strategy.position_avg_price / syminfo.mintick) : float(na)
    
setup_percent(percent) =>
    convert_percent_to_points(percent)


if (GoLong)
    strategy.entry("LONG", strategy.long)
    strategy.exit(id="Exit Long", from_entry = "LONG", loss=setup_percent(stoploss), profit=setup_percent(TargetProfit))

CloseLong = strategy.position_size > 0 ? (useXRSI ? XRSI_OB : useMACD ? MACDSell : useCRSI ? RSI_SELL : RSI_OB) : false

if(CloseLong)
    strategy.close("LONG")



if (GoShort) 
    strategy.entry("SHORT", strategy.short)
    strategy.exit(id="Exit Short", from_entry = "SHORT", loss=setup_percent(stoploss), profit=setup_percent(TargetProfit))
        
CloseShort = strat_val < 1 and strategy.position_size < 0 ? (useXRSI ? XRSI_OS : useMACD ? MACDBuy : useCRSI ? RSI_BUY : RSI_OS) : false

if(CloseShort)
    strategy.close("SHORT")




مزید