এই কৌশলটি প্রবণতা অনুসরণ করার জন্য দ্বৈত চলমান গড় বোলিংজার ব্যান্ডের উপর ভিত্তি করে ট্রেডিং সিদ্ধান্ত নেয়। এটি নিম্ন রেলের কাছাকাছি কেনা এবং উপরের রেলের কাছাকাছি বিক্রি করে প্রবণতা পরিবর্তন নির্ধারণের জন্য বোলিংজার ব্যান্ডের উপরের এবং নীচের রেলগুলির সংযোজন এবং বিচ্যুতি ব্যবহার করে, নিম্ন ক্রয় এবং উচ্চ বিক্রয় অর্জন করতে।
এই কৌশলটি সহজ বোলিংজার ব্যান্ড এবং উন্নত বোলিংজার ব্যান্ড উভয়ের জন্য প্রযোজ্য।
সাধারণ বোলিংজার ব্যান্ডগুলি মাঝারি ব্যান্ডের জন্য বন্ধ মূল্যের এসএমএ ব্যবহার করে, যখন উন্নত বোলিংজার ব্যান্ডগুলি বন্ধ মূল্যের ইএমএ ব্যবহার করে।
উপরের এবং নীচের ব্যান্ডগুলি মধ্যবর্তী ব্যান্ড ± N স্ট্যান্ডার্ড বিচ্যুতি দ্বারা গণনা করা হয়।
কৌশলটি উপরের এবং নীচের ব্যান্ডগুলির মধ্যে স্প্রেডের উপর ভিত্তি করে প্রবণতার শক্তি বিচার করে। যখন স্প্রেড একটি প্রান্তিকের নীচে থাকে, এটি প্রবণতা অনুসরণ করার জন্য একটি প্রবণতা সময়ের শুরু নির্দেশ করে।
বিশেষত, যখন মূল্য নীচের ব্যান্ডের কাছে আসে, এটি দীর্ঘ হয়। যখন মূল্য উপরের ব্যান্ডের কাছে আসে, এটি অবস্থানটি বন্ধ করে দেয়। স্টপ লস পদ্ধতিটি নির্দিষ্ট শতাংশ। ট্রেইলিং স্টপও সক্ষম করা যেতে পারে।
অর্জিত মুনাফা নির্ভর করে মধ্যম ব্যাণ্ড বা উপরের ব্যান্ডের কাছাকাছি বন্ধের উপর।
এই কৌশলটি ক্ষতি এড়াতে শুধুমাত্র লাভজনকভাবে বিক্রি করতে পারে।
এই কৌশলটির সুবিধাঃ
সহজ এবং উন্নত বোলিংজার ব্যান্ডের তুলনা করে, এটি উচ্চতর দক্ষতার জন্য আরও ভাল সংস্করণ চয়ন করতে পারে।
যখন স্প্রেড সংকীর্ণ হয়, এটি একটি শক্তিশালী প্রবণতা নির্দেশ করে। প্রবণতা অনুসরণ উচ্চতর জয় হার আছে।
ফিক্সড শতাংশ স্টপ লস একক ট্রেড ক্ষতি নিয়ন্ত্রণ করে। মধ্যম বা উপরের ব্যান্ডের কাছাকাছি মুনাফা নিন। ট্রেলিং স্টপ আরও মুনাফা লক করে।
শুধুমাত্র লাভজনকভাবে বিক্রি করলে ক্ষতির পরিমাণ বাড়বে না।
ঝুঁকিগুলির মধ্যে রয়েছেঃ
প্রবণতা অনুসরণে ঝুঁকি থাকে। মানসিকভাবে ধারাবাহিক ক্ষতি সহ্য করতে হয়।
যখন ব্যান্ডগুলি প্রশস্ত হয়, তখন বাজারটি পাশের দিকে ঘুরতে পারে। কৌশলটি কম কার্যকর। প্রবণতা পুনরায় শুরু না হওয়া পর্যন্ত ট্রেডিং স্থগিত করা দরকার।
নির্দিষ্ট শতাংশ স্টপ লস খুব আক্রমণাত্মক হতে পারে। এটিআর স্টপের মতো আরও মাঝারি স্টপ দরকার।
কৌশলটি নিম্নলিখিত বিষয়গুলির উপর অপ্টিমাইজ করতে পারেঃ
বিভিন্ন বাজারের জন্য সর্বোত্তম সমন্বয় খুঁজে পেতে বিভিন্ন এমএ দৈর্ঘ্য, স্ট্যান্ডার্ড ডিভিয়েশন মাল্টিপল পরীক্ষা করুন।
ম্যাকডি, কেডি এর মতো ফিল্টার যোগ করুন বোলিংজার সিগন্যালের উপরে উইপসা মার্কেটের সময় ট্রেড হ্রাস করতে।
বিভিন্ন ট্রেইলিং স্টপ পদ্ধতি পরীক্ষা করুন অথবা অস্থিরতা, ATR ইত্যাদির উপর ভিত্তি করে স্টপ লস অপ্টিমাইজ করুন।
ট্রেড প্রতি অবস্থান আকার অপ্টিমাইজ করুন। বিভিন্ন অ্যাড-অন কৌশল পরীক্ষা করুন।
এই কৌশলটি দ্বৈত বোলিংজার ব্যান্ডের শক্তিকে একত্রিত করে, ব্যান্ডের প্রস্থ এবং ট্রেডিংয়ের সময় ট্রেডিংয়ের pullbacks দ্বারা প্রবণতার শক্তি বিচার করে। এটি ঝুঁকি নিয়ন্ত্রণের জন্য সঠিক স্টপ লসও সেট করে। পরামিতি অপ্টিমাইজেশান এবং ফিল্টার যুক্ত করার মাধ্যমে আরও উন্নতি করা যেতে পারে।
/*backtest start: 2023-10-01 00:00:00 end: 2023-10-31 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/ // © JCGMarkets //@version=4 strategy("B.Bands | Augmented | Intra-range | Long-Only", shorttitle = "BB|A|IR|L", initial_capital=5000, commission_value=0.075, slippage = 1, overlay = true) //Technical Indicators Data show_simp = input(false, title="Trade on Simple Bollinger Bands ", type= input.bool, group="Select Strategy System") show_augm = input(true, title="Trade on Augmented Bollinger Bands", type= input.bool, group="Select Strategy System") periods = input(20, title="Periods for Moving Average", type =input.integer, minval = 2, step = 1, group="Technical Inputs") std = input(2, title="Std", type = input.float, minval=0.1 , step = 0.1, group="Technical Inputs") // Strategy data max_spread_bb = input(20000.0, title="Max Spread Tolerance Beetween Bands", type=input.float, step=0.1, group="Strategy Inputs") entry_source = input(close, title="Entry data source", type=input.source, group="Strategy Inputs") exit_source = input(high, title="Exit data source", type=input.source, group="Strategy Inputs") take_profit = input("middle", title = "Profit to band:", options = ["middle", "opposite"], group="Strategy Inputs") stop_loss = input(3.00, title="Stop Loss %", type=input.float, step=0.05, group="Strategy Inputs") trailing = input(false, title="Activate trailing stop?", type = input.bool, group="Strategy Inputs") stop_perc = input(6.00, title="Trailing %", type=input.float, step=0.125, group="Strategy Inputs") * 0.01 sell_profit = input(false, title="Only sell in profit (Stop Loss still active) ", type= input.bool, group="Strategy Inputs") var SL = 0.0 var SLT= 0.0 //Simple BB Calculation -> adapt if needed with different std for upper-lower, sma-ema, etc middle_sim = sma(close, periods) //Augmented BB Calculation -> adapt if needed with different std for upper lower, etc middle_augm = ema(close, periods) middle_upp = ema(high, periods) middle_low = ema(low, periods) //Multiplier dev = stdev(close, periods) * std //Upper & Lower Bands upper = (middle_sim + dev) lower = (middle_sim - dev) //Augmented Bands upper_augm = (middle_upp + dev) lower_augm = (middle_low - dev) //Bands Spread spread = upper - lower spread_augm = upper_augm - lower_augm //From date filter_from = input( true, title="===> From", group="Date Control") from_y = input( 2010, title = "from year", group="Date Control") from_m = input( 1, title = "from month", minval =1, maxval=12, group="Date Control") from_d = input( 1, title = "from day", minval=1, maxval=31, group="Date Control") //To date filter_to = input( true, title="===> To", group="Date Control") to_y = input( 2030, title = "To year", group="Date Control") to_m = input( 1, title = "To month", minval =1, maxval=12, group="Date Control") to_d = input( 1, title = "To day", minval=1, maxval=31, group="Date Control") // Date Condition In_date() => true in_position = strategy.position_size > 0 // Trailing stop SLT := if in_position and In_date() stop_inicial = entry_source * (1 - stop_perc) max(stop_inicial, SLT[1]) else 0 slts = (low <= SLT) and (trailing == true) //Essential Trade logics entry_long = (entry_source <= lower) and (spread < max_spread_bb) entry_long_augm = (entry_source <= lower_augm) and (spread_augm < max_spread_bb) // Simple Bollinger Conditions if (not in_position and show_simp and In_date()) if entry_long // Trigger buy order position_size = round( strategy.equity / close ) // All available equity for this strategy example strategy.entry("Entry", strategy.long, qty = position_size ) SL := close * (1 - (stop_loss / 100)) // You could determine wether or not implement stop loss with bool input and if condition here. if in_position and show_simp and not sell_profit and In_date() //Exits if not sell in profit if take_profit == "middle" strategy.exit("Target", "Entry", limit = middle_sim, stop = SL, comment="Exit") if take_profit == "opposite" strategy.exit("Target", "Entry", limit = upper, stop = SL, comment="Exit") if in_position and show_simp and sell_profit and In_date() //Exits if sell in profit if take_profit == "middle" strategy.exit("Target", "Entry", limit = (strategy.openprofit > 0 ? middle_sim: na), stop = SL, comment="Exit") if take_profit == "opposite" strategy.exit("Target", "Entry", limit = (strategy.openprofit > 0 ? upper: na), stop = SL, comment="Exit") if in_position and show_simp and slts and In_date() //Trailing activation strategy.close("Entry", comment="SLT") if not In_date() //Exit due out of date range strategy.close("Entry", comment="Out of date range") // Augmented Bollinger Conditions if (not in_position and show_augm and In_date()) if entry_long_augm // Trigger buy order position_size = round( strategy.equity / close ) strategy.entry("Entry_A", strategy.long, qty = position_size ) SL := close * (1 - (stop_loss / 100) ) if in_position and show_augm and not sell_profit and In_date() //Exits and not sell in profit if take_profit == "middle" strategy.exit("Target", "Entry_A", limit = middle_augm, stop = SL, comment="Exit") if take_profit == "opposite" strategy.exit("Target", "Entry_A", limit = upper_augm, stop = SL, comment="Exit") if in_position and show_augm and sell_profit and In_date() //Exit only in profit if take_profit == "middle" strategy.exit("Target", "Entry_A", limit = (strategy.openprofit > 0 ? middle_augm:na), stop = SL, comment="Exit") if take_profit == "opposite" strategy.exit("Target", "Entry_A", limit = (strategy.openprofit > 0 ? upper_augm: na) , stop = SL, comment="Exit") if in_position and show_augm and slts and In_date() //Trigger trailing strategy.close("Entry_A", comment="SLT") if not In_date() //Out of date trigger strategy.close("Entry_A", comment= "Out of date range") // Plotting plot(in_position ? SL > 0 ? SL : na : na , style = plot.style_circles, color = color.red, title = "Stop Loss") plot(in_position ? trailing ? SLT > 0 ? SLT : na : na : na , style = plot.style_circles, color = color.blue, title = "Trailing Stop" ) s = plot(show_simp ? upper : na , color = color.aqua) plot(show_simp ? middle_sim : na , color=color.red) i = plot(show_simp ? lower : na , color = color.aqua) fill(s,i, color=color.new(color.aqua,90)) plot(show_augm ? middle_augm : na , color=color.blue) s_a = plot( show_augm ? upper_augm : na, color=color.orange) i_a = plot( show_augm ? lower_augm : na, color= color.orange) fill(s_a,i_a, color=color.new(color.orange, 90))