اس حکمت عملی کا نام RSI_OTT-TP / SL ہے۔ یہ رجحان کی پیروی کرنے والی حکمت عملیوں سے تعلق رکھنے والے تجارتی سگنلز کا تعین کرنے کے لئے RSI اشارے اور OTT بینڈ کو جوڑتا ہے۔ حکمت عملی RSI اشارے کے ذریعہ مارکیٹ کے رجحان کی سمت کا فیصلہ کرتی ہے اور مخصوص انٹری پوائنٹس کا پتہ لگانے کے لئے OTT بینڈ کا استعمال کرتی ہے۔ یہ صارفین کو منافع میں مقفل کرنے یا نقصانات سے بچنے کے لئے منافع اور اسٹاپ نقصان کے تناسب کو بھی ترتیب دینے کی اجازت دیتی ہے۔
اس حکمت عملی میں رجحان اور انٹری پوائنٹس کا تعین کرنے کے لئے آر ایس آئی اور او ٹی ٹی اشارے استعمال کیے جاتے ہیں۔
آر ایس آئی کا استعمال مجموعی رجحان کی سمت کا اندازہ کرنے کے لئے کیا جاتا ہے۔ آر ایس آئی یہ ظاہر کرسکتا ہے کہ آیا مارکیٹ زیادہ خرید یا زیادہ فروخت ہوئی ہے۔ آر ایس آئی زیادہ خرید کی سطح سے تجاوز کرنا خرید کا اشارہ ہے ، جبکہ زیادہ فروخت کی سطح سے نیچے عبور کرنا فروخت کا اشارہ ہے۔ اس حکمت عملی میں ڈیفالٹ آر ایس آئی کی لمبائی 6 ہے ، زیادہ خرید کی سطح 50 ہے اور زیادہ فروخت کی سطح بھی 50 ہے۔
او ٹی ٹی بینڈ انٹری پوائنٹس کا پتہ لگانے کے لئے استعمال ہوتے ہیں۔ وہ Volatility Rate of Change (VAR) اشارے کی بنیاد پر بننے والے بینڈ ہیں۔ جب قیمت نچلے بینڈ کو اوپر کی طرف توڑتی ہے تو ، یہ خرید کا اشارہ ہے۔ جب قیمت اوپری بینڈ کو نیچے کی طرف توڑتی ہے تو ، یہ فروخت کا اشارہ ہے۔
رجحان کا تعین کرنے اور انٹری پوائنٹ کی تصدیق کرنے کے بعد، یہ حکمت عملی جب قیمت او ٹی ٹی بینڈ کو توڑتی ہے تو طویل یا مختصر پوزیشن کھولے گی.
منافع اور اسٹاپ نقصان کو صارفین کے لئے اپنی مرضی کے مطابق کرنے کے لئے ان پٹ بکس کے ذریعہ مقرر کیا جاسکتا ہے۔ جب منافع یا اسٹاپ نقصان کی قیمت کو چھو جاتا ہے تو حکمت عملی خود بخود پوزیشنیں بند کردے گی۔
یہ حکمت عملی صرف طویل، صرف مختصر یا دونوں سمتوں میں تجارت کی اجازت دیتی ہے۔
آر ایس آئی اور او ٹی ٹی بینڈ کو یکجا کرنے سے درست رجحان کی تشخیص کے تحت اعلی امکان کے اندراج پوائنٹس مل سکتے ہیں۔
او ٹی ٹی بینڈ رفتار اشارے کا استعمال کرتے ہیں اور قیمتوں میں اتار چڑھاؤ کے لئے بہت حساس ہیں ، جو ابتدائی طور پر موڑ کے مقامات کا پتہ لگاسکتے ہیں۔
منافع حاصل کرنے اور نقصان کو روکنے کے افعال منافع میں مقفل کرنے اور ان کی توسیع سے پہلے نقصانات کو محدود کرنے میں مدد کرتے ہیں، جو خطرے کے کنٹرول کو فائدہ پہنچاتا ہے.
کوڈ کی ساخت کافی تبصرے کے ساتھ واضح ہے، سمجھنے اور تبدیل کرنے میں آسان ہے.
حکمت عملی کے پیرامیٹرز کو مختلف مارکیٹ کے ماحول میں اپنانے کے لئے انٹرفیس کے ذریعے لچکدار طریقے سے ایڈجسٹ کیا جاسکتا ہے۔
آر ایس آئی کے پاس تاخیر کا مسئلہ ہے اور رجحان کی تبدیلی کے نکات کو یاد کر سکتا ہے ، جس سے غیر ضروری نقصانات کا سامنا کرنا پڑتا ہے۔
او ٹی ٹی بینڈ غلط سگنل بھی پیدا کرسکتے ہیں۔ موم بتی کے نمونوں سے تصدیق کرنا بہتر ہے۔
غلط منافع اور اسٹاپ نقصان کی ترتیبات حکمت عملی کی کارکردگی کو متاثر کریں گی۔ مختلف مصنوعات کے لئے پیرامیٹرز کو ایڈجسٹ کرنے کی ضرورت ہے۔
حکمت عملی کا بیک ٹسٹ صرف ایک ہی پروڈکٹ پر کیا جاتا ہے۔ براہ راست تجارت میں مختلف مصنوعات کے لئے پیرامیٹرز کو الگ الگ بہتر بنایا جانا چاہئے۔
بیک ٹسٹ ٹائم ونڈو مختصر ہے اور اس سے حکمت عملی کی تاثیر کو مکمل طور پر درست نہیں کیا جاسکتا ہے۔ بیک ٹسٹ کی مدت میں توسیع کی سفارش کی جاتی ہے۔
غلط اندراجات کو کم کرنے کے لئے فلٹرنگ کے لئے دیگر اشارے شامل کرنے پر غور کریں، جیسے MACD، KD وغیرہ.
منافع لینے اور سٹاپ نقصان کی حدیں اتار چڑھاؤ کی بنیاد پر متحرک طور پر ایڈجسٹ کی جاسکتی ہیں۔
مختلف مصنوعات کے لئے پیرامیٹرز کے انتخاب کے معیار کو قائم کرنے کے لئے ریسرچ پیرامیٹرز کی اصلاح.
مشین سیکھنے کے طریقوں کو آزمائیں حکمت عملی کے پیرامیٹرز کو متحرک طور پر بہتر بنانے کے لئے.
غلط بریک آؤٹ سے بچنے کے لئے حجم کی تصدیق شامل کریں۔ رجحانات کا تعین کرنے کے لئے حجم کے اشارے بھی استعمال کیے جاسکتے ہیں۔
سادہ فیصد سٹاپ نقصان کے بجائے سٹاپ نقصان کے طور پر ایم اے دخول کا استعمال کرنے پر غور کریں۔
خلاصہ یہ ہے کہ ، یہ ایک عام رجحان کی پیروی کرنے والی حکمت عملی ہے۔ یہ پہلے آر ایس آئی کے ذریعہ رجحان کی سمت کا اندازہ لگاتا ہے ، پھر مخصوص انٹری پوائنٹس کا تعین کرنے میں مدد کے لئے او ٹی ٹی بینڈ کا استعمال کرتا ہے ، اور آخر میں منافع میں تالا لگانے اور خطرات پر قابو پانے کے لئے منافع اور نقصان کو روکنے کے لئے سیٹ کرتا ہے۔ اس حکمت عملی کے فوائد آسان اور موثر اشارے کے مجموعے اور اچھے بیک ٹیسٹ کے نتائج ہیں۔ لیکن کچھ خطرات بھی ہیں جیسے آر ایس آئی لیگ اور او ٹی ٹی بینڈ غلط سگنل۔ اس سے ہمیں براہ راست تجارت میں پیرامیٹرز کو احتیاط سے بہتر بنانا پڑتا ہے ، اور حکمت عملی کے استحکام کو بہتر بنانے کے لئے تصدیق کے لئے دیگر تکنیکی اشارے شامل کرنا پڑتے ہیں۔ مسلسل اصلاح اور توثیق کے ساتھ ، یہ حکمت عملی ایک بہت ہی عملی رجحان کی پیروی کرنے والی ٹیمپلیٹ حکمت عملی بن سکتی ہے۔
/*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")