RSI اور OTT بینڈ کی حکمت عملی کا تجزیہ


تخلیق کی تاریخ: 2023-10-09 16:21:20 آخر میں ترمیم کریں: 2023-10-09 16:21:20
کاپی: 0 کلکس کی تعداد: 714
1
پر توجہ دیں
1617
پیروکار

جائزہ

اس حکمت عملی کا نام RSI_OTT-TP/SL ہے۔ یہ حکمت عملی آر ایس آئی اشارے اور او ٹی ٹی لہر کے ذریعہ ٹریڈنگ سگنل کے فیصلے کو جوڑتی ہے ، یہ رجحان سے باخبر رہنے کی حکمت عملی ہے۔ حکمت عملی آر ایس آئی اشارے کے ذریعہ مارکیٹ کے رجحان کی سمت کا تعین کرتی ہے ، اور او ٹی ٹی لہر کے ذریعہ مخصوص داخلے کے مقامات کی نشاندہی کرتی ہے۔ حکمت عملی صارف کو اسٹاپ نقصان کا تناسب ترتیب دینے کی بھی اجازت دیتی ہے ، جو منافع کو لاک کرنے یا نقصان سے بچنے کے لئے خود بخود اسٹاپ نقصان کو روک سکتی ہے۔

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

  1. اس حکمت عملی میں رجحانات اور انٹری پوائنٹس کا اندازہ لگانے کے لئے RSI اور OTT دونوں اشارے استعمال کیے گئے ہیں۔

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

  3. او ٹی ٹی لہر کا استعمال انٹری پوائنٹس کی تلاش کے لئے کیا جاتا ہے۔ یہ ایک لہر کی لہر ہے جو اتار چڑھاؤ کے اشارے وی اے آر کی بنیاد پر تشکیل دی گئی ہے۔ جب قیمت نیچے سے او ٹی ٹی نیچے کی ٹریک کو توڑتی ہے تو اس کے لئے زیادہ سگنل لگائیں۔ جب قیمت اوپر سے نیچے سے او ٹی ٹی اوور ٹریک کو توڑتی ہے تو اس کے لئے خالی سگنل لگائیں۔

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

  5. اسٹاپ اسٹاپ نقصان میں ایک ان پٹ باکس ہوتا ہے جس کو صارف خود ترتیب دے سکتا ہے۔ جب اسٹاپ یا اسٹاپ نقصان کی قیمت ٹرگر ہوتی ہے تو حکمت عملی خود بخود خالی ہوجاتی ہے۔

  6. اس حکمت عملی میں صرف زیادہ ، صرف خالی یا دو طرفہ تجارت کی بھی اجازت ہے۔

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

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

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

  3. اسٹریٹجی اسٹاپ اسٹاپ نقصان کی خصوصیت پیش کرتی ہے ، جس سے منافع کو لاک کیا جاسکتا ہے ، یا نقصان میں توسیع سے پہلے نقصان کو روک سکتا ہے ، جو خطرے پر قابو پانے میں مددگار ہے۔

  4. کوڈ کی ساخت واضح ہے، مکمل طور پر تشریح کی گئی ہے، اور اسے سمجھنے اور ترمیم کرنے میں آسانی ہے۔

  5. حکمت عملی کے پیرامیٹرز کو انٹرفیس کے ذریعے مختلف مارکیٹ کے حالات کے مطابق لچکدار طریقے سے ایڈجسٹ کیا جاسکتا ہے۔

اسٹریٹجک رسک

  1. RSI اشارے میں تاخیر کا مسئلہ ہے ، اور اس سے رجحان کی تبدیلی سے محروم ہوسکتا ہے ، جس سے غیر ضروری نقصانات کا سبب بنتا ہے۔

  2. او ٹی ٹی بینڈ میں بھی غلط سگنل پیدا ہوسکتے ہیں ، جس کی تصدیق کے لائن فارمیٹ کے ساتھ کرنے کی سفارش کی جاتی ہے۔

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

  4. حکمت عملی صرف ایک پرجاتیوں کی بازیافت پر مبنی ہے ، جس میں مختلف پرجاتیوں کے پیرامیٹرز کو الگ سے بہتر بنانے کی ضرورت ہے۔

  5. پیمائش کے لئے وقت کی کھڑکی مختصر ہے اور اس حکمت عملی کی تاثیر کی مکمل تصدیق ممکن نہیں ہے۔ پیمائش کے دورانیے کو بڑھانے کی سفارش کی گئی ہے۔

