এটি LazyBear
এই কৌশলটির মূল সূচক হ'ল লেজি বিয়ারের গতি সংকোচন সূচক। এই সূচকটি নির্ধারণ করে যে বোলিংজার ব্যান্ডগুলি কেল্টনার চ্যানেলগুলি দ্বারা সংকুচিত হচ্ছে কিনা। যখন সংকোচন ঘটে তখন এটি প্রতিনিধিত্ব করে যে বাজারটি একটি সম্ভাব্য প্রাদুর্ভাবের পয়েন্টে প্রবেশ করেছে। গতির সূচকের দিকটি একত্রিত করে, যখন সংকোচনটি বাজারের প্রাদুর্ভাবকে ধরতে মুক্তি পায় তখন ট্রেড করা যেতে পারে।
বিশেষত, কৌশলটি প্রথমে 21 পিরিয়ডের বোলিংজার ব্যান্ডগুলি গণনা করে, যার প্রস্থ মূল্যের 2 স্ট্যান্ডার্ড বিচ্যুতি। একই সাথে, এটি 20 পিরিয়ডের কেল্টনার চ্যানেলগুলি গণনা করে, যার প্রস্থ মূল্যের প্রস্থের 1.5 গুণ। যখন বোলিংজার ব্যান্ডগুলি কেল্টনার চ্যানেলগুলি দ্বারা
প্রস্থানগুলির জন্য, যখন গতির সূচকটির রঙ ধূসর হয়ে যায়, তখন এটি বোঝায় যে সংকোচনের অবস্থা শেষ হয়েছে এবং প্রবণতা বিপরীত হতে পারে।
এই সূচকগুলির মধ্যে সামগ্রিক সম্পর্ক বিচার করে, ট্রেডিং সিদ্ধান্তের নির্ভুলতা উন্নত করা যায় এবং ভুল ট্রেডিংয়ের সম্ভাবনা হ্রাস করা যায়।
গতি সংকোচনের কৌশলটি মূল পয়েন্টগুলি ক্যাপচার করতে পারে যেখানে বাজারটি বিপর্যস্ত হওয়ার সম্ভাবনা রয়েছে। এই পয়েন্টগুলি প্রায়শই inflection পয়েন্ট যেখানে বাজার গুরুত্বপূর্ণ দিকনির্দেশমূলক রায় দেয়। যদি সঠিকভাবে বিচার করা হয় তবে পরবর্তী বাজার আন্দোলন তুলনামূলকভাবে দীর্ঘ হবে, তাই কৌশলটির সম্ভাব্য মুনাফা স্থানটি দুর্দান্ত।
এলোমেলো ব্রেকআউট ট্রেডিংয়ের তুলনায়, এই কৌশল দ্বারা নির্বাচিত এন্ট্রি পয়েন্টটি বোলিংজার ব্যান্ড এবং কেল্টনার চ্যানেলগুলির মধ্যে সংকোচন পয়েন্টে রয়েছে। সমন্বিত সূচক বিচারের মাধ্যমে, ট্রেডিং সাফল্যের হার খুব বেশি।
বোলিংজার ব্যান্ড এবং কেল্টনার চ্যানেলগুলির চক্রের পরামিতি এবং ব্যান্ডউইথ পরামিতিগুলি ট্রেডিং ফলাফলের উপর ব্যাপক প্রভাব ফেলে। যদি পরামিতিগুলি অনুপযুক্তভাবে সেট করা হয় তবে ভুল বিচার ঘটতে পারে। এর জন্য প্রচুর ব্যাকটেস্টিংয়ের মাধ্যমে সর্বোত্তম পরামিতিগুলি খুঁজে পাওয়া প্রয়োজন।
এই কৌশল দ্বারা নির্বাচিত পয়েন্টটি ভেঙে যাওয়ার পরে দামটি পুনরায় চালু হওয়ার ঝুঁকি সর্বদা থাকে, যার ফলে ক্ষতি হয়। ক্ষতি নিয়ন্ত্রণের জন্য এটি কঠোরভাবে বন্ধ করা দরকার।
যখন সংকোচনের অবস্থা শেষ হয়, তখন এই কৌশলটি সমস্ত অবস্থান বন্ধ করে দেবে। তবে কখনও কখনও দামের প্রবণতা এখনও অব্যাহত থাকতে পারে, যা অকাল প্রস্থান করার ঝুঁকি তৈরি করে। প্রস্থান যুক্তিটি অনুকূলিত করা দরকার।
আরও ব্যাকটেস্টিং ডেটা ট্রায়ালের মাধ্যমে, কৌশল কর্মক্ষমতা উন্নত করতে আরও ভাল চক্র এবং ব্যান্ডউইথ পরামিতি সেটিং পাওয়া যাবে।
যখন দাম উল্টে যায় তখন দ্রুত ক্ষতি কমাতে চলমান বা দোলানো স্টপ সেট করুন।
যখন কৌশলটি পজিশন থেকে বেরিয়ে আসে, ট্রেন্ড অব্যাহত থাকলে বাজারে পুনরায় প্রবেশের জন্য নির্দিষ্ট পুনরায় প্রবেশের শর্তগুলি সেট করা যেতে পারে।
সিদ্ধান্তের নির্ভুলতা উন্নত করার জন্য নির্দেশক সমন্বয়ের একটি যৌগিক কৌশল প্রতিষ্ঠার জন্য বিভিন্ন ধরণের আরও সূচক অন্তর্ভুক্ত করার চেষ্টা করুন, যেমন অন্যান্য অস্থিরতা সূচক, ভলিউম সূচক ইত্যাদি।
কৌশলটি বোলিংজার ব্যান্ড, কেল্টনার চ্যানেল এবং গতির সূচকগুলিকে একীভূত করে। এই সূচকগুলির মধ্যে সম্পর্কের বিচার করে, এটি উচ্চ সাফল্যের হার ব্রেকআউট পয়েন্টগুলিতে প্রবেশ করে। কৌশলটির কর্মক্ষমতা আরও উন্নত করতে প্যারামিটার অপ্টিমাইজেশন, স্টপ লস কৌশল, পুনরায় প্রবেশের শর্ত এবং যৌগিক সূচক সংহতকরণের মতো অনেক দিক থেকে অপ্টিমাইজেশনের স্থান রয়েছে।
/*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"}] */ //@version=4 //All credits to LazyBear. All I did was turn it into a strategy! strategy(title = "SQZMOM STRAT", overlay=false) // --- GENERAL INPUTS --- FromMonth = input(defval = 4, title = "From Month", minval = 1, maxval = 12) FromYear = input(defval = 2020, title = "From Year", minval = 2012) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToYear = input(defval = 9999, title = "To Year", minval = 2017) FromDay = 1 ToDay = 1 start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => true get_round(value, precision) => round(value * (pow(10, precision))) / pow(10, precision) trade_leverage = input(1, title = "Trade - Leverage", step = 0.25) trade_risk = input(100, title = "Trade - Risk Percent", type = input.float, step = 0.1, minval = 0.1, maxval = 100) tradeType = input("LONG", title="What trades should be taken : ", options=["LONG", "SHORT", "BOTH"]) // --- SQZMOM CODE length = input(21, title="BB Length") mult = input(2.0,title="BB MultFactor") lengthKC=input(20, title="KC Length") multKC = input(1.5, title="KC MultFactor") useTrueRange = input(true, title="Use TrueRange (KC)", type=input.bool) // Calculate BB source = close basis = sma(source, length) dev = multKC * stdev(source, length) upperBB = basis + dev lowerBB = basis - dev // Calculate KC ma = sma(source, 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(source - avg(avg(highest(high, lengthKC), lowest(low, lengthKC)),sma(close,lengthKC)), lengthKC,0) bcolor = color.gray if (val > 0 and val > nz(val[1])) bcolor := color.green if (val < 0 and val < nz(val[1])) bcolor := color.red scolor = noSqz ? color.blue : sqzOn ? color.black : color.gray plot(val, color=bcolor, style=plot.style_histogram, linewidth=4) plot(0, color=scolor, style=plot.style_cross, linewidth=2) // --- VWMA CODE --- useVWMA = input(false, title = "Use VWMA to selectively long/short?", type = input.bool) lengthVWMA=input(42, title = "VWMA Length", step = 1, minval = 1) useCV=input(false, type=input.bool, title="Use Cumulative Volume for VWMA?") nbfs = useCV ? cum(volume) : sum(volume, lengthVWMA) medianSrc=close calc_evwma(price, lengthVWMA, nb_floating_shares) => data = (nz(close[1]) * (nb_floating_shares - volume)/nb_floating_shares) + (volume*price/nb_floating_shares) m=calc_evwma(medianSrc, lengthVWMA, nbfs) // ---STRATEGY--- if ((tradeType == "LONG" or tradeType == "BOTH") and (m>0 or useVWMA == false)) longCondition = (val > 0 and noSqz == 0 and sqzOn == 0 and sqzOn[1] == 1) if (longCondition) contracts = get_round((strategy.equity * trade_leverage / close) * (trade_risk / 100), 4) strategy.entry("LONG", strategy.long, qty = contracts, when = window()) if((tradeType == "SHORT" or tradeType == "BOTH") and (m<0 or useVWMA == false)) shortCondition = (val < 0 and noSqz == 0 and sqzOn == 0 and sqzOn[1] == 1) if (shortCondition) contracts = get_round((strategy.equity * trade_leverage / close) * (trade_risk / 100), 4) strategy.entry("SHORT", strategy.short, qty = contracts, when = window()) if (bcolor == color.gray) strategy.close("LONG") strategy.close("SHORT")