یہ ایک رفتار پر مبنی حکمت عملی ہے جو ٹریڈنگ سگنل پیدا کرنے کے لئے آئسولیٹر اشارے جیسے آر ایس آئی ، اسٹاک ، ایم اے سی ڈی کا استعمال کرتی ہے۔ بنیادی خیال یہ ہے کہ اشارے کا استعمال کرتے ہوئے جب قیمت میں آئسولیشن ہوتی ہے تو رجحان کی سمت کی نشاندہی کی جائے اور اشارے کے اشاروں کی بنیاد پر تجارت کی جائے۔ یہ حکمت عملی اسٹاپ نقصان کے لئے تاخیر سے سپر ٹرینڈ کا بھی استعمال کرتی ہے۔
حکمت عملی پہلے اپنی مرضی کے مطابق فنکشن f_getOscilatorValues کو کال کرتی ہے تاکہ RSI ، اسٹاک ، MACD وغیرہ سمیت مختلف آسکیلیٹر اشارے کی اقدار حاصل کی جاسکیں۔ پھر یہ اسٹاپ نقصان کو ٹریک کرنے کے لئے f_getSupertrend کے ساتھ تاخیر سے سپر ٹرینڈ اقدار کا حساب لگاتا ہے۔
اشارے کے حساب کتاب کے بعد ، حکمت عملی f_getBuySellStops کو اشارے کی اقدار کی بنیاد پر انٹری اسٹاپس اور منافع کے اہداف کا حساب کتاب کرنے کے لئے بلاتی ہے۔ خاص طور پر ، یہ اے ٹی آر کا حساب لگاتا ہے اور اے ٹی آر کو انٹری اسٹاپ کے طور پر اسٹاپ نقصان کے ضارب سے ضرب کرتا ہے ، اور اے ٹی آر کو منافع کے اہداف کے طور پر منافع لینے کے ضارب سے ضرب دیتا ہے۔ جب رجحان الٹ جاتا ہے تو اسٹاپس اور اہداف کو ایڈجسٹ کیا جائے گا۔
اس کے بعد ، حکمت عملی موم بتی کی سمت کا تعین کرتی ہے۔ اپ ٹرینڈ موم بتیاں سبز رنگ کی ہوتی ہیں اور ڈاؤن ٹرینڈ موم بتیاں سرخ رنگ کی ہوتی ہیں۔ موم بتیاں اور اشارے کو پلاٹ کرنے کے بعد ، حکمت عملی چیک کرتی ہے کہ آیا اندراج کی شرائط پوری ہوچکی ہیں۔ اندراج کی شرائط اس وقت خرید رہی ہیں جب اشارے اوور بُک دکھاتا ہے اور قیمت اوپری بینڈ سے اوپر ٹوٹ جاتی ہے ، اور جب اشارے اوور سیل دکھاتا ہے اور قیمت نچلی بینڈ سے نیچے ٹوٹ جاتی ہے۔ ایک فلٹرنگ کی شرط بھی ہے جس کی ضرورت ہوتی ہے کہ قیمت اعلی ٹائم فریم حرکت پذیر اوسط کو توڑ دے۔
داخل ہونے کے بعد ، اسٹاپ نقصان کو اوپری / نچلے بینڈ کے پیچھے کیا جاتا ہے جو بھی قریب ہے۔ جب اسٹاپ نقصان کو متحرک کیا جاتا ہے تو ، پوزیشن بند کردی جاتی ہے۔ جب قیمت منافع کے ہدف تک پہنچ جاتی ہے تو ، جزوی منافع لیا جاتا ہے۔
اس حکمت عملی کے فوائد یہ ہیں:
رجحان کی سمت کی نشاندہی کرنے کے لئے اوسیلیٹرز کا استعمال کرتے ہوئے قلیل مدتی الٹ کے مواقع کو بروقت پکڑ سکتا ہے۔
تاخیر سے سپر ٹرینڈ سٹاپ نقصان کا اطلاق نقصان میں اضافہ ہونے سے پہلے روک سکتا ہے، ایک ہی تجارت کے نقصان کو محدود کرتا ہے.
متحرک اے ٹی آر پر مبنی سٹاپ نقصان اور منافع کا ہدف کا حساب لگانے سے پوزیشن سائزنگ کو ایڈجسٹ کرنے میں مدد ملتی ہے۔
زیادہ وقت کے فریم کے ساتھ فلٹرنگ چلتی اوسط میں پھنس جانے سے بچتی ہے.
جزوی منافع لینے سے منافع چلتا ہے جبکہ کچھ منافع کو مقفل کرتا ہے۔
منطق کوانٹم ٹریڈنگ شروع کرنے والوں کے لیے سادہ اور سمجھنے میں آسان ہے۔
اس حکمت عملی کے کچھ خطرات میں شامل ہیں:
آسکیلیٹرز میں تاخیر کے مسائل ہوسکتے ہیں ، جس کی وجہ سے تاخیر سے داخل ہونے اور قبل از وقت باہر نکلنے کے سگنل پیدا ہوسکتے ہیں۔ پیرامیٹرز کو بہتر بنانے یا رجحان کی پیروی کرنے والے اشارے شامل کرکے اس میں بہتری لائی جاسکتی ہے۔
تنگ سٹاپ نقصان مارا جا سکتا ہے۔ سٹاپ نقصان کی حد کو وسیع کیا جا سکتا ہے یا چانڈیلیئر جیسے متحرک اسٹاپ استعمال کیے جا سکتے ہیں۔
جزوی منافع لینے کے بعد باقی پوزیشن کو روک دیا جاسکتا ہے۔ جزوی منافع کا تناسب کم کیا جاسکتا ہے۔
بیک ٹیسٹ اوور فٹنس کا خطرہ۔ اسٹریٹجی کو مختلف مارکیٹوں میں درست کیا جانا چاہئے۔
اعلی ٹائم فریم چلتی اوسط فلٹر کی ناکامی۔ رجحان کی درجہ بندی کے طریقوں کو ایک ساتھ استعمال کیا جانا چاہئے۔
حکمت عملی کو مندرجہ ذیل پہلوؤں میں بہتر بنایا جاسکتا ہے:
oscillator پیرامیٹرز کے مختلف مجموعے کی جانچ کریں اور ان لوگوں کو تلاش کریں جو معیار کے سگنل فراہم کرتے ہیں.
ATR یا چلتی اوسط کی بنیاد پر منافع کی روک تھام کے ساتھ جزوی منافع لینے کی کوشش کریں.
رجحان تجزیہ کے لئے چلتی اوسط کی جگہ لینے اور درستگی کو بہتر بنانے کے لئے مشین لرننگ الگورتھم شامل کریں.
غیر ضروری تبدیلیوں سے بچنے کے لئے فلٹرنگ کے حالات کے طور پر حجم کے اشارے شامل کریں.
اثاثہ کے لئے زیادہ سے زیادہ مجموعہ تلاش کرنے کے لئے اشارے کو جمع اور وزن کریں.
سٹاپ، اہداف اور پوزیشن سائزنگ کو متحرک طور پر بہتر بنانے کے لئے مشین لرننگ رسک کنٹرول ماڈیولز شامل کریں۔
مستقبل اور اسپاٹ کے درمیان قیمت کے پھیلاؤ کا استعمال کرتے ہوئے مثلث ثالثی یا بیس ٹریڈنگ سگنل شامل کریں.
مجموعی طور پر یہ اشارے اور رسک مینجمنٹ پر توجہ مرکوز کرنے والے واضح منطق کے ساتھ کوانٹ ٹریڈنگ کے ابتدائی افراد کے لئے ایک عمدہ حکمت عملی ہے۔ لیکن براہ راست تجارت کے لئے پیرامیٹر کی اصلاح اور رسک میں کمی کی ضرورت ہے۔ یہ مضبوطی کو بہتر بنانے کے لئے رجحان تجزیہ ، اسٹاپ نقصان کی اصلاح ، مجموعی ماڈل وغیرہ جیسے پہلوؤں میں بھی بڑھا سکتا ہے۔ تجارتی حکمت عملی کے سانچے کے طور پر ، یہ قیمتی حوالہ فراہم کرتا ہے۔
/*backtest start: 2023-08-26 00:00:00 end: 2023-09-25 00:00:00 period: 1h 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/ // © HeWhoMustNotBeNamed //@version=4 strategy("Oscilator candles - strategy", overlay=false, initial_capital = 1000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01, calc_on_order_fills = true) oscilatorType = input(title="Oscliator Type", defval="stoch", options=["rsi", "stoch", "cog", "macd", "tsi", "cci", "cmo", "mfi"]) length = input(3) shortlength = input(3) longlength = input(9) showSupertrend = input(true) AtrMAType = input(title="Moving Average Type", defval="rma", options=["ema", "sma", "hma", "rma", "vwma", "wma"]) AtrLength = input(30, step=10) stopMultiplier = input(4) targetMultiplier = input(3) wicks = input(true) considerWicksForDelayByStep = input(false) colorByPreviousClose = input(true) useHTFPivot = input(false) resolution = input("12M", type=input.resolution) HTFMultiplier = input(4, title="Higher Timeframe multiplier (Used when resolution is set to Same as Symbol)", minval=2, step=1) PivotLength = input(2, step=1) tradeDirection = input(title="Trade Direction", defval=strategy.direction.long, options=[strategy.direction.all, strategy.direction.long, strategy.direction.short]) i_startTime = input(defval = timestamp("01 Jan 2010 00:00 +0000"), title = "Backtest Start Time", type = input.time) i_endTime = input(defval = timestamp("01 Jan 2099 00:00 +0000"), title = "Backtest End Time", type = input.time) inDateRange = true f_getOscilatorValues(oscilatorType, length, shortlength, longlength)=> oOpen = rsi(open, length) oClose = rsi(close, length) oHigh = rsi(high, length) oLow = rsi(low, length) if(oscilatorType == "tsi") oOpen := tsi(open, shortlength, longlength) oClose := tsi(close, shortlength, longlength) oHigh := tsi(high, shortlength, longlength) oLow := tsi(low, shortlength, longlength) if(oscilatorType == "stoch") oOpen := stoch(open, longlength, shortlength, length) oClose := stoch(close, longlength, shortlength, length) oHigh := stoch(high, longlength, shortlength, length) oLow := stoch(low, longlength, shortlength, length) if(oscilatorType == "cci") oOpen := cci(open, length) oClose := cci(close, length) oHigh := cci(high, length) oLow := cci(low, length) if(oscilatorType == "cog") oOpen := cog(open, length) oClose := cog(close, length) oHigh := cog(high, length) oLow := cog(low, length) if(oscilatorType == "cmo") oOpen := cmo(open, length) oClose := cmo(close, length) oHigh := cmo(high, length) oLow := cmo(low, length) if(oscilatorType == "mfi") oOpen := mfi(open, length) oClose := mfi(close, length) oHigh := mfi(high, length) oLow := mfi(low, length) if(oscilatorType == "macd") [macdLineOpen, signalLineOpen, histLineOpen] = macd(open, shortlength, longlength, length) [macdLineClose, signalLineClose, histLineClose] = macd(close, shortlength, longlength, length) [macdLineHigh, signalLineHigh, histLineHigh] = macd(high, shortlength, longlength, length) [macdLineLow, signalLineLow, histLineLow] = macd(low, shortlength, longlength, length) oOpen := macdLineOpen oClose := macdLineClose oHigh := macdLineHigh oLow := macdLineLow [oOpen, oClose, oHigh, oLow] f_getMovingAverage(source, MAType, length)=> ma = sma(source, length) if(MAType == "ema") ma := ema(source,length) if(MAType == "hma") ma := hma(source,length) if(MAType == "rma") ma := rma(source,length) if(MAType == "vwma") ma := vwma(source,length) if(MAType == "wma") ma := wma(source,length) ma f_getSupertrend(oOpen, oClose, oHigh, oLow, AtrMAType, AtrLength, stopMultiplier, wicks)=> truerange = max(oHigh, oClose[1]) - min(oLow, oClose[1]) averagetruerange = f_getMovingAverage(truerange, AtrMAType, AtrLength) atr = averagetruerange * stopMultiplier longStop = oClose - atr longStopPrev = nz(longStop[1], longStop) longStop := (wicks ? oLow[1] : oClose[1]) > longStopPrev ? max(longStop, longStopPrev) : longStop shortStop = oClose + atr shortStopPrev = nz(shortStop[1], shortStop) shortStop := (wicks ? oHigh[1] : oClose[1]) < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop dir = 1 dir := nz(dir[1], dir) dir := dir == -1 and (wicks ? oHigh : oClose) > shortStopPrev ? 1 : dir == 1 and (wicks ? oLow : oClose) < longStopPrev ? -1 : dir trailingStop = dir == 1? longStop : shortStop [dir, trailingStop] f_getBuySellStops(oOpen, oClose, oHigh, oLow, AtrMAType, AtrLength, considerWicks, considerWicksForDelayByStep, stopMultiplier, targetMultiplier)=> barState = 0 source = oClose truerange = max(oHigh, oClose[1]) - min(oLow, oClose[1]) atr = f_getMovingAverage(truerange, AtrMAType, AtrLength) buyStop = source - atr * stopMultiplier sellStop = source + atr * stopMultiplier buyStopDerived = buyStop sellStopDerived = sellStop highTarget = considerWicks ? oHigh : source lowTarget = considerWicks ? oLow : source highTargetDelayByStep = considerWicksForDelayByStep ? oHigh : source lowTargetDelayByStep = considerWicksForDelayByStep ? oLow : source barState := highTarget > sellStopDerived[1] ? 1 : lowTarget < buyStopDerived[1] ? -1 : nz(barState[1],0) buyMultiplier = (barState == 1)? stopMultiplier : targetMultiplier sellMultiplier = (barState == -1)? stopMultiplier : targetMultiplier buyStop := source - atr * buyMultiplier sellStop := source + atr * sellMultiplier buyStop := barState == 1? max(buyStop, buyStop[1]) : barState == -1? min(buyStop, buyStop[1]) : buyStop sellStop := barState == 1? max(sellStop, sellStop[1]) : barState == -1? min(sellStop, sellStop[1]) : sellStop buyStopDerived := buyStop sellStopDerived := sellStop buyStopDerived := highTargetDelayByStep < sellStopDerived[1] and lowTargetDelayByStep > buyStopDerived[1] ? buyStopDerived[1] : buyStopDerived sellStopDerived := highTargetDelayByStep < sellStopDerived[1] and lowTargetDelayByStep > buyStopDerived[1] ? sellStopDerived[1] : sellStopDerived [buyStopDerived, sellStopDerived, barState] f_secureSecurity(_symbol, _res, _src) => security(_symbol, _res, _src[1], lookahead = barmerge.lookahead_on, gaps=barmerge.gaps_off) f_multiple_resolution(HTFMultiplier) => target_Res_In_Min = timeframe.multiplier * HTFMultiplier * ( timeframe.isseconds ? 1. / 60. : timeframe.isminutes ? 1. : timeframe.isdaily ? 1440. : timeframe.isweekly ? 7. * 24. * 60. : timeframe.ismonthly ? 30.417 * 24. * 60. : na) target_Res_In_Min <= 0.0417 ? "1S" : target_Res_In_Min <= 0.167 ? "5S" : target_Res_In_Min <= 0.376 ? "15S" : target_Res_In_Min <= 0.751 ? "30S" : target_Res_In_Min <= 1440 ? tostring(round(target_Res_In_Min)) : tostring(round(min(target_Res_In_Min / 1440, 365))) + "D" f_getPivotHighLow(oOpen, oClose, oHigh, oLow, HTFMultiplier, resolution, PivotLength)=> derivedResolution = resolution == ""? f_multiple_resolution(HTFMultiplier) : resolution HTFHigh = f_secureSecurity(syminfo.tickerid, derivedResolution, oHigh) HTFLow = f_secureSecurity(syminfo.tickerid, derivedResolution, oLow) CLOSEprev = f_secureSecurity(syminfo.tickerid, derivedResolution, oClose) pivothi = pivothigh(HTFHigh, PivotLength, PivotLength) pivotlo = pivotlow(HTFLow, PivotLength, PivotLength) pivothi := na(pivothi)? nz(pivothi[1]) : pivothi pivotlo := na(pivotlo)? nz(pivotlo[1]) : pivotlo [pivothi, pivotlo] [oOpen, oClose, oHigh, oLow] = f_getOscilatorValues(oscilatorType, length, shortlength, longlength) [dir, trailingStop] = f_getSupertrend(oOpen, oClose, oHigh, oLow, AtrMAType, AtrLength, stopMultiplier, wicks) candleColor = colorByPreviousClose ? (oClose[1] < oClose ? color.green : oClose[1] > oClose ? color.red : color.silver) : (oOpen < oClose ? color.green : oOpen > oClose ? color.red : color.silver) plotcandle(oOpen, oHigh, oLow, oClose, 'Oscilator Candles', color = candleColor) [buyStopDerived, sellStopDerived, barState] = f_getBuySellStops(oOpen, oClose, oHigh, oLow, AtrMAType, AtrLength, wicks, considerWicksForDelayByStep, stopMultiplier, targetMultiplier) trailingStopDerived = barState == 1? buyStopDerived : sellStopDerived plot(showSupertrend?trailingStopDerived:na, title="TrailingStop", style=plot.style_linebr, linewidth=1, color= barState == 1 ? color.green : color.red) [pivotHigh, pivotLow] = f_getPivotHighLow(open, close, high, low, HTFMultiplier, resolution, PivotLength) buyCondition = (barState == 1) and (close > pivotHigh or not useHTFPivot) exitBuyConditin = (barState == -1) sellCondition = (barState == -1) and (close < pivotLow or not useHTFPivot) exitSellCondition = (barState == 1) // strategy.risk.allow_entry_in(tradeDirection) strategy.entry("Buy", strategy.long, when=buyCondition and inDateRange, oca_name="oca") strategy.entry("Sell", strategy.short, when=sellCondition and inDateRange, oca_name="oca") strategy.close("Buy", when = exitBuyConditin) strategy.close( "Sell", when = exitSellCondition)