آر ایس آئی اور او ٹی ٹی بینڈس اسٹریٹجی تجزیہ

مصنف:چاؤ ژانگ، تاریخ: 2023-10-09 16:21:20
ٹیگز:

جائزہ

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

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

  1. اس حکمت عملی میں رجحان اور انٹری پوائنٹس کا تعین کرنے کے لئے آر ایس آئی اور او ٹی ٹی اشارے استعمال کیے جاتے ہیں۔

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

  3. او ٹی ٹی بینڈ انٹری پوائنٹس کا پتہ لگانے کے لئے استعمال ہوتے ہیں۔ وہ Volatility Rate of Change (VAR) اشارے کی بنیاد پر بننے والے بینڈ ہیں۔ جب قیمت نچلے بینڈ کو اوپر کی طرف توڑتی ہے تو ، یہ خرید کا اشارہ ہے۔ جب قیمت اوپری بینڈ کو نیچے کی طرف توڑتی ہے تو ، یہ فروخت کا اشارہ ہے۔

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

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

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

فوائد

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

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

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

  4. کوڈ کی ساخت کافی تبصرے کے ساتھ واضح ہے، سمجھنے اور تبدیل کرنے میں آسان ہے.

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

خطرات

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

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

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

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

  5. بیک ٹسٹ ٹائم ونڈو مختصر ہے اور اس سے حکمت عملی کی تاثیر کو مکمل طور پر درست نہیں کیا جاسکتا ہے۔ بیک ٹسٹ کی مدت میں توسیع کی سفارش کی جاتی ہے۔

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

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

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

  3. مختلف مصنوعات کے لئے پیرامیٹرز کے انتخاب کے معیار کو قائم کرنے کے لئے ریسرچ پیرامیٹرز کی اصلاح.

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

  5. غلط بریک آؤٹ سے بچنے کے لئے حجم کی تصدیق شامل کریں۔ رجحانات کا تعین کرنے کے لئے حجم کے اشارے بھی استعمال کیے جاسکتے ہیں۔

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

خلاصہ

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


/*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")




مزید