উত্স - পূর্ববর্তী উত্সের সাথে মিলিত হয়, তারপরে তার পরিবর্তনের পরম মান নেয় এবং উত্সের সাথে এটি স্বাভাবিক করে।
গতিশীল দৈর্ঘ্য গণনাঃ বাজারের অবস্থার উপর ভিত্তি করে সূচক দৈর্ঘ্যের পরামিতিগুলি সামঞ্জস্য করার জন্য ব্ল্যাকক্যাট 1402 এর গতিশীল দৈর্ঘ্য গণনা পদ্ধতি ব্যবহার করে।
যৌগিক বিশ্লেষণঃ একটি যৌগিক সূচক তৈরি করতে VAWSI, ট্রেন্ডের ধারাবাহিকতা এবং ATR থেকে পাঠ্যগুলি একত্রিত করে। নিম্ন চূড়ান্ত মানগুলি আসন্ন বিপরীত নির্দেশ করে, যখন উচ্চতর মানগুলি অস্থির বা অস্থির বাজারগুলিকে নির্দেশ করে।
ডায়নামিক স্টপ-লস/টেক-প্রফিটঃ কম্পোজিট ইন্ডিকেটর এবং বর্তমান ট্রেন্ডের দিকনির্দেশের ভিত্তিতে ডায়নামিক স্টপ-লস এবং টেক-প্রফিট স্তর গণনা করে।
ট্রেড সিগন্যালঃ ক্রসওভার নিশ্চিত করে এবং যখন মূল্য গণনা করা থ্রেশহোল্ড লাইনটি সম্পূর্ণরূপে অতিক্রম করে তখন ট্রেড সিগন্যাল তৈরি করে।
বহুমাত্রিক বিশ্লেষণঃ একাধিক সূচককে একত্রিত করে, কৌশলটি বিভিন্ন কোণ থেকে বাজার বিশ্লেষণ করতে পারে, সিদ্ধান্তের নির্ভুলতা উন্নত করে।
অভিযোজনযোগ্যতাঃ গতিশীল দৈর্ঘ্যের গণনা কৌশলটিকে বিভিন্ন বাজারের অবস্থার সাথে মানিয়ে নিতে দেয়, এর নমনীয়তা বাড়ায়।
ঝুঁকি ব্যবস্থাপনাঃ গতিশীল স্টপ-লস এবং লাভ গ্রহণের সেটিংস ঝুঁকিকে আরও ভালভাবে নিয়ন্ত্রণ করতে এবং বাজারের পরিবর্তনের সাথে মানিয়ে নিতে সহায়তা করে।
মূল সূচকঃ VAWSI এবং ট্রেন্ড পেরসিস্ট্যান্স সূচকগুলি অনন্য বাজার অন্তর্দৃষ্টি প্রদান করে যা ঐতিহ্যগত সূচকগুলির দ্বারা উপেক্ষা করা সংকেতগুলি ক্যাপচার করতে পারে।
অ্যান্টি-রিপেইন্টিংঃ বারস্টেট.আইস কনফার্মেড ব্যবহার করে সিগন্যালগুলি পুনরায় রঙ না করে তা নিশ্চিত করে, ব্যাকটেস্টিংয়ের নির্ভুলতা উন্নত করে।
কাস্টমাইজযোগ্যতাঃ একাধিক সামঞ্জস্যযোগ্য পরামিতি কৌশলকে বিভিন্ন ট্রেডিং যন্ত্র এবং সময়সীমার জন্য অভিযোজিত করার অনুমতি দেয়।
অতিরিক্ত অপ্টিমাইজেশানঃ প্রচুর সংখ্যক পরামিতি অতিরিক্ত অপ্টিমাইজেশান হতে পারে, যা লাইভ ট্রেডিংয়ে সম্ভাব্যভাবে খারাপ পারফরম্যান্স দেয়।
বাজার অভিযোজনযোগ্যতাঃ নির্দিষ্ট বাজারে ভাল পারফরম্যান্স থাকা সত্ত্বেও, এটি সমস্ত বাজারের অবস্থার জন্য উপযুক্ত নাও হতে পারে, বিশেষ করে কম অস্থিরতার বাজারে।
জটিলতাঃ কৌশলটির জটিলতা বোঝা এবং বজায় রাখা কঠিন করে তুলতে পারে, যা অপারেশনাল ত্রুটির ঝুঁকি বাড়ায়।
গণনা নিবিড়ঃ একাধিক কাস্টম সূচক এবং গতিশীল গণনার ফলে উচ্চ গণনা লোড হতে পারে, যা কার্যকরকরণের গতিকে প্রভাবিত করে।
ঐতিহাসিক তথ্যের উপর নির্ভরশীলতাঃ কৌশলটি গণনার জন্য প্রচুর পরিমাণে ঐতিহাসিক তথ্য ব্যবহার করে, যা কিছু পরিস্থিতিতে বিলম্বের কারণ হতে পারে।
পরামিতি অপ্টিমাইজেশনঃ বিভিন্ন বাজারের অবস্থার অধীনে কৌশল কর্মক্ষমতা উন্নত করতে বিভিন্ন ওজন এবং দৈর্ঘ্য পরামিতি অপ্টিমাইজ করার জন্য মেশিন লার্নিং অ্যালগরিদম ব্যবহার করুন।
মার্কেট স্টেট রিকগনিশনঃ বিভিন্ন মার্কেট পরিবেশে কৌশলগত পরামিতিগুলি স্বয়ংক্রিয়ভাবে সামঞ্জস্য করার জন্য একটি মার্কেট স্টেট রিকগনিশন মডিউল যুক্ত করুন।
সিগন্যাল ফিল্টারিংঃ মিথ্যা সংকেত হ্রাস করার জন্য অতিরিক্ত ফিল্টারিং প্রক্রিয়া যেমন প্রবণতা শক্তি থ্রেশহোল্ডগুলি প্রবর্তন করুন।
ভলিউম বিশ্লেষণঃ ভলিউম বিশ্লেষণ গভীর করা, সম্ভাব্যভাবে সংকেত নির্ভরযোগ্যতা উন্নত করার জন্য ভলিউম প্যাটার্ন স্বীকৃতি প্রবর্তন।
মাল্টি-টাইমফ্রেম বিশ্লেষণঃ ট্রেডিং সিদ্ধান্তের দৃঢ়তা উন্নত করতে একাধিক টাইমফ্রেম থেকে সংকেত একীভূত করুন।
ঝুঁকি ব্যবস্থাপনা অপ্টিমাইজেশানঃ আরও পরিশীলিত ঝুঁকি ব্যবস্থাপনা কৌশল বাস্তবায়ন করুন, যেমন গতিশীল অবস্থান আকার এবং মাল্টি-লেভেল স্টপ-লস।
কম্পিউটেশনাল দক্ষতাঃ গণনার দক্ষতা উন্নত করতে কোডটি অনুকূল করুন, বিশেষত যখন প্রচুর পরিমাণে historicalতিহাসিক ডেটা প্রক্রিয়াজাত করা হয়।
ভিএডাব্লুএসআই এবং ট্রেন্ডের ধারাবাহিকতা বিপরীতমুখী কৌশল একটি জটিল এবং বিস্তৃত ট্রেডিং সিস্টেম যা একাধিক উদ্ভাবনী সূচক এবং গতিশীল পরামিতি সমন্বয়কে একত্রিত করে। এর শক্তিগুলি বহুমাত্রিক বাজার বিশ্লেষণ এবং অভিযোজনযোগ্যতায় রয়েছে, যা এটিকে বিভিন্ন বাজারের অবস্থার অধীনে সম্ভাব্য বিপরীতমুখী সুযোগগুলি সন্ধান করতে দেয়। তবে কৌশলটির জটিলতা অতিরিক্ত অপ্টিমাইজেশন এবং অভিযোজনযোগ্যতার ক্ষেত্রেও চ্যালেঞ্জ নিয়ে আসে।
বিশেষত পরামিতি সমন্বয়, বাজার অবস্থা স্বীকৃতি এবং ঝুঁকি পরিচালনার ক্ষেত্রে আরও অপ্টিমাইজেশনের মাধ্যমে, এই কৌশলটির একটি শক্তিশালী ট্রেডিং সরঞ্জাম হওয়ার সম্ভাবনা রয়েছে। তবে ব্যবহারকারীদের লক্ষ্য করা উচিত যে কোনও কৌশলই নিখুঁত নয় এবং ক্রমাগত পর্যবেক্ষণ এবং সমন্বয় প্রয়োজনীয়। ব্যবহারিক প্রয়োগে, ডেমো অ্যাকাউন্টে পুঙ্খানুপুঙ্খ পরীক্ষা পরিচালনা করার পরামর্শ দেওয়া হয় এবং এই কৌশলটি অন্যান্য বিশ্লেষণাত্মক সরঞ্জাম এবং বাজার জ্ঞানের সাথে একত্রিত করে ট্রেডিং সিদ্ধান্ত নিতে।
/*backtest start: 2024-05-21 00:00:00 end: 2024-06-20 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("VAWSI and Trend Persistance Reversal", overlay=true, max_bars_back = 4999, process_orders_on_close = true) //INPUTS sltp = input.float(title = "Minimum SL/TP", defval = 5.0) rsi_weight = input.float(title = "Wawsi weight", defval = 100.0) half_weight= input.float(title = "Trend Persistence Weight", defval = 79.0) atr_weight = input.float(title = "ATR Weight", defval = 20.0) com_mult = input.float(title = "Combination Mult", defval = 1, step = .001) smoothing = input.int(title = "Trend Persistence smooth length", defval = 3) CycPart = input.float(1.1, step = .001, title = "Length Cycle Decimal") src = close hclose = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, src) //BlackCat1402's Dynamic Length Calculation EhlersHoDyDC(Price, CycPart) => // Vars: Smooth = 0.00 Detrender = 0.00 I1 = 0.00 Q1 = 0.00 jI = 0.00 jQ = 0.00 I2 = 0.00 Q2 = 0.00 Re = 0.00 Im = 0.00 Period = 0.00 SmoothPeriod = 0.00 pi = 2 * math.asin(1) DomCycle = 0.0 //Hilbert Transform Smooth := bar_index > 5 ? (4 * Price + 3 * nz(Price[1]) + 2 * nz(Price[2]) + nz(Price[3])) / 10 : Smooth Detrender := bar_index > 5 ? (.0962 * Smooth + .5769 * nz(Smooth[2]) - .5769 * nz(Smooth[4]) - .0962 * nz(Smooth[6])) * (.075 * nz(Period[1]) + .54) : Detrender //Compute InPhase and Quadrature components Q1 := bar_index > 5 ? (.0962 * Detrender + .5769 * nz(Detrender[2]) - .5769 * nz(Detrender[4]) - .0962 * nz(Detrender[6])) * (.075 * nz(Period[1]) + .54) : Q1 I1 := bar_index > 5 ? nz(Detrender[3]) : I1 //Advance the phase of I1 and Q1 by 90 degrees jI := (.0962 * I1 + .5769 * nz(I1[2]) - .5769 * nz(I1[4]) - .0962 * nz(I1[6])) * (.075 * nz(Period[1]) + .54) jQ := (.0962 * Q1 + .5769 * nz(Q1[2]) - .5769 * nz(Q1[4]) - .0962 * nz(Q1[6])) * (.075 * nz(Period[1]) + .54) //Phasor addition for 3 bar averaging I2 := I1 - jQ Q2 := Q1 + jI //Smooth the I and Q components before applying the discriminator I2 := .2 * I2 + .8 * nz(I2[1]) Q2 := .2 * Q2 + .8 * nz(Q2[1]) //Homodyne Discriminator Re := I2 * nz(I2[1]) + Q2 * nz(Q2[1]) Im := I2 * nz(Q2[1]) - Q2 * nz(I2[1]) Re := .2 * Re + .8 * nz(Re[1]) Im := .2 * Im + .8 * nz(Im[1]) Period := Im != 0 and Re != 0 ? 2 * pi / math.atan(Im / Re) : Period Period := Period > 1.5 * nz(Period[1]) ? 1.5 * nz(Period[1]) : Period Period := Period < .67 * nz(Period[1]) ? .67 * nz(Period[1]) : Period //Limit Period to be within the bounds of 6 bar and 50 bar cycles Period := Period < 6 ? 6 : Period Period := Period > 50 ? 50 : Period Period := .2 * Period + .8 * nz(Period[1]) SmoothPeriod := .33 * Period + .67 * nz(SmoothPeriod[1]) //it can add filter to Period here DomCycle := math.ceil(CycPart * SmoothPeriod) > 34 ? 34 : math.ceil(CycPart * SmoothPeriod) < 1 ? 1 : math.ceil(CycPart * SmoothPeriod) DomCycle wma(src, length) => wma = 0.0 sum = 0.0 norm = length * (length + 1) / 2 for i = 0 to length - 1 sum := sum + src[i] * (length - i) wma := sum / norm length = math.round(math.ceil(EhlersHoDyDC(hclose,CycPart))) // Traditional Function initialization highest_custom(src, length) => x = src for i = 0 to math.min(length, 4999) if src[i] > x x := src[i] x lowest_custom(src, length) => x = src for i = 0 to math.min(length, 4999) if src[i] < x x := src[i] x rma(src, len) => sum = 0.0 for i = 0 to len - 1 math.min(1, len) sum += src[i] rma = sum / len rma := nz(rma[1]) * (len - 1) / len + src / len sma(src, length) => math.sum(src, length) / length hln(src, length) => TR = math.max(math.abs(src - src[1]), high - low) TR := src / math.abs(ta.change(rma(TR, length))) TR := (1 / TR) * 100 vawma(src, length) => atr = ta.atr(1) aavg = sma(atr, length) vavg = sma(volume, length) weighted_sum = 0.0 sum_weights = 0.0 weighted = 0.0 for i = 0 to length weight = ((volume[i] / vavg + (atr[i]) / aavg) / 2) weighted_sum += src[i] * weight sum_weights += weight a = (weighted_sum / sum_weights) vawsi(src, len) => rmaUp = vawma(math.max(ta.change(src), 0), len) rmaDown = vawma(-math.min(ta.change(src), 0), len) rsi = 100 - (100 / (1 + rmaUp / rmaDown)) trendPersistence(src, length, smoothing) => trendu = math.abs(src - highest_custom(src, length)) trendd = math.abs(src - lowest_custom(src, length)) trendu := wma(trendu, smoothing) trendd := wma(trendd, smoothing) trendu := ta.change(ta.cum(trendu)) trendd := ta.change(ta.cum(trendd)) trend = wma(math.max(trendu, trendd), smoothing) rmaUp = rma(math.max(ta.change(trend), 0), length) rmaDown = rma(-math.min(ta.change(trend), 0), length) rsi = 100 - (100 / (1 + rmaUp / rmaDown)) //Strategy Calculations sl = ((100 - sltp) / 100) * close tp = ((100 + sltp) / 100) * close var bool crossup = na var bool crossdown = na var float dir = na var float BearGuy = 0 BullGuy = ta.barssince(crossup or crossdown) if na(BullGuy) BearGuy += 1 else BearGuy := math.min(BullGuy, 4999) rsiw = rsi_weight / 100 cew = half_weight / 100 atrw = atr_weight / 100 atr = hln(hclose, length) * atrw ce = 1 / trendPersistence(hclose, length, smoothing) com = 1 / math.max(math.abs(vawsi(hclose, length) - 50) * 2, 20) comfin = (((com * rsiw) + (ce * cew) - atr)) * com_mult lower = highest_custom(math.min((math.max(highest_custom(src, BearGuy) * (1 - comfin), sl)), src[1]), BearGuy) upper = lowest_custom(math.max((math.min(lowest_custom(src, BearGuy) * (1 + comfin), tp)), src[1]), BearGuy) var float thresh = na if na(thresh) thresh := lower if na(dir) dir := 1 if crossdown dir := -1 if crossup dir := 1 if dir == 1 thresh := lower if dir == -1 thresh := upper crossup := ta.crossover(hclose, thresh) and barstate.isconfirmed crossdown := ta.crossunder(hclose, thresh) and barstate.isconfirmed //STRATEGY if crossup strategy.entry("long", strategy.long) if crossdown strategy.entry("Short", strategy.short) //PLOTTING col = hclose > thresh ? color.lime : color.red plot(thresh, linewidth = 2, color = color.new(col[1], 0))