مومنٹم بریک آؤٹ اصلاح

مصنف:چاؤ ژانگ، تاریخ: 2024-01-17 16:44:30
ٹیگز:

img

جائزہ

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

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

    1. رجحان کی سمت کے لئے تکنیکی اشارے کے طور پر قیمت کے ZLEMA چلتی اوسط کا حساب لگائیں
    1. ATR کی بنیاد پر طویل سٹاپ نقصان اور مختصر سٹاپ نقصان کا حساب لگائیں
    1. سی ایم او اشارے کا حساب لگانا جس سے زیادہ خریدے گئے / زیادہ فروخت والے علاقوں کی نشاندہی کی جاسکے ، جس میں داخلہ سگنل کے طور پر حرکت پذیر اوسط کے ساتھ مل کر
    1. اے ٹی آر، چلتی اوسط اور قیمت کے وقفے پر مبنی ٹریڈنگ سگنل کے 3 سیٹ تیار کریں
    • چلتی اوسط اور سٹاپ نقصان کی سطح کے درمیان کراس اوورز
    • قیمت اور سٹاپ نقصان کی سطح کے درمیان کراس اوورز
    • قیمت اور چلتی اوسط کے درمیان کراس اوورز
    1. پیرامیٹر کی ترتیبات کے ذریعے مختلف سگنل کے مجموعے کو فعال / غیر فعال کریں
    1. خطرے کے انتظام کے لئے خطرے کا فیصد اور پوزیشن کا سائز مقرر کریں

مجموعی حکمت عملی مستحکم رجحان کی پیروی اور خودکار اسٹاپ نقصان کے لئے متعدد اشارے کو یکجا کرتی ہے ، جس سے تجارتی خطرات پر قابو پانے کے ساتھ ہی مناسب تجارتی مواقع کو یقینی بنایا جاتا ہے۔

فوائد کا تجزیہ

متعدد اشارے کا مجموعہ

حکمت عملی میں اشارے کا ایک مجموعہ استعمال کیا جاتا ہے جس میں چلتی اوسط ، اے ٹی آر ، سی ایم او وغیرہ شامل ہیں۔ اشارے ایک دوسرے کی تکمیل کرتے ہیں اور رجحان کی سمت اور زیادہ خرید / فروخت والے علاقوں کے بارے میں زیادہ قابل اعتماد فیصلے فراہم کرتے ہیں۔

متحرک ٹریلنگ اسٹاپ

اے ٹی آر پر مبنی متحرک اسٹاپ نقصان مارکیٹ کی اتار چڑھاؤ کی بنیاد پر اسٹاپ نقصان کی سطح کو لچکدار طریقے سے ایڈجسٹ کرسکتا ہے ، جس سے ایک ہی تجارت کے نقصان کو مؤثر طریقے سے کنٹرول کیا جاسکتا ہے۔

جامع رسک مینجمنٹ

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

بہت سارے تجارتی سگنل

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

خطرے کا تجزیہ

اعلی تجارتی تعدد

جب تمام سگنل مجموعے فعال ہوجاتے ہیں تو بہت زیادہ تجارت ہوسکتی ہے۔ اس سے صرف کچھ سگنل استعمال کرکے بچا جاسکتا ہے۔

پیرامیٹر کی ترتیبات کے لئے حساس

ملٹی پیرامیٹر ماڈل پیرامیٹر کی اصلاح کو زیادہ پیچیدہ اور حساس بناتا ہے۔ پیرامیٹر کے بہترین امتزاج کے لئے وسیع پیمانے پر جانچ کی ضرورت ہوتی ہے۔

بریک آؤٹ سگنلز کے لیے زیادہ ڈراؤنڈ

خالص قیمت / اسٹاپ نقصان کے بریک آؤٹ سگنلز کے ل the ، اسٹاپ نقصان کی حد وسیع ہے ، جس کی وجہ سے ایک ہی تجارت میں زیادہ نقصان اور کمی واقع ہوسکتی ہے۔ حرکت پذیر اوسط سگنلز کے ساتھ مل کر سفارش کی جاتی ہے۔

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

مختلف پیرامیٹرز کے مجموعے کی جانچ کریں

بہترین میچ تلاش کرنے کے لئے اوسط قسم / لمبائی، اے ٹی آر مدت، سی ایم او مدت جیسے پیرامیٹرز کو بہتر بنائیں.

