মোমেন্টাম ব্রেকআউট অপ্টিমাইজড ট্রেন্ড অনুসরণ কৌশল


সৃষ্টির তারিখ: 2024-01-17 16:44:30 অবশেষে সংশোধন করুন: 2024-01-17 16:44:30
অনুলিপি: 0 ক্লিকের সংখ্যা: 622
1
ফোকাস
1617
অনুসারী

মোমেন্টাম ব্রেকআউট অপ্টিমাইজড ট্রেন্ড অনুসরণ কৌশল

ওভারভিউ

ডায়নামিক ব্রেকআপ অপ্টিমাইজেশন কৌশলটি ট্রেডিং সিগন্যাল জেনারেশন এবং স্টপ লস স্টপ সেটআপের জন্য গতিশীল সূচকগুলির উপর ভিত্তি করে একটি প্রবণতা-অনুসরণ কৌশল। এই কৌশলটি বাজারের প্রবণতার দিকটি নির্ধারণ করে, এটিআর এবং লিনরেগ চ্যানেলের সাথে মিলিত হয়ে গতিশীল স্টপ লস প্রক্রিয়া তৈরি করে। একই সাথে, কৌশলটি সিএমও সূচকগুলি ব্যবহার করে ওভার-বয় ওভার-সেল সনাক্ত করতে এবং আরও ভাল প্রবেশের জন্য।

কৌশল নীতি

  • 1. প্রবণতা নির্দেশ করার জন্য একটি প্রযুক্তিগত সূচক হিসাবে মূল্যের ZLEMA চলমান গড় গণনা
  • 2. ATR এর উপর ভিত্তি করে লং স্টপ প্রাইস এবং শর্ট স্টপ প্রাইস
  • 3. সিএমও সূচকটি ওভারবয় ওভারসেলের পরিসীমা নির্ধারণ করে, যা একটি চলমান গড়ের সাথে সংযুক্ত থাকে।
  • 4. এটিআর এবং চলমান গড়ের উপর ভিত্তি করে তিনটি ট্রেডিং সিগন্যাল তৈরি করা হয়েছে
    • চলমান গড় এবং স্টপ মূল্যের ক্রস সংকেত
    • মূল্য এবং স্টপ মূল্যের ক্রস সংকেত
    • মূল্য এবং চলমান গড়ের ক্রস সংকেত
  • 5. বিভিন্ন ধরনের সংকেত সক্রিয়করণ নিয়ন্ত্রণের জন্য প্যারামিটার সেট করুন
  • 6. ঝুঁকি ব্যবস্থাপনার জন্য ঝুঁকি ফ্যাক্টর এবং অবস্থান নিয়ন্ত্রণ সেট করুন

সমগ্র কৌশলটি একাধিক সূচকের সমন্বয় প্রয়োগের মাধ্যমে একটি স্থিতিশীল প্রবণতা ট্র্যাকিং এবং স্বয়ংক্রিয় স্টপ লস অর্জন করে, যা পর্যাপ্ত ব্যবসায়ের সুযোগ নিশ্চিত করে এবং ব্যবসায়ের ঝুঁকি নিয়ন্ত্রণ করে।

সামর্থ্য বিশ্লেষণ

একাধিক সূচক সমন্বয় ব্যবহার

এই কৌশলটি চলমান গড়, এটিআর, সিএমও এবং অন্যান্য সূচকগুলির সমন্বয় ব্যবহার করে, যা ট্রেন্ডের দিকনির্দেশনা এবং ওভার-বিক্রয় ওভার-বিক্রয় অঞ্চলগুলিকে আরও সঠিকভাবে এবং নির্ভরযোগ্যভাবে সনাক্ত করতে সহায়তা করে।

ডায়নামিক ট্রেইলিং স্টপ

এটিআর-ভিত্তিক ডায়নামিক স্টপ-অফ মেশিনের সাহায্যে, স্টপ-অফ পজিশনগুলি বাজারের অস্থিরতার সাথে সামঞ্জস্যপূর্ণভাবে সামঞ্জস্য করা যেতে পারে, যাতে একক ক্ষতির উপর কার্যকর নিয়ন্ত্রণ করা যায়।

ভাল ঝুঁকি ব্যবস্থাপনা

