এই কৌশলটি বাজারের প্রবণতা সনাক্ত করতে বোলিংজার ব্যান্ড এবং কেল্টনার চ্যানেল সংকেতগুলির সংমিশ্রণ ব্যবহার করে। বোলিংজার ব্যান্ডগুলি একটি প্রযুক্তিগত বিশ্লেষণ সরঞ্জাম যা মূল্যের অস্থিরতার পরিসরের উপর ভিত্তি করে চ্যানেলগুলি সংজ্ঞায়িত করে। কেল্টনার চ্যানেল সংকেত সমর্থন বা প্রতিরোধের স্তর নির্ধারণের জন্য মূল্যের অস্থিরতা এবং প্রবণতাকে একত্রিত করে। এই কৌশলটি লম্বা এবং সংক্ষিপ্ত সুযোগগুলি সন্ধানের জন্য বোলিংজার ব্যান্ড এবং কেল্টনার চ্যানেলের মধ্যে সোনার ক্রস ঘটে কিনা তা বিচার করে উভয় সূচকের সুবিধাগুলি ব্যবহার করে। এটি সংকেতগুলির বৈধতা যাচাই করতে ট্রেডিং ভলিউম অন্তর্ভুক্ত করে, যা কার্যকরভাবে প্রবণতার শুরু সনাক্ত করতে পারে এবং অবৈধ সংকেতগুলি ফিল্টার করা সর্বাধিক করতে পারে।
এই কৌশলটি মূলত অস্থিরতা পরিসীমা এবং গতি নির্ধারণের জন্য বোলিংজার ব্যান্ডের উপর নির্ভর করে। কেল্টনার চ্যানেলটি এর অনুরূপ বৈশিষ্ট্যগুলির কারণে একটি যাচাইকরণ সরঞ্জাম হিসাবে কাজ করে তবে বিভিন্ন পরামিতি। এই দুটি সূচক একসাথে ব্যবহার করে সংকেতের নির্ভুলতা উন্নত করে। ট্রেডিং ভলিউম অন্তর্ভুক্ত করা অবৈধ সংকেতগুলি ফিল্টার করতেও সহায়তা করে।
স্টপ লস রেঞ্জ বাড়ানো বা এমএসিডি-র মতো নিশ্চিতকারী সূচক যোগ করা মিথ্যা সংকেত থেকে ঝুঁকি হ্রাস করতে পারে।
এই কৌশলটি ট্রেডিং ভলিউম দ্বারা যাচাই করা প্রবণতা সনাক্ত করতে বোলিংজার ব্যান্ড এবং কেল্টনার চ্যানেলগুলিকে একত্রিত করে। প্যারামিটার অপ্টিমাইজেশান এবং সূচক যুক্ত করার মতো আরও উন্নতি এটিকে আরও বেশি বাজারের ব্যবস্থার জন্য শক্তিশালী করবে। এটি একটি সহজেই উপলব্ধিযোগ্য এবং কাস্টমাইজযোগ্য ট্রেডিং কৌশল হিসাবে শক্তিশালী সম্ভাব্যতা রয়েছে।
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 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/ // © jensenvilhelm //@version=5 strategy("BB and KC Strategy", overlay=true) // Define the input parameters for the strategy, these can be changed by the user to adjust the strategy kcLength = input.int(20, "KC Length", minval=1) // Length for Keltner Channel calculation kcStdDev = input.float(2.2, "KC StdDev") // Standard Deviation for Keltner Channel calculation bbLength = input.int(20, "BB Length", minval=1) // Length for Bollinger Bands calculation bbStdDev = input.float(2, "BB StdDev") // Standard Deviation for Bollinger Bands calculation volumeLength = input.int(10, "Volume MA Length", minval=1) // Length for moving average of volume calculation stopLossPercent = input.float(1.5, "Stop Loss (%)") // Percent of price for Stop loss trailStopPercent = input.float(2, "Trail Stop (%)") // Percent of price for Trailing Stop barsInTrade = input.int(20, "Bars in trade before exit", minval = 1) // Minimum number of bars in trade before considering exit // Calculate Bollinger Bands and Keltner Channel [bb_middle, bb_upper, bb_lower] = ta.bb(close, bbLength, bbStdDev) // Bollinger Bands calculation [kc_middle, kc_upper, kc_lower] = ta.kc(close, kcLength, kcStdDev) // Keltner Channel calculation // Calculate moving average of volume vol_ma = ta.sma(volume, volumeLength) // Moving average of volume calculation // Plotting Bollinger Bands and Keltner Channels on the chart plot(bb_upper, color=color.red) // Bollinger Bands upper line plot(bb_middle, color=color.blue) // Bollinger Bands middle line plot(bb_lower, color=color.red) // Bollinger Bands lower line plot(kc_upper, color=color.rgb(105, 255, 82)) // Keltner Channel upper line plot(kc_middle, color=color.blue) // Keltner Channel middle line plot(kc_lower, color=color.rgb(105, 255, 82)) // Keltner Channel lower line // Define entry conditions: long position if upper KC line crosses above upper BB line and volume is above MA of volume // and short position if lower KC line crosses below lower BB line and volume is above MA of volume longCond = ta.crossover(kc_upper, bb_upper) and volume > vol_ma // Entry condition for long position shortCond = ta.crossunder(kc_lower, bb_lower) and volume > vol_ma // Entry condition for short position // Define variables to store entry price and bar counter at entry point var float entry_price = na // variable to store entry price var int bar_counter = na // variable to store bar counter at entry point // Check entry conditions and if met, open long or short position if (longCond) strategy.entry("Buy", strategy.long) // Open long position entry_price := close // Store entry price bar_counter := 1 // Start bar counter if (shortCond) strategy.entry("Sell", strategy.short) // Open short position entry_price := close // Store entry price bar_counter := 1 // Start bar counter // If in a position and bar counter is not na, increment bar counter if (strategy.position_size != 0 and na(bar_counter) == false) bar_counter := bar_counter + 1 // Increment bar counter // Define exit conditions: close position if been in trade for more than specified bars // or if price drops by more than specified percent for long or rises by more than specified percent for short if (bar_counter > barsInTrade) // Only consider exit after minimum bars in trade if (bar_counter >= barsInTrade) strategy.close_all() // Close all positions // Stop loss and trailing stop if (strategy.position_size > 0) strategy.exit("Sell", "Buy", stop=entry_price * (1 - stopLossPercent/100), trail_points=entry_price * trailStopPercent/100) // Set stop loss and trailing stop for long position else if (strategy.position_size < 0) strategy.exit("Buy", "Sell", stop=entry_price * (1 + stopLossPercent/100), trail_points=entry_price * trailStopPercent/100) // Set stop loss and trailing stop for short position