এই কৌশলটি লেজিবিয়ারের স্কিজ মম্পটম সূচকের উপর ভিত্তি করে, চ্যানেল সংকোচন এবং সম্প্রসারণ থেকে দামের ব্রেকআউটগুলি সনাক্ত করতে বোলিংজার ব্যান্ড এবং কেল্টনার চ্যানেলগুলিকে একত্রিত করে, দামের সম্ভাব্য প্রবণতা দিক নির্ধারণ করতে এবং প্রবেশের দিক নির্ধারণের জন্য একটি প্রবণতা অনুসরণ পদ্ধতি গ্রহণ করে। এই কৌশলটির সুবিধা হ'ল সম্ভাব্য প্রবণতা সনাক্ত করার জন্য মম্পটম সূচকের ক্ষমতা সম্পূর্ণরূপে ব্যবহার করা এবং সংকেতের গুণমান নিয়ন্ত্রণের জন্য একাধিক শর্ত ফিল্টার সেট করা যা অনিশ্চিত সংকেতগুলি কার্যকরভাবে ফিল্টার করতে পারে এবং ব্যাপ্তি বাজারের সময় অতিরিক্ত ট্রেডিং এড়াতে পারে।
বোলিংজার ব্যান্ডের মাঝারি ব্যান্ড, উপরের ব্যান্ড এবং নীচের ব্যান্ড গণনা করুন। মাঝারি ব্যান্ডটি বন্ধের মূল্যের এন-দিনের সহজ চলমান গড়, উপরের এবং নীচের ব্যান্ডগুলি হল মাঝারি ব্যান্ড প্লাস/বিয়োগ এম গুণ বন্ধের মূল্যের এন-দিনের মান বিচ্যুতি।
কেল্টনার চ্যানেলের মাঝারি রেখা, উপরের রেখা এবং নীচের রেখা গণনা করুন। মধ্যরেখাটি বন্ধ মূল্যের এন-দিনের সহজ চলমান গড়, উপরের এবং নীচের রেখাগুলি প্রকৃত পরিসরের এন-দিনের সহজ চলমান গড়ের মধ্যরেখা প্লাস / বিয়োগ এম গুণ।
বোলিংজার ব্যান্ড এবং কেল্টনার চ্যানেলগুলির উপরের বা নীচের ব্যান্ডের মাধ্যমে দামটি সংকোচন এবং সম্প্রসারণের নিদর্শন তৈরি করতে বিরতি দেয় কিনা তা নির্ধারণ করুন। কমপ্রেসেশনটি যখন দামটি নিম্ন ব্যান্ডের মাধ্যমে ভেঙে যায় তখন বিকশিত হয়, যখন দামটি উপরের ব্যান্ডের মাধ্যমে ভেঙে যায়।
গতির সূচক হিসাবে লিনিয়ার রিগ্রেশন কার্ভের মান গণনা করুন। আপক্রসিং 0 কেনার সংকেত এবং ডাউনক্রসিং 0 বিক্রয় সংকেত।
চূড়ান্ত ট্রেডিং সংকেত নির্ধারণের জন্য সংকোচন / সম্প্রসারণের নিদর্শন, গতির দিক, গড় ফিল্টারিং এবং অন্যান্য শর্তগুলি একত্রিত করুন। খারাপ ট্রেডগুলি এড়াতে সমস্ত শর্ত পূরণ হলেই সংকেতগুলি সক্রিয় হয়।
কোয়ালিটি কম্প্রেশন এবং সম্প্রসারণের নিদর্শন চিহ্নিত করতে বোলিংজার ব্যান্ড এবং কেল্টনার চ্যানেলের দ্বৈত ফিল্টারিং ব্যবহার করে।
গতির সূচকটি চ্যানেল সূচকগুলিকে পরিপূরক করে মূল্য প্রবণতা বিপরীতমুখীতাকে সময়মতো ধরতে পারে।
মুনাফা অর্জনের সুযোগ বাড়ানোর জন্য তাড়াতাড়ি প্রবেশের অনুমতি দিন।
Adopt multiple condition judgment to avoid over-trading during ranging markets. একাধিক শর্তাধীন সিদ্ধান্ত গ্রহণ করুন যাতে বাজারের সময় অতিরিক্ত ট্রেডিং এড়ানো যায়।
প্রযুক্তিগত সূচক পরামিতিগুলি বিভিন্ন পণ্য এবং পরামিতি সংমিশ্রণের সাথে খাপ খাইয়ে নেওয়া যায়।
ব্যাকটেস্ট টাইম ফ্রেম নির্দিষ্ট সময়ের মধ্যে অপ্টিমাইজ করার জন্য সেট করা যেতে পারে।
ট্রেন্ড অনুসরণকারী কৌশলগুলি ট্রেন্ড বিপরীত হলে ক্ষতির ঝুঁকিতে থাকে।
অনুপযুক্ত প্যারামিটার সেটিংগুলি অতিরিক্ত ট্রেডিং বা খারাপ সংকেত মানের দিকে পরিচালিত করতে পারে।
ঐতিহাসিক তথ্যের ওপর নির্ভর করে ভবিষ্যতে স্থিতিশীল আয় নিশ্চিত করা সম্ভব নয়।
ব্ল্যাক সোয়ান ইভেন্টের কারণে বাজারের অস্থিরতা এবং তীব্র মূল্য পরিবর্তনের সাথে মোকাবিলা করতে অক্ষম।
ভুল ব্যাকটেস্ট সময় উইন্ডো সেটিংস ওভার ফিটিং হতে পারে।
সেরা সমন্বয় খুঁজে পেতে বলিংজার ব্যান্ড এবং কেল্টনার চ্যানেলের পরামিতিগুলি অনুকূল করুন।
ট্রেড প্রতি সর্বোচ্চ ক্ষতি নিয়ন্ত্রণ করার জন্য ট্রেলিং স্টপ লস যোগ করে পরীক্ষা করুন।
নির্দিষ্ট পণ্য এবং সময়কাল/প্যারামিটার সংমিশ্রণের জন্য আরও অপ্টিমাইজেশান করার চেষ্টা করুন।
প্রবণতা বিপরীততা নির্ধারণের জন্য মেশিন লার্নিং মডেলগুলিকে একীভূত করা।
বিভিন্ন এন্ট্রি সিকোয়েন্সিং এবং পজিশন সাইজিং কৌশল পরীক্ষা করুন।
কিভাবে ট্রেন্ড রিভার্স সিগন্যাল চিহ্নিত করা যায় এবং সময়মতো বেরিয়ে আসা যায় তা গবেষণা করুন।
This strategy integrates multiple technical indicators to judge price trend direction and follow the trend, having relatively strong adaptability. By customizing parameters and using multiple condition filters, it can effectively control trading frequency and improve signal quality. But reversal trades and black swan events should still be watched out for. Further exploring trend reversal signals and risk control mechanisms can be done to make the strategy more robust. This strategy integrates multiple technical indicators to judge price trend direction and follow the trend, having relatively strong adaptability. By customizing parameters and using multiple condition filters, it can effectively control trading frequency and improve signal quality. But reversal trades and black swan events should still be watched out for. Further exploring trend reversal signals and risk control mechanisms can be done to make the strategy more robust. এই কৌশলটি ট্রেডিং ফ্রিকোয়েন্সি নিয়ন্ত্রণ করতে এবং সিগন্যালের গুণমান উন্নত করার জন্য একাধিক প্রযুক্তিগত সূচককে একত্রিত করে।
/*backtest start: 2022-11-06 00:00:00 end: 2023-11-12 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 //Strategy based on LazyBear Squeeze Momentum Indicator //I added some custom feature and filters // // @author LazyBear // List of all my indicators: // https://docs.google.com/document/d/15AGCufJZ8CIUvwFJ9W-IKns88gkWOKBCvByMEvm5MLo/edit?usp=sharing // v2 - fixed a typo, where BB multipler was always stuck at 1.5. [Thanks @ucsgears] // strategy(shorttitle = "SQZMOM_LB", title="Strategy for Squeeze Momentum Indicator [LazyBear]", overlay=false, calc_on_every_tick=true, pyramiding=0,default_qty_type=strategy.percent_of_equity,default_qty_value=100,currency=currency.USD) length = input(14, title="BB Length") mult = input(2.0,title="BB MultFactor") lengthKC=input(16, title="KC Length") multKC = input(1.5, title="KC MultFactor") useTrueRange = input(true, title="Use TrueRange (KC)", type=bool) //FILTERS useExtremeOrders = input(false, title="Early entry on momentum change", type=bool) useMomAverage = input(false, title="Filter for Momenutum value", type=bool) MomentumMin = input(20, title="Min for momentum") // Calculate BB src = close basis = sma(src, length) dev = mult * stdev(src, length) upperBB = basis + dev lowerBB = basis - dev // Calculate KC ma = sma(src, lengthKC) range = useTrueRange ? tr : (high - low) rangema = sma(range, lengthKC) upperKC = ma + rangema * multKC lowerKC = ma - rangema * multKC sqzOn = (lowerBB > lowerKC) and (upperBB < upperKC) sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC) noSqz = (sqzOn == false) and (sqzOff == false) val = linreg(src - avg(avg(highest(high, lengthKC), lowest(low, lengthKC)),sma(close,lengthKC)), lengthKC,0) bcolor = iff( val > 0, iff( val > nz(val[1]), lime, green), iff( val < nz(val[1]), red, maroon)) scolor = noSqz ? blue : sqzOn ? black : aqua plot(val, color=bcolor, style=histogram, linewidth=4) plot(0, color=scolor, style=cross, linewidth=2) //LOGIC //momentum filter filterMom=useMomAverage?abs(val)>(MomentumMin/100000)?true:false:true //standard condition longCondition = scolor[1]!=aqua and scolor==aqua and bcolor==lime and filterMom exitLongCondition = bcolor==green and not useExtremeOrders shortCondition = scolor[1]!=aqua and scolor==aqua and bcolor==red and filterMom exitShortCondition = bcolor==maroon and not useExtremeOrders //early entry extremeLong= useExtremeOrders and scolor==aqua and bcolor==maroon and bcolor[1]!=bcolor[0] and filterMom exitExtLong = scolor==black or bcolor==red extremeShort = useExtremeOrders and scolor==aqua and bcolor==green and bcolor[1]!=bcolor[0] and filterMom exitExtShort = scolor==black or bcolor==lime //STRATEGY strategy.entry("SQ_Long", strategy.long, when = longCondition) strategy.close("SQ_Long",when = exitLongCondition ) strategy.entry("SQ_Long_Ext", strategy.long, when = extremeLong) strategy.close("SQ_Long_Ext",when = exitExtLong) //strategy.exit("exit Long", "SQ_Long", when = exitLongCondition) strategy.entry("SQ_Short", strategy.short, when = shortCondition) strategy.close("SQ_Short",when = exitShortCondition) strategy.entry("SQ_Short_Ext", strategy.short, when = extremeShort) strategy.close("SQ_Short_Ext",when = exitExtShort) //strategy.exit("exit Short", "SQ_Short", when = exitShortCondition) // // === Backtesting Dates === thanks to Trost // testPeriodSwitch = input(true, "Custom Backtesting Dates") // testStartYear = input(2018, "Backtest Start Year") // testStartMonth = input(1, "Backtest Start Month") // testStartDay = input(1, "Backtest Start Day") // testStartHour = input(0, "Backtest Start Hour") // testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0) // testStopYear = input(2018, "Backtest Stop Year") // testStopMonth = input(12, "Backtest Stop Month") // testStopDay = input(14, "Backtest Stop Day") // testStopHour = input(23, "Backtest Stop Hour") // testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0) // testPeriod() => // time >= testPeriodStart and time <= testPeriodStop ? true : false // isPeriod = testPeriodSwitch == true ? testPeriod() : true // // === /END // if not isPeriod // strategy.cancel_all() // strategy.close_all()