اصلاح کی سمت

  1. دوسرے اشارے ، جیسے MACD ، KD ، وغیرہ کو شامل کرنے کے لئے فلٹرنگ پر غور کیا جاسکتا ہے ، تاکہ داخلے میں غلط اطلاعات کو کم کیا جاسکے۔

  2. اسٹاپ نقصان کی شدت کو متحرک طور پر اتار چڑھاؤ پر مبنی طریقہ کار کے ذریعہ ایڈجسٹ کیا جاسکتا ہے۔

  3. مختلف اقسام کے پیرامیٹرز کو بہتر بنانے اور پیرامیٹرز کے انتخاب کے معیار کو تیار کرنے کے لئے مطالعہ کیا جاسکتا ہے۔

  4. متحرک طور پر حکمت عملی کے پیرامیٹرز کو بہتر بنانے کے لئے مشین لرننگ کے طریقوں کو آزمائیں۔

  5. قیمتوں کی تصدیق میں شامل کیا جاسکتا ہے ، تاکہ جھوٹی توڑ سے بچا جاسکے۔

  6. اس کے بجائے ایک سادہ تناسب سٹاپ کے طور پر ایک سٹاپ کے طور پر MA پار کرنے کے لئے غور کیا جا سکتا ہے.

خلاصہ کریں۔

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

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2023-09-08 00:00:00
end: 2023-10-08 00:00:00
period: 2h
basePeriod: 15m
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/
// © BigCoinHunter

//@version=5
strategy(title="RSI_OTT-TP/SL", overlay=true, 
     pyramiding=0, default_qty_type=strategy.percent_of_equity, 
     default_qty_value=100, initial_capital=1000, 
     currency=currency.USD, commission_value=0.05, 
     commission_type=strategy.commission.percent, 
     process_orders_on_close=true)

//----------- get the user inputs --------------

//---------- RSI -------------
price = input(close, title="Source")

RSIlength = input.int(defval=6,title="RSI Length") 
RSIoverSold = input.int(defval=50, title="RSI OverSold", minval=1)
RSIoverBought = input.int(defval=50, title="RSI OverBought", minval=1)

//------- OTT Bands ----------------
src = close
length=input.int(defval=1, title="OTT Period", minval=1)
percent=input.float(defval=5, title="OTT Percent", step=0.1, minval=0.001)

mav = input.string(title="OTT MA Type", defval="VAR", options=["SMA", "EMA", "WMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF"])

ottUpperPercent = input.float(title="OTT Upper Line Coeff", defval=0.01, minval = 0.001, step=0.001)
ottLowerPercent = input.float(title="OTT Lower Line Coeff", defval=0.01, minval = 0.001, step=0.001)

Var_Func(src,length)=>
    valpha=2/(length+1)
    vud1=src>src[1] ? src-src[1] : 0
    vdd1=src<src[1] ? src[1]-src : 0
    vUD=math.sum(vud1,9)
    vDD=math.sum(vdd1,9)
    vCMO=nz((vUD-vDD)/(vUD+vDD))
    VAR=0.0
    VAR:=nz(valpha*math.abs(vCMO)*src)+(1-valpha*math.abs(vCMO))*nz(VAR[1])
    
VAR=Var_Func(src,length)

Wwma_Func(src,length)=>
    wwalpha = 1/ length
    WWMA = 0.0
    WWMA := wwalpha*src + (1-wwalpha)*nz(WWMA[1])
    
WWMA=Wwma_Func(src,length)

Zlema_Func(src,length)=>
    zxLag = length/2==math.round(length/2) ? length/2 : (length - 1) / 2
    zxEMAData = (src + (src - src[zxLag]))
    ZLEMA = ta.ema(zxEMAData, length)
    
ZLEMA=Zlema_Func(src,length)

Tsf_Func(src,length)=>
    lrc = ta.linreg(src, length, 0)
    lrc1 = ta.linreg(src,length,1)
    lrs = (lrc-lrc1)
    TSF = ta.linreg(src, length, 0)+lrs
    
TSF=Tsf_Func(src,length)

getMA(src, length) =>
    ma = 0.0
    if mav == "SMA"
        ma := ta.sma(src, length)
        ma

    if mav == "EMA"
        ma := ta.ema(src, length)
        ma

    if mav == "WMA"
        ma := ta.wma(src, length)
        ma

    if mav == "TMA"
        ma := ta.sma(ta.sma(src, math.ceil(length / 2)), math.floor(length / 2) + 1)
        ma

    if mav == "VAR"
        ma := VAR
        ma

    if mav == "WWMA"
        ma := WWMA
        ma

    if mav == "ZLEMA"
        ma := ZLEMA
        ma

    if mav == "TSF"
        ma := TSF
        ma
    ma
    
MAvg=getMA(src, length)
fark=MAvg*percent*0.01
longStop = MAvg - fark
longStopPrev = nz(longStop[1], longStop)
longStop := MAvg > longStopPrev ? math.max(longStop, longStopPrev) : longStop
shortStop =  MAvg + fark
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := MAvg < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop
dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir
MT = dir==1 ? longStop: shortStop

OTT=MAvg>MT ? MT*(200+percent)/200 : MT*(200-percent)/200

light_green=#08ff12
light_red=#fe0808

OTTupper = nz(OTT[2])*(1+ottUpperPercent)
OTTlower = nz(OTT[2])*(1-ottLowerPercent)

