এটি বোলিংজার ব্যান্ড চ্যানেলের উপর ভিত্তি করে একটি বিপরীতমুখী দোলন প্রবণতা কৌশল। এটি প্রবণতা নির্ধারণের জন্য বোলিংজার ব্যান্ডের উপরের এবং নীচের চ্যানেল ব্যবহার করে এবং যখন দাম চ্যানেলের সীমানার কাছাকাছি আসে তখন বিপরীতমুখী সুযোগগুলি সন্ধান করে।
কৌশলটি মূল প্রযুক্তিগত সূচক হিসাবে বোলিংজার ব্যান্ড ব্যবহার করে। বোলিংজার ব্যান্ডগুলি এন-পরিয়ড চলমান গড় এবং উপরের / নীচের ব্যান্ডগুলির বিচ্যুতি নিয়ে গঠিত। উপরের ব্যান্ড = এন-পরিয়ড এমএ + এম * এন-পরিয়ড স্ট্যান্ডার্ড বিচ্যুতি, নিম্ন ব্যান্ড = এন-পরিয়ড এমএ - এম * এন-পরিয়ড স্ট্যান্ডার্ড বিচ্যুতি। এন এবং এম পরামিতি।
যখন মূল্য উপরের ব্যান্ডের কাছে আসে, এটি একটি আপট্রেন্ড নির্দেশ করে তবে শীর্ষে বিপরীত হতে পারে। যখন মূল্য নিম্ন ব্যান্ডের কাছে আসে, এটি একটি ডাউনট্রেন্ড নির্দেশ করে তবে নীচে বিপরীত হতে পারে। বোলিংজার ব্যান্ডের কার্যকর ব্রেকআউট সম্ভাব্য বিপরীতের সংকেত দিতে পারে।
বাণিজ্যের বিশেষ নিয়ম হল:
উপরের ব্যান্ড বন্ধ হলে লং, নিচের ব্যান্ড বন্ধ হলে শর্ট।
মুনাফা গ্রহণ এবং স্টপ লস সিগন্যাল হিসাবে এন-পেরিওড চলমান গড় ব্যবহার করুন। যখন ম্যাকের নীচে বন্ধ হয় তখন দীর্ঘ বন্ধ করুন, যখন ম্যাকের উপরে বন্ধ হয় তখন সংক্ষিপ্ত বন্ধ করুন।
প্রতিটি লেনদেনের জন্য নির্দিষ্ট পরিমাণ ব্যবহার করুন।
ফিক্সড ফ্রেকশনাল পজিশন সাইজিং ব্যবহার করুন। ফিক্সড মুনাফা অনুপাত পূরণ করার সময় স্থির পরিমাণে পজিশনের আকার বাড়ান, ক্ষতির সময় আকার হ্রাস করুন।
এই কৌশলটির সুবিধাঃ
ট্রেন্ডের দিকনির্দেশনা এবং ট্রেড বিপরীতমুখীতা নির্ধারণের জন্য বোলিংজার ব্যান্ড চ্যানেল ব্যবহার করে, বেশিরভাগ হুইপস এড়ানো হয় এবং জয় হার উন্নত হয়।
চলমান গড় একটি নির্ভরযোগ্য মুনাফা গ্রহণ / স্টপ লস সংকেত, বেশিরভাগ মুনাফায় লক।
নির্দিষ্ট পরিমাণ সহজ এবং বাস্তবায়ন করা সহজ, জটিল গণনার প্রয়োজন নেই।
স্থির ভগ্নাংশ অবস্থান আকার লাভ বৃদ্ধি যখন অবস্থান সমন্বয় দ্বারা ঝুঁকি নিয়ন্ত্রণ করে।
এই কৌশলের ঝুঁকি:
বোলিংজার ব্যান্ড ভুল সংকেত তৈরি করতে পারে, যা ট্রেন্ডের বিরুদ্ধে ট্রেডিংয়ে ক্ষতির কারণ হতে পারে।
চলমান গড়ের তুলনায় ব্যবধান কম থাকলে লাভের পরিমাণ কম হতে পারে।
নির্দিষ্ট পরিমাণ বাজারের অবস্থার সাথে মানিয়ে নিতে পারে না, পজিশনের আকার বাড়ার/কম হওয়ার ঝুঁকি।
স্থির ভগ্নাংশ পদ্ধতিতে অবস্থান আকারের আক্রমণাত্মক সমন্বয় হ্রাস বাড়িয়ে তুলতে পারে।
সমাধানঃ সংকেত নির্ভুলতা উন্নত করতে বোলিংজার ব্যান্ডের পরামিতিগুলি অনুকূল করুন। প্রবণতা নির্ধারণের জন্য অন্যান্য সূচক যুক্ত করুন। স্থির পরিমাণের আকার হ্রাস করুন। ভগ্নাংশের অবস্থান আকারের পদ্ধতিতে অবস্থান আকারের সমন্বয় অনুপাত হ্রাস করুন।
কৌশলটি নিম্নলিখিত দিক থেকে উন্নত করা যেতে পারেঃ
নির্ভুলতা বাড়াতে n এবং m এর মত Bollinger Bands পরামিতি অপ্টিমাইজ করুন।
ভুল সংকেত এড়ানোর জন্য MACD, KD এর মত অন্যান্য সূচক যোগ করুন।
বাজারের অবস্থার উপর ভিত্তি করে স্থির পরিমাণকে গতিশীল অবস্থানে পরিবর্তন করুন।
স্বচ্ছ ইক্যুইটি কার্ভের জন্য ভগ্নাংশীয় অবস্থান আকারের মধ্যে অবস্থান আকারের সমন্বয় অনুপাত কম।
ঝুঁকি নিয়ন্ত্রণে স্টপ লস কৌশল যেমন স্টপ লস, ব্রেকআউট স্টপ লস যোগ করুন।
সর্বোত্তম প্যারামিটার সমন্বয় খুঁজে পেতে প্যারামিটার অপ্টিমাইজেশান।
সংক্ষেপে, এটি একটি সাধারণ বোলিংজার ব্যান্ড বিপরীতমুখী কৌশল। এটি বোলিংজার ব্যান্ড দ্বারা বিপরীতমুখী পয়েন্টগুলি সনাক্ত করে, চলমান গড় দ্বারা মুনাফা গ্রহণ / স্টপ লস সেট করে, স্থির পরিমাণ এবং ভগ্নাংশের অবস্থান আকারের দ্বারা ঝুঁকি নিয়ন্ত্রণ করে। একটি বিপরীতমুখী কৌশল হিসাবে, এটি তত্ত্বগতভাবে কিছু উইপসা এড়ায় এবং ঐতিহ্যগত বোলিংজার ব্যান্ড কৌশলগুলির তুলনায় মুনাফা বৃদ্ধি করে। তবে, বোলিংজার ব্যান্ডের ত্রুটিগুলি, চলমান গড়গুলির আরও অপ্টিমাইজেশন এবং শক্তিশালী ব্যবহারিক প্রয়োগের জন্য ঝুঁকি ব্যবস্থাপনা প্রয়োজন।
/*backtest start: 2023-09-30 00:00:00 end: 2023-10-30 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © gsanson66 //This strategy uses the well-known Bollinger Bands Indicator //@version=5 strategy("BOLLINGER BANDS BACKTESTING", shorttitle="BB BACKTESTING", overlay=true, initial_capital=1000, default_qty_type=strategy.cash, default_qty_value=950, commission_type=strategy.commission.percent, commission_value=0.18) //----------------------------------------FUNCTIONS---------------------------------------// //@function Displays text passed to `txt` when called. debugLabel(txt, color) => label.new(bar_index, high, text = txt, color=color, style = label.style_label_lower_right, textcolor = color.black, size = size.small) //@function which looks if the close date of the current bar falls inside the date range inBacktestPeriod(start, end) => (time >= start) and (time <= end) //---------------------------------------USER INPUTS--------------------------------------// //Technical parameters bbLength = input.int(defval=20, minval=1, title="BB Length", group="Technical Parameters") mult = input.float(defval=2, minval=0.1, title="Standard Deviation Multipler", group="Technical Parameters") smaLength = input.int(defval=20, minval=1, title="SMA Exit Signal Length", group="Technical Parameters") //Money Management fixedRatio = input.int(defval=400, minval=1, title="Fixed Ratio Value ($)", group="Money Management") increasingOrderAmount = input.int(defval=200, minval=1, title="Increasing Order Amount ($)", group="Money Management") //Backtesting period startDate = input(title="Start Date", defval=timestamp("1 Jan 2020 00:00:00"), group="Backtesting Period") endDate = input(title="End Date", defval=timestamp("1 July 2024 00:00:00"), group="Backtesting Period") //----------------------------------VARIABLES INITIALISATION-----------------------------// strategy.initial_capital = 50000 //Exit SMA smaExit = ta.sma(close, smaLength) //BB Calculation basis = ta.sma(close, bbLength) dev = mult * ta.stdev(close, bbLength) upperBB = basis + dev lowerBB = basis - dev //Money management equity = strategy.equity - strategy.openprofit var float capital_ref = strategy.initial_capital var float cashOrder = strategy.initial_capital * 0.95 //Backtesting period bool inRange = na //------------------------------CHECKING SOME CONDITIONS ON EACH SCRIPT EXECUTION-------------------------------// //Checking if the date belong to the range inRange := true //Checking performances of the strategy if equity > capital_ref + fixedRatio spread = (equity - capital_ref)/fixedRatio nb_level = int(spread) increasingOrder = nb_level * increasingOrderAmount cashOrder := cashOrder + increasingOrder capital_ref := capital_ref + nb_level*fixedRatio if equity < capital_ref - fixedRatio spread = (capital_ref - equity)/fixedRatio nb_level = int(spread) decreasingOrder = nb_level * increasingOrderAmount cashOrder := cashOrder - decreasingOrder capital_ref := capital_ref - nb_level*fixedRatio //Checking if we close all trades in case where we exit the backtesting period if strategy.position_size!=0 and not inRange strategy.close_all() debugLabel("END OF BACKTESTING PERIOD : we close the trade", color=color.rgb(116, 116, 116)) //-----------------------------------EXIT SIGNAL------------------------------// if strategy.position_size > 0 and close < smaExit strategy.close("Long") if strategy.position_size < 0 and close > smaExit strategy.close("Short") //----------------------------------LONG/SHORT CONDITION---------------------------// //Long Condition if close > upperBB and inRange qty = cashOrder/close strategy.entry("Long", strategy.long, qty) //Short Condition if close < lowerBB and inRange qty = cashOrder/close strategy.entry("Short", strategy.short, qty) //---------------------------------PLOTTING ELEMENT----------------------------------// plot(smaExit, color=color.orange) upperBBPlot = plot(upperBB, color=color.blue) lowerBBPlot = plot(lowerBB, color=color.blue) fill(upperBBPlot, lowerBBPlot, title = "Background", color=strategy.position_size>0 ? color.rgb(0, 255, 0, 90) : strategy.position_size<0 ? color.rgb(255, 0, 0, 90) : color.rgb(33, 150, 243, 95))