মোমেন্টাম ব্রেকআউট অপ্টিমাইজেশান কৌশল একটি ট্রেডিং সিগন্যাল তৈরি করে এবং গতির সূচকগুলির উপর ভিত্তি করে স্টপ লস / লাভ গ্রহণের কৌশল নির্ধারণ করে। এটি মূল্য এবং চলমান গড়ের মধ্যে ক্রসওভারগুলি গণনা করে বাজার প্রবণতা দিক বিচার করে এবং এটিআর এবং লিনরেগ চ্যানেল ব্যবহার করে একটি গতিশীল স্টপ লস প্রক্রিয়া তৈরি করে। এদিকে, কৌশলটি আরও ভাল এন্ট্রি দামের জন্য সিএমও সূচক ব্যবহার করে ওভারকপ/ওভারসোল্ড স্তরগুলিও সনাক্ত করে।
সামগ্রিক কৌশলটি স্থিতিশীল প্রবণতা অনুসরণ এবং স্বয়ংক্রিয় স্টপ লস জন্য একাধিক সূচক একত্রিত করে, ট্রেডিং ঝুঁকি নিয়ন্ত্রণের সময় পর্যাপ্ত ট্রেডিং সুযোগ নিশ্চিত করে।
কৌশলটি চলমান গড়, এটিআর, সিএমও ইত্যাদি সহ সূচকগুলির সংমিশ্রণ ব্যবহার করে। সূচকগুলি একে অপরকে পরিপূরক করে এবং প্রবণতা দিক এবং ওভারবয়ড / ওভারসোল্ড অঞ্চল সম্পর্কে আরও নির্ভরযোগ্য বিচার সরবরাহ করে।
এটিআর-ভিত্তিক ডায়নামিক স্টপ লস মার্কেটের অস্থিরতার উপর ভিত্তি করে স্টপ লসের মাত্রা নমনীয়ভাবে সামঞ্জস্য করতে পারে, কার্যকরভাবে একক বাণিজ্য ক্ষতি নিয়ন্ত্রণ করে।
কৌশলটি পজিশনের আকার এবং ঝুঁকি শতাংশের সেটিংস সরবরাহ করে, যা তহবিলের গুরুতর ওঠানামা রোধ করার জন্য ঝুঁকিপূর্ণ মূলধনের সর্বাধিক শতাংশ নির্ধারণ করে।
কৌশলটি ট্রেডিং সংকেতগুলির 3 সেট সরবরাহ করে। বিভিন্ন সংকেত সংমিশ্রণ সক্ষম করে, আরও ভাল ব্যাকটেস্ট ফলাফল পাওয়া যায়।
সমস্ত সংকেত সংমিশ্রণ সক্ষম হলে অত্যধিক ঘন ঘন ট্রেডিং হতে পারে। এটি কেবলমাত্র কিছু সংকেত ব্যবহার করে এড়ানো যেতে পারে।
মাল্টি-প্যারামিটার মডেলটি প্যারামিটার অপ্টিমাইজেশানকে আরও জটিল এবং সংবেদনশীল করে তোলে। সর্বোত্তম প্যারামিটার সংমিশ্রণের জন্য বিস্তৃত পরীক্ষার প্রয়োজন।
খাঁটি মূল্য/স্টপ লস ব্রেকআউট সংকেতের জন্য, স্টপ লস পরিসীমা আরও বিস্তৃত, যা বৃহত্তর একক বাণিজ্য ক্ষতি এবং ড্রডাউন হতে পারে। চলমান গড় সংকেতগুলির সাথে একত্রিত করার পরামর্শ দেওয়া হয়।
অপ্টিমাইজ করুন প্যারামিটার যেমন চলমান গড় টাইপ / দৈর্ঘ্য, 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()