
এই কৌশলটি একাধিক সূচকের সমন্বিত বিশ্লেষণের একটি সিস্টেম, যা মূলত বাজারের প্রবণতা এবং সম্ভাব্য বিপর্যয়কে মূল্যায়ন করার জন্য VAWSI (ভলিউম এবং এটিআর ভারী শক্তি সূচক), প্রবণতা ধারাবাহিকতা সূচক এবং সংশোধিত সংস্করণে এটিআর ভিত্তিক। এই কৌশলটি বিভিন্ন বাজারের অবস্থার সাথে খাপ খাইয়ে নিতে গতিশীল দৈর্ঘ্যের গণনাও প্রবর্তন করে। এটি গতিশীল স্টপ লস এবং লাভের ব্যবস্থা করে ঝুঁকি পরিচালনা করে এবং সম্ভাব্য বিপর্যয় সংকেত সনাক্ত করার সময় ট্রেড করে।
এই কৌশলটির মূল বিষয় হল বাজারের প্রবণতাগুলির তীব্রতা, স্থায়িত্ব এবং অস্থিরতা পরিমাপ করার জন্য একাধিক কাস্টমাইজড সূচক ব্যবহার করে সর্বোত্তম ট্রেডিংয়ের সময় নির্ধারণ করা। এটি বিশেষত প্রবণতাযুক্ত বাজারের জন্য উপযুক্ত, তবে এটি বিভিন্ন বাজারের অবস্থার সাথে মোকাবিলা করার জন্য একটি অভিযোজনশীল প্রক্রিয়াও অন্তর্ভুক্ত করে।
VAWSI সূচক: এটি একটি মূল সূচক, যা RSI এর মত, কিন্তু RMA এর পরিবর্তে VAWMA ব্যবহার করে। এটি একটি উদীয়মান প্রবণতার শক্তি পরিমাপ করে।
প্রবণতা ধারাবাহিকতা সূচক: আরেকটি মূল সূচক, যা প্রবণতা স্থায়ী সময় পরিমাপ করার জন্য ব্যবহৃত হয়। এটি উত্সের ডেটা থেকে একটি নির্দিষ্ট দৈর্ঘ্যের মধ্যে সর্বোচ্চ / সর্বনিম্ন পয়েন্টের সর্বাধিক বিচ্যুতি গণনা করে, তারপরে এই বিচ্যুতিকে জমা করে এবং একটি শক্তির সূচক তৈরি করে।
সংশোধিত ATR: পূর্ববর্তী উত্সের উচ্চ-নিম্ন এবং সর্বনিম্ন-সর্বোচ্চ মান গ্রহণ করুন, তারপরে তার পরিবর্তনের পরম মান গ্রহণ করুন এবং উত্সের ডেটা দিয়ে একীভূত করুন।
গতিশীল দৈর্ঘ্য গণনাঃ BlackCat1402 এর গতিশীল দৈর্ঘ্য গণনা পদ্ধতি ব্যবহার করে, বাজারের অবস্থার উপর ভিত্তি করে সূচকের দৈর্ঘ্য প্যারামিটারগুলিকে সামঞ্জস্য করে।
সমন্বিত বিশ্লেষণঃ VAWSI, প্রবণতা ধারাবাহিকতা এবং ATR এর পাঠ্যগুলি একত্রিত করে একটি সমন্বিত সূচক তৈরি করা। নিম্ন চূড়ান্ত মানটি বোঝায় যে একটি বিপর্যয় আসছে এবং উচ্চ মানটি বোঝায় যে বাজারটি অস্থির বা অস্থির।
ডায়নামিক স্টপ/প্রফিট: ডায়নামিক স্টপ ও প্রফিট লেভেল, যা সমন্বিত সূচক এবং বর্তমান প্রবণতার দিকনির্দেশের ভিত্তিতে গণনা করা হয়।
ট্রেডিং সিগন্যালঃ যখন দাম সম্পূর্ণরূপে হিসাব করা থ্রিল লাইন অতিক্রম করে, সিস্টেমটি ক্রসটি নিশ্চিত করে এবং একটি ট্রেডিং সিগন্যাল উৎপন্ন করে।
বহু-মাত্রিক বিশ্লেষণঃ একাধিক সূচকের সমন্বয়ে, কৌশলগুলি বিভিন্ন দৃষ্টিকোণ থেকে বাজার বিশ্লেষণ করতে সক্ষম হয়, যা বিচারের নির্ভুলতা বাড়ায়।
স্বনির্ধারণযোগ্যতাঃ গতিশীল দৈর্ঘ্যের গণনা কৌশলকে বিভিন্ন বাজার অবস্থার সাথে খাপ খাইয়ে নিতে সক্ষম করে, কৌশলটির নমনীয়তা বাড়ায়।
ঝুঁকি ব্যবস্থাপনাঃ গতিশীল স্টপ লস এবং লাভের সেটিংগুলি ঝুঁকিগুলিকে আরও ভালভাবে নিয়ন্ত্রণ করতে এবং বাজারের পরিবর্তনের সাথে খাপ খাইয়ে নিতে সহায়তা করে।
মৌলিক সূচকঃ VAWSI এবং ট্রেন্ড ক্রমাগততা সূচকগুলি বাজারের অনন্য অন্তর্দৃষ্টি প্রদান করে, যা প্রচলিত সূচকগুলি উপেক্ষা করে এমন সংকেতগুলি ধরতে পারে।
বারস্টেট.আইসকনফার্মড ব্যবহার করে, বারস্টেট পুনরায় চিত্রিত হবে না তা নিশ্চিত করা হয়, যা রিটার্নিংয়ের নির্ভুলতা বাড়ায়।
কাস্টমাইজযোগ্যতাঃ একাধিক প্যারামিটারগুলিকে সামঞ্জস্য করা যায়, যাতে কৌশলটি বিভিন্ন ধরণের লেনদেন এবং সময়সীমার সাথে খাপ খাইয়ে নিতে পারে।
ওভার অপ্টিমাইজেশনঃ অনেকগুলি প্যারামিটার ওভার অপ্টিমাইজেশনের কারণ হতে পারে, যা রিয়েল-ডিস্ক ট্রেডিংয়ে খারাপ কাজ করে।
বাজার অভিযোজনযোগ্যতাঃ কিছু বাজারে ভাল পারফরম্যান্স সত্ত্বেও, এটি সমস্ত বাজার অবস্থার জন্য উপযুক্ত নাও হতে পারে, বিশেষত কম অস্থিরতার বাজারে।
জটিলতা: কৌশলগুলির জটিলতা তাদের বোঝা এবং বজায় রাখা কঠিন করে তোলে, অপারেশন ত্রুটির ঝুঁকি বাড়ায়।
গণনা-নিবিড়ঃ একাধিক কাস্টমাইজড সূচক এবং গতিশীল গণনাগুলি উচ্চতর গণনা বোঝা সৃষ্টি করতে পারে, যা কার্যকরকরণের গতিকে প্রভাবিত করে।
ঐতিহাসিক তথ্যের উপর নির্ভরশীলতা: কৌশলটি প্রচুর ঐতিহাসিক তথ্য ব্যবহার করে গণনা করে, যা কিছু ক্ষেত্রে বিলম্বিত হতে পারে।
প্যারামিটার অপ্টিমাইজেশনঃ বিভিন্ন বাজারের অবস্থার অধীনে কৌশলগুলিকে উন্নত করার জন্য বিভিন্ন ওজন এবং দৈর্ঘ্যের প্যারামিটারগুলিকে অপ্টিমাইজ করার জন্য মেশিন লার্নিং অ্যালগরিদম ব্যবহার করা হয়।
মার্কেট স্ট্যাটাস আইডেন্টিফিকেশনঃ একটি মার্কেট স্ট্যাটাস আইডেন্টিফিকেশন মডিউল যুক্ত করা হয়েছে যাতে বিভিন্ন মার্কেট পরিবেশে কৌশলগত প্যারামিটারগুলি স্বয়ংক্রিয়ভাবে সামঞ্জস্য করা যায়।
সিগন্যাল ফিল্টারিংঃ প্রবণতা শক্তি থ্রেশহোল্ডের মতো অতিরিক্ত ফিল্টারিং প্রক্রিয়া প্রবর্তন করে যা মিথ্যা সংকেত কমাতে পারে।
লেনদেনের পরিমাণ বিশ্লেষণঃ লেনদেনের পরিমাণ বিশ্লেষণের গভীরতা, সম্ভাব্য লেনদেনের আকার সনাক্তকরণ, সংকেতের নির্ভরযোগ্যতা বাড়ানোর জন্য।
মাল্টি টাইম ফ্রেম বিশ্লেষণঃ ট্রেডিং সিদ্ধান্তের স্থিতিশীলতা বাড়ানোর জন্য একাধিক টাইম ফ্রেমের সংকেত একত্রিত করা।
ঝুঁকি ব্যবস্থাপনা অপ্টিমাইজেশানঃ আরো জটিল ঝুঁকি ব্যবস্থাপনা কৌশল যেমন ডায়নামিক পজিশন সাইজিং এবং মাল্টি-লেভেল স্টপ লস।
হিসাব দক্ষতাঃ হিসাব দক্ষতা বাড়ানোর জন্য কোডটি অপ্টিমাইজ করুন, বিশেষত যখন প্রচুর পরিমাণে ইতিহাসের ডেটা নিয়ে কাজ করা হয়।
VAWSI এবং ট্রেন্ড ক্রমাগত বিপরীতমুখী কৌশলগুলি একটি জটিল এবং বিস্তৃত ট্রেডিং সিস্টেম যা একাধিক উদ্ভাবনী সূচক এবং গতিশীল প্যারামিটার সমন্বয়কে একত্রিত করে। এর সুবিধা হ’ল বহুমুখী বাজার বিশ্লেষণ এবং স্ব-অনুকূলিতকরণ যা এটিকে বিভিন্ন বাজারের অবস্থার মধ্যে সম্ভাব্য বিপরীতমুখী সুযোগগুলি সন্ধান করতে সক্ষম করে। তবে, কৌশলগুলির জটিলতাও অতিরিক্ত অপ্টিমাইজেশন এবং অভিযোজনযোগ্যতার চ্যালেঞ্জ নিয়ে আসে।
এই কৌশলটি আরও অপ্টিমাইজেশনের মাধ্যমে একটি শক্তিশালী ট্রেডিং সরঞ্জাম হওয়ার সম্ভাবনা রয়েছে, বিশেষত প্যারামিটার অ্যাডজাস্টমেন্ট, মার্কেট স্ট্যাটাস আইডেন্টিফিকেশন এবং ঝুঁকি ব্যবস্থাপনার ক্ষেত্রে। তবে ব্যবহারকারীদের মনে রাখা উচিত যে কোনও কৌশলই নিখুঁত নয় এবং ক্রমাগত পর্যবেক্ষণ এবং সমন্বয় প্রয়োজন। বাস্তব প্রয়োগে, সিমুলেটেড অ্যাকাউন্টগুলিতে পর্যাপ্ত পরীক্ষার পরামর্শ দেওয়া হয় এবং অন্যান্য বিশ্লেষণ সরঞ্জাম এবং বাজারের জ্ঞানকে একত্রিত করে ট্রেডিং সিদ্ধান্ত নেওয়ার জন্য।
/*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))