ডুয়াল চ্যানেল ট্র্যাকিং বিপরীতমুখী কৌশল হল বিপরীতমুখী ট্রেডিং কৌশল যা বোলিংজার ব্যান্ড, কেল্টনার চ্যানেল এবং গতির সূচককে একত্রিত করে। এটি বোলিংজার ব্যান্ড এবং কেল্টনার চ্যানেলগুলির সংশ্লেষণের মাধ্যমে মূল্য সংকোচনের অঞ্চলগুলি সনাক্ত করে এবং প্রবেশ এবং প্রস্থান করার জন্য বিপরীতমুখী সংকেত নির্ধারণের জন্য গতির সূচকগুলি ব্যবহার করে।
বোলিংজার ব্যান্ডের জন্য মাঝারি, উপরের এবং নীচের ব্যান্ড গণনা করুন
কেল্টনার চ্যানেলগুলির জন্য মাঝারি, উপরের এবং নীচের ব্যান্ডগুলি গণনা করুন
বোলিংজার ব্যান্ডগুলি কেল্টনার চ্যানেলের ভিতরে রয়েছে কিনা তা নির্ধারণ করুন
বিবি এবং কেসি মিডপয়েন্টের তুলনায় বন্ধের রৈখিক রিগ্রেশন ঢাল ভ্যালু গণনা করুন
বন্ধের জন্য ROC এবং ROC এর EMA গণনা করুন
যখন চাপ দেওয়া হয়, তখন val > 0 এবং ROC প্রান্তিক সীমা অতিক্রম করে
স্টপ লস এবং লাভের শর্তাবলী নির্ধারণ করুন
বিপরীতমুখী জন্য দ্বৈত চ্যানেল সিস্টেম একত্রিত করে উন্নত নির্ভুলতা
লিনিয়ার রিগ্রেশন এবং পরিবর্তন হার ব্যবহার করে মিথ্যা সংকেত এড়ানো
পণ্যগুলির মধ্যে অপ্টিমাইজেশনের জন্য নমনীয় সামঞ্জস্যযোগ্য পরামিতি
স্টপ লস/টেক প্রফিট সহ ট্রেড প্রতি কার্যকর ঝুঁকি নিয়ন্ত্রণ
কৌশলটি কার্যকর করার জন্য পর্যাপ্ত ব্যাকটেস্ট ডেটা
সংকীর্ণকরণ সবসময় কার্যকর বিপরীত দিকে পরিচালিত করে না
মিথ্যা ব্রেকআউট ভুল সংকেত সৃষ্টি করে
স্টপ লস খুব বড়, যার ফলে অতিরিক্ত একক ক্ষতি হয়
পরীক্ষার সময়কাল অপর্যাপ্ত
আরো পণ্যের জন্য পরামিতি অপ্টিমাইজেশান
সমর্থন / প্রতিরোধের সনাক্তকরণের জন্য মেশিন লার্নিং যুক্ত করুন
ব্রেকআউট বৈধতা উন্নত করার জন্য ভলিউম পরিবর্তন অন্তর্ভুক্ত করুন
প্রবণতা স্থায়িত্বের জন্য একাধিক সময়সীমা বিশ্লেষণ সম্পাদন করুন
ডায়নামিক স্টপ লস/টেক প্রফিট অপ্টিমাইজ করুন
ডুয়াল চ্যানেল ট্র্যাকিং রিভার্সাল কৌশলটি বিপরীত ট্রেডিংয়ের জন্য বোলিংজার ব্যান্ড এবং কেল্টনার চ্যানেলের মতো সূচক ব্যবহার করে। প্যারামিটার অপ্টিমাইজেশনের মাধ্যমে, এটি কিছু পরিমাণে ব্রেকআউট বৈধতা সনাক্ত করতে বিভিন্ন পণ্য জুড়ে অভিযোজিত হতে পারে। তবে বিপরীত ট্রেডিং এখনও অন্তর্নিহিত ঝুঁকি বহন করে, স্থিতিশীল অতিরিক্ত রিটার্নের জন্য নির্ভুলতা উন্নত করতে মেশিন লার্নিং ইত্যাদির আরও অন্তর্ভুক্তির প্রয়োজন।
/*backtest start: 2023-10-02 00:00:00 end: 2023-11-01 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // Credit for the initial Squeeze Momentum code to LazyBear, rate of change code is from Kiasaki strategy("Squeeze X BF 🚀", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0) /////////////// Time Frame /////////////// testStartYear = input(2012, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0) testStopYear = input(2019, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(31, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0) testPeriod() => true /////////////// Squeeeeze /////////////// length = input(20, title="BB Length") mult = input(2.0,title="BB MultFactor") lengthKC=input(22, title="KC Length") multKC = input(1.5, title="KC MultFactor") useTrueRange = input(true, title="Use TrueRange (KC)") // Calculate BB source = close basis = sma(source, length) dev = mult * stdev(source, length) upperBB = basis + dev lowerBB = basis - dev // Calculate KC ma = sma(source, lengthKC) range = useTrueRange ? tr : (high - low) rangema = sma(range, lengthKC) upperKC = ma + rangema * multKC lowerKC = ma - rangema * multKC sqzOn = (lowerBB > lowerKC) and (upperBB < upperKC) sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC) noSqz = (sqzOn == false) and (sqzOff == false) val = linreg(source - avg(avg(highest(high, lengthKC), lowest(low, lengthKC)),sma(close,lengthKC)), lengthKC,0) ///////////// Rate Of Change ///////////// roclength = input(30, minval=1), pcntChange = input(7, minval=1) roc = 100 * (source - source[roclength]) / source[roclength] emaroc = ema(roc, roclength / 2) isMoving() => emaroc > (pcntChange / 2) or emaroc < (0 - (pcntChange / 2)) /////////////// Strategy /////////////// long = val > 0 and isMoving() short = val < 0 and isMoving() last_long = 0.0 last_short = 0.0 last_long := long ? time : nz(last_long[1]) last_short := short ? time : nz(last_short[1]) long_signal = crossover(last_long, last_short) short_signal = crossover(last_short, last_long) last_open_long_signal = 0.0 last_open_short_signal = 0.0 last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1]) last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1]) last_long_signal = 0.0 last_short_signal = 0.0 last_long_signal := long_signal ? time : nz(last_long_signal[1]) last_short_signal := short_signal ? time : nz(last_short_signal[1]) in_long_signal = last_long_signal > last_short_signal in_short_signal = last_short_signal > last_long_signal last_high = 0.0 last_low = 0.0 last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1]) last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1]) sl_inp = input(100.0, title='Stop Loss %') / 100 tp_inp = input(5000.0, title='Take Profit %') / 100 take_level_l = strategy.position_avg_price * (1 + tp_inp) take_level_s = strategy.position_avg_price * (1 - tp_inp) since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na slShort = strategy.position_avg_price * (1 + sl_inp) long_sl = in_long_signal ? slLong : na short_sl = in_short_signal ? slShort : na /////////////// Execution /////////////// if testPeriod() strategy.entry("Long", strategy.long, when=long) strategy.entry("Short", strategy.short, when=short) strategy.exit("Long Ex", "Long", stop=long_sl, limit=take_level_l, when=since_longEntry > 0) strategy.exit("Short Ex", "Short", stop=short_sl, limit=take_level_s, when=since_shortEntry > 0) /////////////// Plotting /////////////// bcolor = iff(val > 0, iff(val > nz(val[1]), color.lime, color.green), iff(val < nz(val[1]), color.red, color.maroon)) plot(val, color=bcolor, linewidth=4) bgcolor(not isMoving() ? color.white : long ? color.lime : short ? color.red : na, transp=70) bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=50) hline(0, color = color.white)