এই কৌশলটি মূলত চলমান গড় ক্রসওভার নীতি ব্যবহার করে, আরএসআই সূচক বিপরীত সংকেত এবং একটি কাস্টম দ্বৈত চলমান গড় ক্রসওভার অ্যালগরিদমের সাথে ট্রেন্ড ট্রেডিং বাস্তবায়নের জন্য। কৌশলটি বিভিন্ন সময়ের দুটি চলমান গড় ট্র্যাক করে, একটি দ্রুত এমএ স্বল্পমেয়াদী প্রবণতা ট্র্যাকিং এবং একটি ধীর এমএ দীর্ঘমেয়াদী প্রবণতা ট্র্যাকিং করে। যখন দ্রুত এমএ ধীর এমএ উপরে অতিক্রম করে, এটি একটি আপগ্রেড প্রবণতা এবং কেনার সুযোগের সংকেত দেয়। যখন দ্রুত এমএ ধীর এমএ এর নীচে অতিক্রম করে, এটি স্বল্পমেয়াদী প্রবণতার সমাপ্তি এবং অবস্থানগুলি বন্ধ করার সুযোগের সংকেত দেয়।
VWAP চলমান গড়ের দুটি গ্রুপ গণনা করুন, যার বিভিন্ন পরামিতি রয়েছে, যা যথাক্রমে দীর্ঘমেয়াদী এবং স্বল্পমেয়াদী প্রবণতাকে উপস্থাপন করে।
টেনকানসেন এবং কিজুনসেনের গড়গুলি ধীর এবং দ্রুত চলমান গড় হিসাবে নিন।
সংহতকরণ এবং ব্রেকআউট সনাক্ত করার জন্য বোলিংজার ব্যান্ড গণনা করুন।
ভলিউম এনার্জি নির্ধারণের জন্য TSV গণনা করুন
অতিরিক্ত ক্রয় এবং অতিরিক্ত বিক্রয় শর্তগুলি সনাক্ত করতে আরএসআই গণনা করুন
প্রবেশের শর্তঃ
প্রস্থান শর্তাবলীঃ
দ্বৈত চলমান গড় সিস্টেম দীর্ঘ এবং স্বল্পমেয়াদী উভয় প্রবণতা ধরা
আরএসআই ওভারকুপেড জোন কেনা এবং ওভারসোল্ড জোন বিক্রি এড়ায়
TSV প্রবণতা সমর্থন করার জন্য পর্যাপ্ত পরিমাণ নিশ্চিত করে
বোলিংজার ব্যান্ডগুলি মূল ব্রেকআউট পয়েন্টগুলি চিহ্নিত করে
সূচকগুলির সংমিশ্রণ মিথ্যা ব্রেকআউটগুলি ফিল্টার করতে সহায়তা করে
এমএ সিস্টেমগুলি মিথ্যা সংকেতগুলির জন্য প্রবণ, অন্যান্য সূচকগুলির সাথে ফিল্টারিংয়ের প্রয়োজন
আরএসআই পরামিতিগুলির অপ্টিমাইজেশান প্রয়োজন, অন্যথায় কিনতে / বিক্রয় পয়েন্ট মিস করতে পারে
টিএসভিও পরামিতির প্রতি খুব সংবেদনশীল, সাবধানে পরীক্ষা প্রয়োজন
বিবি উপরের ব্যান্ড বিরতি মিথ্যা বিরতি হতে পারে, যাচাই প্রয়োজন
অনেক সূচককে অপ্টিমাইজ করা কঠিন, অতিরিক্ত ফিটিংয়ের ঝুঁকি
পর্যাপ্ত ট্রেন/পরীক্ষার ডেটা কার্ভ ফিটিংয়ের কারণ হতে পারে
সেরা প্যারামিটার সমন্বয় খুঁজে পেতে আরো সময়কাল পরীক্ষা করুন
আরএসআই এর সাথে অন্য সূচক যেমন এমএসিডি, কেডি প্রতিস্থাপন বা একত্রিত করার চেষ্টা করুন
প্যারামিটার অপ্টিমাইজেশান জন্য হাঁটা এগিয়ে বিশ্লেষণ ব্যবহার করুন
একক ট্রেড লস নিয়ন্ত্রণে স্টপ লস যোগ করুন
সিগন্যাল পূর্বাভাসকে সহায়তা করার জন্য মেশিন লার্নিং মডেল বিবেচনা করুন
বিভিন্ন বাজারের জন্য পরামিতি সামঞ্জস্য করুন, একক পরামিতি সেট overfit না
এই কৌশলটি দ্বৈত চলমান গড় ব্যবহার করে দীর্ঘ এবং স্বল্পমেয়াদী প্রবণতা ক্যাপচার করে এবং আরএসআই, টিএসভি, বলিংজার ব্যান্ড এবং আরও অনেক কিছু দিয়ে সংকেতগুলি ফিল্টার করে। সুবিধাটি দীর্ঘমেয়াদী আপগ্রেড গতির সাথে সামঞ্জস্য রেখে ট্রেডিং করা। তবে এটি মিথ্যা সংকেতের ঝুঁকিও বহন করে, ঝুঁকি হ্রাস করার জন্য আরও পরামিতি টিউনিং এবং স্টপ লস প্রয়োজন। সামগ্রিকভাবে, প্রবণতা অনুসরণ এবং গড় বিপরীতের সংমিশ্রণ দীর্ঘমেয়াদী আপগ্রেডগুলিতে ভাল ফলাফল দেয়, তবে বিভিন্ন বাজারের জন্য পরামিতিগুলি সামঞ্জস্য করার প্রয়োজন।
/*backtest start: 2022-10-23 00:00:00 end: 2023-10-29 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // @version=4 // Credits // "Vwap with period" code which used in this strategy to calculate the leadLine was written by "neolao" active on https://tr.tradingview.com/u/neolao/ // "TSV" code which used in this strategy was written by "liw0" active on https://www.tradingview.com/u/liw0. The code is corrected by "vitelot" December 2018. // "Vidya" code which used in this strategy was written by "everget" active on https://tr.tradingview.com/u/everget/ strategy("HYE Combo Market [Strategy] (Vwap Mean Reversion + Trend Hunter)", overlay = true, initial_capital = 1000, default_qty_value = 100, default_qty_type = strategy.percent_of_equity, commission_value = 0.025) //Strategy inputs source = input(title = "Source", defval = close, group = "Mean Reversion Strategy Inputs") smallcumulativePeriod = input(title = "Small VWAP", defval = 8, group = "Mean Reversion Strategy Inputs") bigcumulativePeriod = input(title = "Big VWAP", defval = 10, group = "Mean Reversion Strategy Inputs") meancumulativePeriod = input(title = "Mean VWAP", defval = 50, group = "Mean Reversion Strategy Inputs") percentBelowToBuy = input(title = "Percent below to buy %", defval = 2, group = "Mean Reversion Strategy Inputs") rsiPeriod = input(title = "Rsi Period", defval = 2, group = "Mean Reversion Strategy Inputs") rsiEmaPeriod = input(title = "Rsi Ema Period", defval = 5, group = "Mean Reversion Strategy Inputs") rsiLevelforBuy = input(title = "Maximum Rsi Level for Buy", defval = 30, group = "Mean Reversion Strategy Inputs") slowtenkansenPeriod = input(9, minval=1, title="Slow Tenkan Sen VWAP Line Length", group = "Trend Hunter Strategy Inputs") slowkijunsenPeriod = input(13, minval=1, title="Slow Kijun Sen VWAP Line Length", group = "Trend Hunter Strategy Inputs") fasttenkansenPeriod = input(3, minval=1, title="Fast Tenkan Sen VWAP Line Length", group = "Trend Hunter Strategy Inputs") fastkijunsenPeriod = input(7, minval=1, title="Fast Kijun Sen VWAP Line Length", group = "Trend Hunter Strategy Inputs") BBlength = input(20, minval=1, title= "Bollinger Band Length", group = "Trend Hunter Strategy Inputs") BBmult = input(2.0, minval=0.001, maxval=50, title="Bollinger Band StdDev", group = "Trend Hunter Strategy Inputs") tsvlength = input(20, minval=1, title="TSV Length", group = "Trend Hunter Strategy Inputs") tsvemaperiod = input(7, minval=1, title="TSV Ema Length", group = "Trend Hunter Strategy Inputs") length = input(title="Vidya Length", type=input.integer, defval=20, group = "Trend Hunter Strategy Inputs") src = input(title="Vidya Source", type=input.source, defval= hl2 , group = "Trend Hunter Strategy Inputs") // Vidya Calculation getCMO(src, length) => mom = change(src) upSum = sum(max(mom, 0), length) downSum = sum(-min(mom, 0), length) out = (upSum - downSum) / (upSum + downSum) out cmo = abs(getCMO(src, length)) alpha = 2 / (length + 1) vidya = 0.0 vidya := src * alpha * cmo + nz(vidya[1]) * (1 - alpha * cmo) // Make input options that configure backtest date range startDate = input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=31, group = "Strategy Date Range") startMonth = input(title="Start Month", type=input.integer, defval=1, minval=1, maxval=12, group = "Strategy Date Range") startYear = input(title="Start Year", type=input.integer, defval=2000, minval=1800, maxval=2100, group = "Strategy Date Range") endDate = input(title="End Date", type=input.integer, defval=31, minval=1, maxval=31, group = "Strategy Date Range") endMonth = input(title="End Month", type=input.integer, defval=12, minval=1, maxval=12, group = "Strategy Date Range") endYear = input(title="End Year", type=input.integer, defval=2021, minval=1800, maxval=2100, group = "Strategy Date Range") inDateRange = true // Mean Reversion Strategy Calculation typicalPriceS = (high + low + close) / 3 typicalPriceVolumeS = typicalPriceS * volume cumulativeTypicalPriceVolumeS = sum(typicalPriceVolumeS, smallcumulativePeriod) cumulativeVolumeS = sum(volume, smallcumulativePeriod) smallvwapValue = cumulativeTypicalPriceVolumeS / cumulativeVolumeS typicalPriceB = (high + low + close) / 3 typicalPriceVolumeB = typicalPriceB * volume cumulativeTypicalPriceVolumeB = sum(typicalPriceVolumeB, bigcumulativePeriod) cumulativeVolumeB = sum(volume, bigcumulativePeriod) bigvwapValue = cumulativeTypicalPriceVolumeB / cumulativeVolumeB typicalPriceM = (high + low + close) / 3 typicalPriceVolumeM = typicalPriceM * volume cumulativeTypicalPriceVolumeM = sum(typicalPriceVolumeM, meancumulativePeriod) cumulativeVolumeM = sum(volume, meancumulativePeriod) meanvwapValue = cumulativeTypicalPriceVolumeM / cumulativeVolumeM rsiValue = rsi(source, rsiPeriod) rsiEMA = ema(rsiValue, rsiEmaPeriod) buyMA = ((100 - percentBelowToBuy) / 100) * bigvwapValue[0] inTrade = strategy.position_size > 0 notInTrade = strategy.position_size <= 0 if(crossunder(smallvwapValue, buyMA) and rsiEMA < rsiLevelforBuy and close < meanvwapValue and inDateRange and notInTrade) strategy.entry("BUY-M", strategy.long) if(close > meanvwapValue or not inDateRange) strategy.close("BUY-M") // Trend Hunter Strategy Calculation // Slow Tenkan Sen Calculation typicalPriceTS = (high + low + close) / 3 typicalPriceVolumeTS = typicalPriceTS * volume cumulativeTypicalPriceVolumeTS = sum(typicalPriceVolumeTS, slowtenkansenPeriod) cumulativeVolumeTS = sum(volume, slowtenkansenPeriod) slowtenkansenvwapValue = cumulativeTypicalPriceVolumeTS / cumulativeVolumeTS // Slow Kijun Sen Calculation typicalPriceKS = (high + low + close) / 3 typicalPriceVolumeKS = typicalPriceKS * volume cumulativeTypicalPriceVolumeKS = sum(typicalPriceVolumeKS, slowkijunsenPeriod) cumulativeVolumeKS = sum(volume, slowkijunsenPeriod) slowkijunsenvwapValue = cumulativeTypicalPriceVolumeKS / cumulativeVolumeKS // Fast Tenkan Sen Calculation typicalPriceTF = (high + low + close) / 3 typicalPriceVolumeTF = typicalPriceTF * volume cumulativeTypicalPriceVolumeTF = sum(typicalPriceVolumeTF, fasttenkansenPeriod) cumulativeVolumeTF = sum(volume, fasttenkansenPeriod) fasttenkansenvwapValue = cumulativeTypicalPriceVolumeTF / cumulativeVolumeTF // Fast Kijun Sen Calculation typicalPriceKF = (high + low + close) / 3 typicalPriceVolumeKF = typicalPriceKS * volume cumulativeTypicalPriceVolumeKF = sum(typicalPriceVolumeKF, fastkijunsenPeriod) cumulativeVolumeKF = sum(volume, fastkijunsenPeriod) fastkijunsenvwapValue = cumulativeTypicalPriceVolumeKF / cumulativeVolumeKF // Slow LeadLine Calculation lowesttenkansen_s = lowest(slowtenkansenvwapValue, slowtenkansenPeriod) highesttenkansen_s = highest(slowtenkansenvwapValue, slowtenkansenPeriod) lowestkijunsen_s = lowest(slowkijunsenvwapValue, slowkijunsenPeriod) highestkijunsen_s = highest(slowkijunsenvwapValue, slowkijunsenPeriod) slowtenkansen = avg(lowesttenkansen_s, highesttenkansen_s) slowkijunsen = avg(lowestkijunsen_s, highestkijunsen_s) slowleadLine = avg(slowtenkansen, slowkijunsen) // Fast LeadLine Calculation lowesttenkansen_f = lowest(fasttenkansenvwapValue, fasttenkansenPeriod) highesttenkansen_f = highest(fasttenkansenvwapValue, fasttenkansenPeriod) lowestkijunsen_f = lowest(fastkijunsenvwapValue, fastkijunsenPeriod) highestkijunsen_f = highest(fastkijunsenvwapValue, fastkijunsenPeriod) fasttenkansen = avg(lowesttenkansen_f, highesttenkansen_f) fastkijunsen = avg(lowestkijunsen_f, highestkijunsen_f) fastleadLine = avg(fasttenkansen, fastkijunsen) // BBleadLine Calculation BBleadLine = avg(fastleadLine, slowleadLine) // Bollinger Band Calculation basis = sma(BBleadLine, BBlength) dev = BBmult * stdev(BBleadLine, BBlength) upper = basis + dev lower = basis - dev // TSV Calculation tsv = sum(close>close[1]?volume*(close-close[1]):close<close[1]?volume*(close-close[1]):0,tsvlength) tsvema = ema(tsv, tsvemaperiod) // Rules for Entry & Exit if(fastleadLine > fastleadLine[1] and slowleadLine > slowleadLine[1] and tsv > 0 and tsv > tsvema and close > upper and close > vidya and inDateRange and notInTrade) strategy.entry("BUY-T", strategy.long) if((fastleadLine < fastleadLine[1] and slowleadLine < slowleadLine[1]) or not inDateRange) strategy.close("BUY-T") // Plots plot(meanvwapValue, title="MEAN VWAP", linewidth=2, color=color.yellow) //plot(vidya, title="VIDYA", linewidth=2, color=color.green) //colorsettingS = input(title="Solid Color Slow Leadline", defval=false, type=input.bool) //plot(slowleadLine, title = "Slow LeadLine", color = colorsettingS ? color.aqua : slowleadLine > slowleadLine[1] ? color.green : color.red, linewidth=3) //colorsettingF = input(title="Solid Color Fast Leadline", defval=false, type=input.bool) //plot(fastleadLine, title = "Fast LeadLine", color = colorsettingF ? color.orange : fastleadLine > fastleadLine[1] ? color.green : color.red, linewidth=3) //p1 = plot(upper, "Upper BB", color=#2962FF) //p2 = plot(lower, "Lower BB", color=#2962FF) //fill(p1, p2, title = "Background", color=color.blue) //plot(smallvwapValue, color=#13C425, linewidth=2) //plot(bigvwapValue, color=#CA1435, linewidth=2)