কৌশলটি পজিশন কন্ট্রোল এবং ঝুঁকিপূর্ণ ফ্যাক্টর সেটআপ সরবরাহ করে, যা সর্বাধিক ক্ষতির মূলধনের অনুপাতকে পূর্বনির্ধারিত করে এবং তহবিলের ব্যাপক ওঠানামা এড়াতে পারে।

সমৃদ্ধ ট্রেডিং সংকেত

কৌশলটি তিনটি ট্রেডিং সিগন্যাল সরবরাহ করে যা বিভিন্ন ধরণের সংকেতের সমন্বয়কে সক্রিয় করার মাধ্যমে আরও ভাল প্রতিক্রিয়া প্রদান করে।

ঝুঁকি বিশ্লেষণ

ট্রেডিং ফ্রিকোয়েন্সি বেশি

সমস্ত সংকেত প্যাকেজ সক্ষম করার সময়, ট্রেডিং ফ্রিকোয়েন্সি খুব বেশি হতে পারে। কেবলমাত্র কিছু সংকেত প্যাকেজ ব্যবহার করে এড়ানো যেতে পারে।

প্যারামিটার সংবেদনশীল

একাধিক সূচক সমন্বয় ব্যবহার করা প্যারামিটার নির্বাচনকে আরও জটিল করে তোলে, প্যারামিটার সেটআপের জন্য আরও সংবেদনশীল, প্যারামিটারগুলির সর্বোত্তম সমন্বয়টি নিখুঁতভাবে পরীক্ষা করা প্রয়োজন।

ব্রেকডাউন প্রত্যাহারের হার বেশি

ট্রেডিং সিগন্যালগুলি কেবলমাত্র মূল্য এবং স্টপ-ডাউন ক্রস-পয়েন্টের উপর ভিত্তি করে তৈরি করা হয়, যার স্টপ-ডাউন বিস্তৃত, যা বড় একক ক্ষতি এবং প্রত্যাহারের দিকে পরিচালিত করতে পারে। একটি চলমান সমান্তরাল সংকেত এবং তার সংমিশ্রণ ব্যবহারের বিকল্প রয়েছে।

অপ্টিমাইজেশান দিক

বিভিন্ন প্যারামিটার সমন্বয় পরীক্ষা করুন

চলমান গড়ের ধরন ও দৈর্ঘ্যের প্যারামিটার অপ্টিমাইজ করুন; ATR চক্রের প্যারামিটার অপ্টিমাইজ করুন; সিএমও প্যারামিটার অপ্টিমাইজ করুন। প্যারামিটারগুলির সর্বোত্তম মিল খুঁজে বের করুন।

সিগন্যাল ব্যবহারের কৌশল

পরীক্ষায় শুধুমাত্র চলমান গড় সংকেত, স্টপ প্রাইস সংকেত এবং সমন্বিত সংকেত ব্যবহার করা হয়, যা সর্বোত্তম ব্যবহারের কৌশল বিশ্লেষণ করে।

বিভিন্ন জাতের উপর পরীক্ষা

শেয়ার সূচক, বৈদেশিক মুদ্রা এবং পণ্যের জাতের উপর পুনর্বিবেচনা করুন, বাজার ধরণের জন্য কৌশলগুলির উপযুক্ততা বিশ্লেষণ করুন।

সারসংক্ষেপ

এই কৌশলটি প্রবণতার দিকনির্দেশনা সনাক্ত করতে, স্টপ লস প্রক্রিয়াটি তৈরি করতে এবং ওভার-বই ওভার-বিক্রয় সুযোগগুলি সনাক্ত করতে বিভিন্ন সূচক ব্যবহার করে। প্যারামিটার অপ্টিমাইজেশন, সিগন্যাল প্যাকেজ নির্বাচন ইত্যাদি পদ্ধতির মাধ্যমে সামঞ্জস্য করা, আরও ভাল প্রত্যাহারের সূচক পাওয়া যায়। সামগ্রিকভাবে, কৌশলটি সম্পূর্ণ এবং নির্ভরযোগ্য, এটি রিয়েল-স্টোরে আরও পরীক্ষামূলক অপ্টিমাইজেশনের যোগ্য।

কৌশল সোর্স কোড
/*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()