ভোলাটিলিটি স্ক্রুজ ব্রেকআউট কৌশল হল একটি ট্রেডিং সিস্টেম যা বোলিংজার ব্যান্ড (বিবি) এবং কেল্টনার চ্যানেল (কেসি) একীভূত করে ব্রেকআউট এবং ট্রেন্ড সংকেত পর্যবেক্ষণ করে প্রধান বাজার আন্দোলনগুলি ক্যাপচার করে। এই কৌশলটি বাজারের সংকোচনের সময়কাল (নিম্ন অস্থিরতা) এবং পরবর্তী ব্রেকআউট (উচ্চ অস্থিরতা) এর উপর দৃষ্টি নিবদ্ধ করে, মূল মূল্য আন্দোলনের শুরু হওয়ার আগে বাজারে প্রবেশ করার লক্ষ্যে।
ভোলটাইলিটি স্প্রেজ ব্রেকআউট কৌশলটির মূল বিষয় হ'ল বাজারের অস্থিরতার হ্রাস এবং বৃদ্ধি চিহ্নিত করা। বোলিংজার ব্যান্ডগুলি দামের স্ট্যান্ডার্ড বিচ্যুতি গণনা করে গঠিত হয়, যখন কেল্টনার চ্যানেল গড় সত্য পরিসীমা (এটিআর) এর উপর ভিত্তি করে। যখন বোলিংজার ব্যান্ডগুলি কেল্টনার চ্যানেলের মধ্যে সংকুচিত হয়, এটি বাজারের অস্থিরতার হ্রাসকে নির্দেশ করে, যা সম্ভাব্যভাবে উল্লেখযোগ্য মূল্যের ব্রেকআউটের দিকে পরিচালিত করে। কৌশলটি বোলিংজার ব্যান্ডগুলি কেল্টনার চ্যানেলের মধ্যে রয়েছে কিনা এবং দামটি বোলিংজার ব্যান্ডগুলির
এই কৌশলটির প্রাথমিক সুবিধা হ'ল এটিতে অস্থিরতা এবং প্রবণতা সূচকগুলির সংমিশ্রণ রয়েছে, যা একটি বিস্তৃত বাজার দৃষ্টিভঙ্গি সরবরাহ করে। বোলিংজার ব্যান্ড এবং কেল্টনার চ্যানেলকে একীভূত করে কৌশলটি সম্ভাব্য বড় বাজার চলাচলকে কার্যকরভাবে সনাক্ত করতে পারে। তদতিরিক্ত, ইএমএ প্রবণতা সারিবদ্ধতার ব্যবহার বাজার দিকটি নিশ্চিত করতে এবং মিথ্যা সংকেত হ্রাস করতে সহায়তা করতে পারে।
ভোলাটিলিটি স্প্রেজ ব্রেকআউট কৌশলটির প্রধান ঝুঁকি মিথ্যা ব্রেকআউট সংকেত এবং বাজারের অনিশ্চয়তার মধ্যে রয়েছে। উচ্চ অস্থিরতার অবস্থার অধীনে, বোলিংজার ব্যান্ডগুলি প্রায়শই লঙ্ঘন হতে পারে, যা বিভ্রান্তিকর সংকেতগুলির দিকে পরিচালিত করে। তদতিরিক্ত, যদি বাজারের প্রবণতা সঠিকভাবে চিহ্নিত না হয় তবে কৌশলটি অনুপযুক্ত বাণিজ্য তৈরি করতে পারে। এই ঝুঁকিগুলি প্রশমিত করতে, পরামিতিগুলি সামঞ্জস্য করে, অতিরিক্ত সূচক অন্তর্ভুক্ত করে বা আরও কঠোর প্রবেশের শর্ত গ্রহণ করে কৌশলটি অনুকূল করা যেতে পারে।
এই কৌশলটি বিভিন্ন উপায়ে অপ্টিমাইজ করা যেতে পারে।
দ্বিতীয়ত, অতিরিক্ত ট্রেডিং সিগন্যাল নিশ্চিতকরণের জন্য রিলেটিভ স্ট্রেনথ ইনডেক্স (আরএসআই) বা মুভিং এভারেজ কনভার্জেন্স ডিভার্জেন্স (এমএসিডি) এর মতো অতিরিক্ত প্রযুক্তিগত সূচক প্রবর্তন করা। অবশেষে, আরও বিস্তৃত এবং বৈচিত্র্যময় ট্রেডিং কাঠামো গঠনের জন্য এই কৌশলটি অন্যান্য ধরণের ট্রেডিং সিস্টেমের সাথে একত্রিত করার বিষয়টি বিবেচনা করা।
ভোলটাইলিটি স্ক্রুজ ব্রেকআউট কৌশল একটি শক্তিশালী এবং নমনীয় ট্রেডিং সিস্টেম যা বোলিংজার ব্যান্ড এবং কেল্টনার চ্যানেলের শক্তিকে একত্রিত করে। বাজারের অস্থিরতা এবং প্রবণতা সংকেত পর্যবেক্ষণ করে এটি কার্যকরভাবে প্রধান বাজারের আন্দোলন সনাক্ত করতে পারে। যদিও কৌশলটি নির্দিষ্ট ঝুঁকি বহন করে, তবে সঠিক অপ্টিমাইজেশন এবং পরামিতি সমন্বয়গুলির মাধ্যমে এগুলি উল্লেখযোগ্যভাবে প্রশমিত করা যেতে পারে। সামগ্রিকভাবে, এই কৌশলটি প্রধান বাজারের প্রবণতা এবং ব্রেকআউটগুলি ক্যাপচার এবং মূলধন করার জন্য একটি অনন্য দৃষ্টিভঙ্গি সরবরাহ করে।
/*backtest start: 2023-01-01 00:00:00 end: 2023-11-09 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/ // © Bishnu103 //@version=4 strategy(title="Squeeze Breakout using BB and KC [v1.0][Bishnu103]",shorttitle="BB BREAKOUT",overlay=true,calc_on_every_tick=true) // *********************************************************************************************************************** // input variables bbLength = input(title="BB Length", minval=1, defval=20) bbStdDev = input(title="BB StdDev", minval=1, defval=2) kcLength = input(title="KC Length", minval=1, defval=20) kcMult = input(title="KC Mult", defval=1.5) atrLength = input(title="ATR Length", minval=1, defval=20) entry_distance = input(title="Entry distance from alert", minval=1, maxval=10, defval=10) bb_squeeze_switch = input(title="BB Squeeze Check", type=input.bool, defval=true) bb_squeeze_width = input(title="BB Squeeze Width", minval=1.0, defval=3.0) bb_in_kc_switch = input(title="BB within KC Check", type=input.bool, defval=false) ema_trend_switch = input(title="EMA Trend Check", type=input.bool, defval=false) show_bb_switch = input(title="Show BB", type=input.bool, defval=true) show_kc_switch = input(title="Show KC", type=input.bool, defval=true) show_8ema_switch = input(title="Show 8EMA", type=input.bool, defval=true) show_emas_switch = input(title="Show EMAs", type=input.bool, defval=false) // *********************************************************************************************************************** // global variables closed_above_bb = false closed_below_bb = false // variable values available across candles var entry_price = 0.0 var sl_price = 0.0 var exit_price_8ema = 0.0 var candle_count = 0 // *********************************************************************************************************************** // function to return bollinger band values based on candle poition passed getBB(pos) => float basis = sma(close[pos], bbLength) float dev = bbStdDev * stdev(close[pos], bbLength) [basis, basis + dev, basis - dev] // function to return Keltner Channel values based on candle poition passed getKC(pos) => mKC = ema(close[pos],kcLength) range = kcMult * atr(atrLength)[pos] uKC = mKC + range lKC = mKC - range [mKC,uKC,lKC] // *********************************************************************************************************************** // strategy // // get current bb value [mBB_0,uBB_0,lBB_0] = getBB(0) [mBB_1,uBB_1,lBB_1] = getBB(1) // if a candle closes above bb and previous candle closed inside bb then it's a bullish signal if close[0] > uBB_0 closed_above_bb := true entry_price := high[0] // if a candle closes above bb and previous candle closed inside bb then it's a bullish signal if close[0] < lBB_0 closed_below_bb := true entry_price := low[0] // check if BB is in squeeze bb_in_squeeze = bb_squeeze_switch ? ((uBB_1 - lBB_1) < (atr(20)[1] * bb_squeeze_width)) : true // 6 candle's bb prior to the alert candle, are within keltner channel on either upper side of the bands or on lower side of the bands // bb [mBB_2,uBB_2,lBB_2] = getBB(2) [mBB_3,uBB_3,lBB_3] = getBB(3) [mBB_4,uBB_4,lBB_4] = getBB(4) [mBB_5,uBB_5,lBB_5] = getBB(5) [mBB_6,uBB_6,lBB_6] = getBB(6) // kc [mKC_1,uKC_1,lKC_1] = getKC(1) [mKC_2,uKC_2,lKC_2] = getKC(2) [mKC_3,uKC_3,lKC_3] = getKC(3) [mKC_4,uKC_4,lKC_4] = getKC(4) [mKC_5,uKC_5,lKC_5] = getKC(5) [mKC_6,uKC_6,lKC_6] = getKC(6) // check if either side 6 candle's bb are inside kc lower_squeeze_is_good = uBB_1 < uKC_1 and uBB_2 < uKC_2 and uBB_3 < uKC_3 and uBB_4 < uKC_4 and uBB_5 < uKC_5 and uBB_6 < uKC_6 upper_squeeze_is_good = lBB_1 > lKC_1 and lBB_2 > lKC_2 and lBB_3 > lKC_3 and lBB_4 > lKC_4 and lBB_5 > lKC_5 and lBB_6 > lKC_6 squeeze_is_good = bb_in_kc_switch ? (upper_squeeze_is_good or lower_squeeze_is_good) : true // EMAs (8, 21, 34, 55, 89) should be aligned in sequence ema_8 = ema(close,8) ema_21 = ema(close,21) ema_34 = ema(close,34) ema_55 = ema(close,55) ema_89 = ema(close,89) ema_trend_check1 = ema_trend_switch and closed_above_bb and ema_8 > ema_21 and ema_21 > ema_34 and ema_34 > ema_55 and ema_55 > ema_89 ema_trend_check2 = ema_trend_switch and closed_below_bb and ema_8 < ema_21 and ema_21 < ema_34 and ema_34 < ema_55 and ema_55 < ema_89 ema_trend_check = ema_trend_switch ? (ema_trend_check1 or ema_trend_check2) : true // *********************************************************************************************************************** // entry conditions long_entry = closed_above_bb and bb_in_squeeze and squeeze_is_good and ema_trend_check short_entry = closed_below_bb and bb_in_squeeze and squeeze_is_good and ema_trend_check candle_count := candle_count + 1 if long_entry or short_entry candle_count := 0 if long_entry or short_entry exit_price_8ema := na if long_entry or short_entry sl_price := mBB_0 // *********************************************************************************************************************** // exit conditions // long trade - a candle closes below 8ema and in next candle price crosses low of previous candle // short trade - a candle closes above 8ema and in next candle price crosses high of previous candle long_exit_8ema = strategy.position_size > 0 and crossunder(close,ema(close,8)) short_exit_8ema = strategy.position_size < 0 and crossover(close,ema(close,8)) if long_exit_8ema exit_price_8ema := low if short_exit_8ema exit_price_8ema := high // *********************************************************************************************************************** // position sizing price = if close[0] > 25000 25000 else price = close[0] qty = 25000/price // *********************************************************************************************************************** // entry if long_entry strategy.entry("BUY", strategy.long, qty, stop=entry_price, comment="BUY @ "+ tostring(entry_price)) if short_entry and candle_count < 11 strategy.entry("SELL", strategy.short, qty, stop=entry_price, comment="SELL @ "+ tostring(entry_price)) if candle_count > entry_distance strategy.cancel("BUY",true) strategy.cancel("SELL",true) // *********************************************************************************************************************** // exit if strategy.position_size > 0 and long_exit_8ema strategy.exit("EXIT using 8EMA", "BUY", stop=exit_price_8ema, comment="EXIT @ "+ tostring(exit_price_8ema)) if strategy.position_size < 0 and short_exit_8ema strategy.exit("EXIT using 8EMA", "SELL", stop=exit_price_8ema, comment="EXIT @ "+ tostring(exit_price_8ema)) // *********************************************************************************************************************** // plots // // plot BB [mBBp,uBBp,lBBp] = getBB(0) p_mBB = plot(show_bb_switch ? mBBp : na, color=color.teal) p_uBB = plot(show_bb_switch ? uBBp : na, color=color.teal) p_lBB = plot(show_bb_switch ? lBBp : na, color=color.teal) fill(p_uBB,p_lBB,color=color.teal,transp=95) // plot KC [mKCp,uKCp,lKCp] = getKC(0) p_uKC = plot(show_kc_switch ? uKCp : na, color=color.red) p_lKC = plot(show_kc_switch ? lKCp : na, color=color.red) // plot 8 ema plot(show_8ema_switch?ema_8:na,color=color.blue) // plot EMAs plot(show_emas_switch ? ema_8 : na, color=color.green) plot(show_emas_switch ? ema_21 : na, color=color.lime) plot(show_emas_switch ? ema_34 : na, color=color.maroon) plot(show_emas_switch ? ema_55 : na, color=color.orange) plot(show_emas_switch ? ema_89 : na, color=color.purple)