یہ حکمت عملی ضرب حرکت پذیر اوسط لائن کا حساب لگاتی ہے اور قیمت اور پی ایم ایکس اشارے کے کراسنگ کو یکجا کرتی ہے تاکہ رجحان کی سمت کا تعین کیا جاسکے۔ جب رجحان اوپر جاتا ہے تو یہ دو طرفہ تجارت کرتا ہے اور جب رجحان نیچے جاتا ہے تو مختصر ہوتا ہے ، منافع کے ساتھ باہر نکلنے کے لئے حقیقی وقت میں پوزیشن کے خطرے کا اندازہ لگاتا ہے۔
اس حکمت عملی کا بنیادی اشارے ضرب متحرک اوسط لائن ہے۔ اشارے کے پیرامیٹرز میں شامل ہیں: اے ٹی آر کی مدت ، اے ٹی آر ضرب ، حرکت پذیر اوسط کی قسم اور لمبائی۔ اے ٹی آر کی قیمت مدت کے دوران اتار چڑھاؤ کی نمائندگی کرتی ہے۔ ضرب متحرک اوسط لائن اوسط قیمت کے برابر ہے جس میں مدت کے دوران اے ٹی آر ضرب اور اے ٹی آر کا مصنوعہ ہے۔ جب قیمت لائن سے اوپر ہوتی ہے تو ایک لمبا سگنل ہوتا ہے۔ جب قیمت لائن سے نیچے ہوتی ہے تو ایک مختصر سگنل ہوتا ہے۔
PMax اشارے سٹاپ نقصان یا منافع لینے کی قیمت کی نمائندگی کرتا ہے۔ یہ ATR کی قیمت اور رجحان کی سمت سے شمار کیا جاتا ہے۔ اوپر کی طرف ، PMax حرکت پذیر اوسط مائنس ATR ضارب ضرب ATR کے برابر ہے ، جو اسٹاپ نقصان لائن کے طور پر کام کرتا ہے۔ نیچے کی طرف ، PMax حرکت پذیر اوسط کے برابر ہے اور ATR ضارب ضرب ATR ، جو منافع لینے کی لائن کے طور پر کام کرتا ہے۔
جب قیمت PMax اشارے کو اوپر کی طرف عبور کرتی ہے تو ایک لمبا سگنل ہوتا ہے۔ جب قیمت PMax اشارے کو نیچے کی طرف عبور کرتی ہے تو ایک مختصر سگنل ہوتا ہے۔ حکمت عملی سگنلز کی بنیاد پر داخل ہوتی ہے اور باہر نکلتی ہے ، بڑھتی ہوئی رجحان میں لمبی اور نیچے کی رجحان میں مختصر ، متحرک ٹریلنگ اسٹاپ نقصان اور منافع لے کر۔
اس حکمت عملی کے فوائد:
دو طرفہ تجارت کو اپنانے سے یہ تمام مارکیٹ کے حالات کو انتہائی شامل کرتا ہے۔
ضرب حرکت پذیر اوسط کا اطلاق مستحکم اور قابل اعتماد تجارتی سگنل پیدا کرتا ہے۔
سٹاپ نقصان / منافع لینے کے لئے PMax کے ساتھ، یہ مؤثر طریقے سے خطرے کو کنٹرول کرتا ہے.
سایڈست سائیکل اور ضارب پیرامیٹرز اسے انتہائی موافقت پذیر بناتے ہیں۔
کچھ خطرات بھی ہیں:
غلط پیرامیٹرز کی ترتیبات whipsaw نقصانات کی قیادت کر سکتے ہیں.
شارٹ خریدتے وقت لیوریج کی حدود پر دھیان دیں۔
بلیک سوان واقعات سے بچنا مشکل ہے۔
حل:
whipsaws کو کم کرنے کے لئے پیرامیٹرز کو بہتر بنائیں.
ہوشیار طریقے سے لیورج کنٹرول کریں اور متنوع بنائیں.
ATR ضارب کو بڑھانے کے لئے سٹاپ رینج کو بڑھانے کے.
حکمت عملی کو مندرجہ ذیل طریقوں سے اپ گریڈ کیا جا سکتا ہے:
مختلف مارکیٹوں اور سائیکلوں میں استحکام کی جانچ کریں۔
خودکار طور پر پیرامیٹرز کو بہتر بنانے کے لیے مشین لرننگ کا اطلاق کریں۔
گہری سیکھنے کی تکنیکوں کے ساتھ مارکیٹ کے نظام کا جائزہ لیں.
فیصلوں کو بااختیار بنانے کے لئے مزید ڈیٹا ذرائع کو ضم کریں۔
اس حکمت عملی کی مجموعی کارکردگی مضبوط شمولیت کے ساتھ مستحکم ہے۔ دو طرفہ تجارت اور متحرک اسٹاپ نقصان / منافع حاصل کرنے کو اپنانے سے ، یہ خطرات کو مؤثر طریقے سے کنٹرول کرتا ہے۔ پیرامیٹر ٹیوننگ اور ماڈل تکرار کے ذریعے ، حکمت عملی کی فٹنس اور افادیت کو مزید بہتر بنایا جاسکتا ہے۔ عام طور پر یہ ایک حکمت عملی ہے جس پر طویل مدتی توجہ اور اطلاق کے قابل ہے۔
/*backtest start: 2023-01-08 00:00:00 end: 2024-01-14 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/ // © melihtuna //developer: @KivancOzbilgic //author: @KivancOzbilgic //stretegy converter: @crypto_melih //@version=4 strategy("Profit Maximizer Strategy Long-Short", shorttitle="PMax-Strategy", overlay=true, default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=10000, currency=currency.USD, commission_value=0, commission_type=strategy.commission.percent) src = input(hl2, title="Source") Periods = input(title="ATR Length", type=input.integer, defval=10) Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0) mav = input(title="Moving Average Type", defval="EMA", options=["SMA", "EMA", "WMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF"]) length =input(10, "Moving Average Length", minval=1) condition = input(title="Signal Type", defval="Only Crossing Signals", options=["Only Crossing Signals", "Only Price/Pmax Crossing Signals"]) changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true) showsupport = input(title="Show Moving Average?", type=input.bool, defval=true) //showsignalsk = input(title="Show Crossing Signals?", type=input.bool, defval=true) //showsignalsc = input(title="Show Price/Pmax Crossing Signals?", type=input.bool, defval=false) highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true) long_short = input(defval = false, title = "Long-Short", type=input.bool) atr2 = sma(tr, Periods) atr= changeATR ? atr(Periods) : atr2 valpha=2/(length+1) vud1=src>src[1] ? src-src[1] : 0 vdd1=src<src[1] ? src[1]-src : 0 vUD=sum(vud1,9) vDD=sum(vdd1,9) vCMO=nz((vUD-vDD)/(vUD+vDD)) VAR=0.0 VAR:=nz(valpha*abs(vCMO)*src)+(1-valpha*abs(vCMO))*nz(VAR[1]) wwalpha = 1/ length WWMA = 0.0 WWMA := wwalpha*src + (1-wwalpha)*nz(WWMA[1]) zxLag = length/2==round(length/2) ? length/2 : (length - 1) / 2 zxEMAData = (src + (src - src[zxLag])) ZLEMA = ema(zxEMAData, length) lrc = linreg(src, length, 0) lrc1 = linreg(src,length,1) lrs = (lrc-lrc1) TSF = linreg(src, length, 0)+lrs getMA(src, length) => ma = 0.0 if mav == "SMA" ma := sma(src, length) ma if mav == "EMA" ma := ema(src, length) ma if mav == "WMA" ma := wma(src, length) ma if mav == "TMA" ma := sma(sma(src, ceil(length / 2)), 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) longStop = MAvg - Multiplier*atr longStopPrev = nz(longStop[1], longStop) longStop := MAvg > longStopPrev ? max(longStop, longStopPrev) : longStop shortStop = MAvg + Multiplier*atr shortStopPrev = nz(shortStop[1], shortStop) shortStop := MAvg < shortStopPrev ? 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 PMax = dir==1 ? longStop: shortStop plot(showsupport ? MAvg : na, color=#0585E1, linewidth=2, title="Moving Avg Line") pALL=plot(PMax, color=color.red, linewidth=2, title="PMax", transp=0) alertcondition(cross(MAvg, PMax), title="Cross Alert", message="PMax - Moving Avg Crossing!") alertcondition(crossover(MAvg, PMax), title="Crossover Alarm", message="Moving Avg BUY SIGNAL!") alertcondition(crossunder(MAvg, PMax), title="Crossunder Alarm", message="Moving Avg SELL SIGNAL!") alertcondition(cross(src, PMax), title="Price Cross Alert", message="PMax - Price Crossing!") alertcondition(crossover(src, PMax), title="Price Crossover Alarm", message="PRICE OVER PMax - BUY SIGNAL!") alertcondition(crossunder(src, PMax), title="Price Crossunder Alarm", message="PRICE UNDER PMax - SELL SIGNAL!") buySignalk = crossover(MAvg, PMax) //plotshape(buySignalk and showsignalsk ? PMax*0.995 : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0) sellSignallk = crossunder(MAvg, PMax) //plotshape(sellSignallk and showsignalsk ? PMax*1.005 : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0) buySignalc = crossover(src, PMax) //plotshape(buySignalc and showsignalsc ? PMax*0.995 : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=#0F18BF, textcolor=color.white, transp=0) sellSignallc = crossunder(src, PMax) //plotshape(sellSignallc and showsignalsc ? PMax*1.005 : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=#0F18BF, textcolor=color.white, transp=0) mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0,display=display.none) longFillColor = highlighting ? (MAvg>PMax ? color.green : na) : na shortFillColor = highlighting ? (MAvg<PMax ? color.red : na) : na fill(mPlot, pALL, title="UpTrend Highligter", color=longFillColor) fill(mPlot, pALL, title="DownTrend Highligter", color=shortFillColor) if(condition=="Only Crossing Signals") strategy.entry("BUY", strategy.long, when = buySignalk) else strategy.entry("BUY", strategy.long, when = buySignalc) if(long_short) if(condition=="Only Crossing Signals") strategy.entry("SELL", strategy.short, when = sellSignallk) else strategy.entry("SELL", strategy.short, when = sellSignallc) else if(condition=="Only Crossing Signals") strategy.close("BUY", when = sellSignallk) else strategy.close("BUY", when = sellSignallc)