p1 = plot(OTTupper, color=light_green, linewidth=1, title="OTT UPPER")
p2 = plot(nz(OTT[2]), color=color.new(color.yellow,0), linewidth=1, title="OTT MIDDLE")
p3 = plot(OTTlower, color=light_red, linewidth=1, title="OTT LOWER")

fill(plot1=p1, plot2=p3, title="OTT Background", color=color.new(color.aqua,90), fillgaps=false, editable=true)

buyEntry = ta.crossover(src, OTTlower)
sellEntry = ta.crossunder(src, OTTupper)

//---------- input TP/SL ---------------
tp = input.float(title="Take Profit:", defval=0.0, minval=0.0, maxval=100.0, step=0.1) * 0.01
sl = input.float(title="Stop Loss:  ", defval=0.0, minval=0.0, maxval=100.0, step=0.1) * 0.01

isEntryLong = input.bool(defval=true, title= 'Long Entry', inline="11")
isEntryShort = input.bool(defval=true, title='Short Entry', inline="11")

//---------- backtest range setup ------------
fromDay   = input.int(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input.int(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear  = input.int(defval = 2021, title = "From Year", minval = 2010)
toDay     = input.int(defval = 30, title = "To Day", minval = 1, maxval = 31)
toMonth   = input.int(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear    = input.int(defval = 2022, title = "To Year", minval = 2010)

//------------ time interval setup -----------
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)  // backtest start window
finish    = timestamp(toYear, toMonth, toDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"

//------- define the global variables ------
var bool long = true
var bool stoppedOutLong = false
var bool stoppedOutShort = false

//--------- Colors ---------------
//TrendColor = RSIoverBought and (price[1] > BBupper and price < BBupper) and BBbasis < BBbasis[1] ? color.red : RSIoverSold and (price[1] < BBlower and price > BBlower) and BBbasis > BBbasis[1] ? color.green : na
//bgcolor(switch2?(color.new(TrendColor,50)):na)


//--------- calculate the input/output points -----------
longProfitPrice  = strategy.position_avg_price * (1 + tp)     // tp -> take profit percentage
longStopPrice = strategy.position_avg_price * (1 - sl)        // sl -> stop loss percentage

shortProfitPrice  = strategy.position_avg_price * (1 - tp)
shortStopPrice = strategy.position_avg_price * (1 + sl)


//---------- RSI + Bollinger Bands Strategy -------------
vrsi = ta.rsi(price, RSIlength)

rsiCrossOver = ta.crossover(vrsi, RSIoverSold)
rsiCrossUnder = ta.crossunder(vrsi, RSIoverBought)

OTTCrossOver = ta.crossover(src, OTTlower)
OTTCrossUnder = ta.crossunder(src, OTTupper)

if (not na(vrsi))

    if rsiCrossOver and OTTCrossOver
        long := true
        
    if rsiCrossUnder and OTTCrossUnder
        long := false

//------- define the global variables ------
buySignall = false
sellSignall = false

//------------------- determine buy and sell points ---------------------
buySignall := window() and long  and (not stoppedOutLong)
sellSignall := window() and (not long)  and (not stoppedOutShort)


//---------- execute the strategy -----------------
if(isEntryLong and isEntryShort)
    if long 
        strategy.entry("LONG", strategy.long, when = buySignall, comment = "ENTER LONG")
        stoppedOutLong := true
        stoppedOutShort := false
    else 
        strategy.entry("SHORT", strategy.short, when = sellSignall, comment = "ENTER SHORT")
        stoppedOutLong  := false
        stoppedOutShort := true

else if(isEntryLong)
    strategy.entry("LONG", strategy.long,  when = buySignall)
    strategy.close("LONG", when = sellSignall)
    if long 
        stoppedOutLong := true
    else
        stoppedOutLong  := false

else if(isEntryShort)
    strategy.entry("SHORT", strategy.short, when = sellSignall)
    strategy.close("SHORT", when = buySignall)
    if not long
        stoppedOutShort := true
    else
        stoppedOutShort := false
    

//----------------- take profit and stop loss -----------------
if(tp>0.0 and sl>0.0)
    if ( strategy.position_size > 0 )
        strategy.exit(id="LONG", limit=longProfitPrice, stop=longStopPrice, comment="Long TP/SL Trigger")

    else if ( strategy.position_size < 0 )
        strategy.exit(id="SHORT", limit=shortProfitPrice, stop=shortStopPrice, comment="Short TP/SL Trigger")

else if(tp>0.0)
    if ( strategy.position_size > 0 )
        strategy.exit(id="LONG", limit=longProfitPrice, comment="Long TP Trigger")

    else if ( strategy.position_size < 0 )
        strategy.exit(id="SHORT", limit=shortProfitPrice, comment="Short TP Trigger")
        
else if(sl>0.0)
    if ( strategy.position_size > 0 )
        strategy.exit(id="LONG",  stop=longStopPrice, comment="Long SL Trigger")

    else if ( strategy.position_size < 0 )
        strategy.exit(id="SHORT",  stop=shortStopPrice, comment="Short SL Trigger")