سگنل استعمال کی حکمت عملی کو بہتر بنائیں

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

مختلف مصنوعات میں ٹیسٹ کی کارکردگی

مختلف مارکیٹ کی اقسام میں موافقت کا تجزیہ کرنے کے لئے انڈیکس ، فاریکس ، خام مال کی مصنوعات میں حکمت عملی کا بیک ٹیسٹ کریں۔

نتیجہ

یہ حکمت عملی رجحان کی نشاندہی ، اسٹاپ نقصان کی تعمیر ، اوور بکٹ / اوور سیلڈ کا پتہ لگانے کے لئے متعدد اشارے کو مربوط کرتی ہے۔ پیرامیٹرز اور سگنل کے امتزاج کو ایڈجسٹ کرکے ، اطمینان بخش رسک میٹرکس حاصل کیے جاسکتے ہیں۔ مجموعی نظام مزید براہ راست جانچ اور اصلاح کے لئے جامع اور قابل اعتماد ہے۔


/*backtest
start: 2024-01-09 00:00:00
end: 2024-01-16 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © KivancOzbilgic
//developer: @KivancOzbilgic
//author: @KivancOzbilgic

strategy(title="Profit Maximizer PMax", overlay=true,
     pyramiding=0, initial_capital=1000,
     commission_type=strategy.commission.cash_per_order,
     commission_value=0.025, slippage=2)


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="ZLEMA", options=["SMA", "EMA", "WMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF"])
length =input(10, "Moving Average Length", minval=1)
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)

usePosSize = input(title="Use Position Sizing?", type=input.bool, defval=true)
riskPerc   = input(title="Risk %", type=input.float, defval=0.5, step=0.25)

// Make input options that configure backtest date range
startDate = input(title="Start Date", type=input.integer,
     defval=1, minval=1, maxval=31)
startMonth = input(title="Start Month", type=input.integer,
     defval=1, minval=1, maxval=12)
startYear = input(title="Start Year", type=input.integer,
     defval=2019, minval=1800, maxval=2100)

endDate = input(title="End Date", type=input.integer,
     defval=1, minval=1, maxval=31)
endMonth = input(title="End Month", type=input.integer,
     defval=12, minval=1, maxval=12)
endYear = input(title="End Year", type=input.integer,
     defval=2021, minval=1800, maxval=2100)
     
// Look if the close time of the current bar
// falls inside the date range
inDateRange = true

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!")


// Calculate position size
riskEquity  = (riskPerc / 100) * strategy.equity
atrCurrency = (atr(20) * syminfo.pointvalue)
posSize     = usePosSize ? floor(riskEquity / atrCurrency) : 1

//Long
buySignalk = crossover(MAvg, PMax)
plotshape(buySignalk and showsignalsk ? PMax*0.995 : na, title="Buy", text="BuyL", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)


if(buySignalk and showsignalsk and inDateRange)
    strategy.entry(id="buySignalk", long=true, qty=posSize)
    
sellSignallk = crossunder(MAvg, PMax)
plotshape(sellSignallk and showsignalsk ? PMax*1.005 : na, title="Sell", text="SellL", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)

if(sellSignallk and showsignalsk and inDateRange)
    strategy.order(id="sellSignallk", long=false, qty=strategy.position_size)
    
//Short
buySignalc = crossover(src, PMax)
plotshape(buySignalc and showsignalsc ? PMax*0.995 : na, title="Buy", text="BuyS", location=location.absolute, style=shape.labelup, size=size.tiny, color=#0F18BF, textcolor=color.white, transp=0)

if(buySignalc and showsignalsc and inDateRange)
    strategy.entry(id="BuyS", long=false, qty=posSize)

sellSignallc = crossunder(src, PMax)
plotshape(sellSignallc and showsignalsc ? PMax*1.005 : na, title="Sell", text="SellS", location=location.absolute, style=shape.labeldown, size=size.tiny, color=#0F18BF, textcolor=color.white, transp=0)

if(sellSignallc and showsignalsc and inDateRange)
    strategy.order(id="SellS", long=true, qty=abs(strategy.position_size))

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)

// Exit open market position when date range ends
if (not inDateRange)
    strategy.close_all()
  

مزید