এই কৌশলটির নাম
কৌশলটি মূলত মূল্যের প্রবণতা এবং প্রবেশের পয়েন্টগুলি নির্ধারণের জন্য বোলিংজার ব্যান্ড সূচকের উপর নির্ভর করে। বোলিংজার ব্যান্ডে তিনটি লাইন রয়েছেঃ
যখন মূল্য নিম্ন লাইন থেকে উপরের লাইন দিয়ে উপরে ভাঙন করে, তখন একটি উত্থান প্রবণতা চিহ্নিত করা হয়। যখন মূল্য উপরের লাইন থেকে নীচের লাইন দিয়ে নীচে ভাঙন করে, তখন একটি হ্রাস প্রবণতা শুরু হয়েছে। কৌশলটি এই দুটি ধরণের ব্রেকআউটের ঘটনায় দীর্ঘ বা সংক্ষিপ্ত প্রবেশ করে।
বিশেষ করে, কৌশলগত যুক্তি হলঃ
মিথ্যা ব্রেকআউট এড়ানোর জন্য, একটি চলমান গড় ফিল্টার যুক্ত করা হয়। প্রবেশ শুধুমাত্র যখন চলমান গড় ভাঙ্গার সাথে ব্যান্ডগুলি বন্ধ করে দেয় তখনই ঘটে।
এখানে সূচক হিসেবে এক্সপোনেনশিয়াল মুভিং মিডিয়ার ব্যবহার করা হয়।
সংক্ষেপে, প্রবণতা ভাঙ্গন নির্ধারণের মানদণ্ড হলঃ
প্রবেশের পর, স্টপ লস মাঝারি রেখা অনুসরণ করে। যখন দাম আবার মাঝারি রেখায় স্পর্শ করে তখন বের হয়।
এই কৌশলটির প্রধান শক্তিগুলির মধ্যে রয়েছেঃ
সুবিধাগুলি সত্ত্বেও, কৌশলটি নিম্নলিখিত ঝুঁকিগুলিও বহন করেঃ
উপরের ঝুঁকিগুলি নিয়ন্ত্রণ করার জন্য, নিম্নলিখিত অপ্টিমাইজেশন করা যেতে পারেঃ
ঝুঁকি বিশ্লেষণের ভিত্তিতে, নিম্নলিখিত ক্ষেত্রে আরও অপ্টিমাইজেশন করা যেতে পারেঃ
প্যারামিটার অপ্টিমাইজেশন: ব্যান্ড এবং চলমান গড়ের জন্য সর্বোত্তম প্যারামিটার সমন্বয় খুঁজে পেতে জেনেটিক অ্যালগরিদমের মতো আরও পদ্ধতিগত পদ্ধতি ব্যবহার করুন, কৌশলটিকে আরও স্থিতিশীল এবং লাভজনক করুন।
স্টপ লস অপ্টিমাইজেশন: সেরা স্টপ মেশিনটি নির্ধারণের জন্য বিভিন্ন স্টপ লস কৌশল যেমন এটিআর স্টপ, ট্রেলিং স্টপ ইত্যাদি পরীক্ষা করুন।
ফিল্টার অপ্টিমাইজেশন: ভুল সংকেতের সম্ভাবনা কমাতে এবং লাভের হার বাড়ানোর জন্য অতিরিক্ত ফিল্টার হিসাবে আরএসআই, কেডি ইত্যাদি অন্যান্য সূচক যুক্ত করার চেষ্টা করুন।
প্রবেশের মানদণ্ড অপ্টিমাইজেশন: স্ট্রিক্টলি এন্ট্রি টাইমিং নির্বাচন করুন, অপ্রয়োজনীয় এন্ট্রি এড়ানোর জন্য ট্রেন্ডের অবস্থা, অস্বাভাবিক ভলিউম ইত্যাদির মতো অন্যান্য বিবেচনার যোগ করুন।
মেশিন লার্নিং: এলএসটিএম, আরএনএন এবং অন্যান্য ডিপ লার্নিং মডেল তৈরির জন্য আরও historicalতিহাসিক তথ্য সংগ্রহ করুন, যাতে এআই চালিত সেরা প্রবেশ এবং প্রস্থান সময় সক্ষম হয়।
গতিশীল ঝুঁকি-প্রতিদান ব্যবস্থাপনা: ফিক্সড রেসিও স্টপ, নির্দিষ্ট মুনাফা স্তরে পৌঁছানোর পর লাভের লক্ষ্যমাত্রা বৃদ্ধি ইত্যাদি অন্তর্ভুক্ত করুন যাতে ঝুঁকি-পে-অফকে গতিশীলভাবে নিয়ন্ত্রণ করা যায়।
উপরোক্ত ক্ষেত্রগুলিতে অপ্টিমাইজেশনের মাধ্যমে, স্থিতিশীলতা, লাভজনকতা, ঝুঁকি সামঞ্জস্যের দক্ষতার মতো মূল পরিমাপগুলি ব্যাপকভাবে উন্নত করা যেতে পারে, কৌশলটিকে লাইভ ট্রেডিংয়ের জন্য উপযুক্ত একটি উত্পাদন-গ্রেড অ্যালগরিদমের রূপান্তর করতে পারে।
উপসংহারে,
/*backtest start: 2023-12-15 00:00:00 end: 2024-01-14 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //VERSION ================================================================================================================= //@version=5 // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // This strategy is intended to study. // It can also be used to signal a bot to open a deal by providing the Bot ID, email token and trading pair in the strategy settings screen. // As currently written, this strategy uses a Bollinger Bands for trend folling, you can use a EMA as a filter. //Autor Credsonb (M4TR1X_BR) //▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //STRATEGY ================================================================================================================ strategy(title = 'BT-Bollinger Bands - Trend Following', shorttitle = 'BBTF', overlay = true ) //▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ // CONFIG ================================================================================================================= // TIME INPUTS usefromDate = input.bool(defval = true, title = 'Start date', inline = '0', group = "Time Filters") initialDate = input(defval = timestamp('01 Jan 2022 00:00 UTC'), title = '', inline = "0",group = 'Time Filters',tooltip="This start date is in the time zone of the exchange ") usetoDate = input.bool(defval = true, title = 'End date', inline = '1', group = "Time Filters") finalDate = input(defval = timestamp('31 Dec 2029 23:59 UTC'), title = '', inline = "1",group = 'Time Filters',tooltip="This end date is in the time zone of the exchange") // TIME LOGIC inTradeWindow = true // ENABLE LONG SHORT OPTIONS string entrygroup ='Long/Short Options ===================================' checkboxLong = input.bool(defval=true, title="Enable Long Entrys",group=entrygroup) checkboxShort = input.bool(defval=true, title="Enable Short Entrys",group=entrygroup) // BOLLINGER BANDS INPUTS ================================================================================================== string bbgroup ='Bollinger Bands ======================================' bbLength = input.int(defval=20,title='BB Length', minval=1, step=5, group=bbgroup) bbStddev = input.float(defval=2, title='BB StdDev', minval=0.5, group=bbgroup) //BOLLINGER BANDS LOGIC [bbMiddle, bbUpper, bbLower] = ta.bb(close, bbLength, bbStddev) // MOVING AVERAGES INPUTS ================================================================================================ string magroup = 'Moving Average =======================================' useEma = input.bool(defval = true, title = 'Moving Average Filter',inline='', group= magroup,tooltip='This will enable or disable Exponential Moving Average Filter on Strategy') emaType=input.string (defval='Ema',title='Type',options=['Ema','Sma'],inline='', group= magroup) emaSource = input.source(defval=close,title=" Source",inline="", group= magroup) emaLength = input.int(defval=100,title="Length",minval=0,inline='', group= magroup) // MOVING AVERAGE LOGIC float ema = emaType=='Ema'? ta.ema(emaSource,emaLength): ta.sma(emaSource,emaLength) // BOT MESSAGES string msgroup='Alert Message For Bot ================================' messageEntry = input.string("", title="Strategy Entry Message",group=msgroup) messageExit =input.string("",title="Strategy Exit Message",group=msgroup) messageClose = input.string("", title="Strategy Close Message",group=msgroup) // ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ // POSITIONS ============================================================================================================= //VERIFY IF THE BUY FILTERS ARE ON OR OFF bool emaFilterBuy = useEma? (close > ema):(close >= ema) or (close <= ema) //LONG / SHORT POSITIONS LOGIC bool openLongPosition = (close[1] < bbUpper) and (close > bbUpper) and (emaFilterBuy) bool openShortPosition = (close[1] > bbLower) and (close < bbLower) and (emaFilterBuy) //bool closeLongPosition = (close > bbMiddle) //bool closeShortPosition= (close < bbLower) // CHEK OPEN POSITONS ===================================================================================================== // open signal when not already into a position bool validOpenLongPosition = openLongPosition and strategy.opentrades.size(strategy.opentrades - 1) <= 0 bool longIsActive = validOpenLongPosition or strategy.opentrades.size(strategy.opentrades - 1) > 0 bool validOpenShortPosition = openShortPosition and strategy.opentrades.size(strategy.opentrades - 1) <= 0 bool shortIsActive = validOpenShortPosition or strategy.opentrades.size(strategy.opentrades - 1) < 0 longEntryPoint = high if (openLongPosition) and (inTradeWindow) and (checkboxLong) strategy.entry(id = 'Long Entry', direction = strategy.long, stop = longEntryPoint, alert_message=messageEntry) if not (openLongPosition) strategy.cancel('Long Entry') //submit exit orders for trailing take profit price if (longIsActive) and (inTradeWindow) strategy.exit(id = 'Long Exit', stop=bbMiddle, alert_message=messageExit) //if (closeLongPosition) // strategy.close(id = 'Long Entry', alert_message=messageClose) shortEntryPoint = low if (openShortPosition) and (inTradeWindow) and (checkboxShort) strategy.entry(id = 'Short Entry', direction = strategy.short, stop = shortEntryPoint, alert_message=messageEntry) if not(openShortPosition) strategy.cancel('Short Entry') if (shortIsActive) strategy.exit(id = 'Short Exit', stop = bbMiddle, alert_message=messageExit) //if (closeShortPosition) //strategy.close(id = 'Short Close', alert_message=messageClose) // ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ // PLOTS =============================================================================================================== // TRADE WINDOW ======================================================================================================== bgcolor(color = inTradeWindow ? color.new(#089981,90):na, title = 'Time Window') // EMA/SMA var emafilterColor = color.new(color.white, 0) plot(series=useEma? ema:na, title = 'EMA Filter', color = emafilterColor, linewidth = 2, style = plot.style_line) // BOLLINGER BANDS plot(series=bbUpper, title = "Upper Band", color = color.aqua)//, display = display.none) plot(series=bbMiddle, title = "MA Band", color = color.red)//, display = display.none) plot(series=bbLower, title = "Lower Band", color = color.aqua)//, display = display.none) // PAINT BARS COLORS bool bulls = (close[1] < bbUpper[1]) and (close > bbUpper) bool bears = (close[1] > bbLower [1]) and (close < bbLower) neutral_color = color.new(color.black, 100) barcolors = bulls ? color.green : bears ? color.red : neutral_color barcolor(barcolors) // ======================================================================================================================