রিসোর্স লোড হচ্ছে... লোডিং...

ডায়নামিক দৈর্ঘ্য গণনা মাল্টি-ইন্ডিক্টর বিশ্লেষণ সিস্টেমের সাথে VAWSI এবং ট্রেন্ডের ধারাবাহিকতা বিপরীত কৌশল

লেখক:চাওঝাং, তারিখঃ ২০২৪-০৬-২১ ১৫ঃ৩৬ঃ৪৩
ট্যাগঃVAWSIএটিআরআরএসআইডব্লিউএমএএসএমএআরএমএ

উত্স - পূর্ববর্তী উত্সের সাথে মিলিত হয়, তারপরে তার পরিবর্তনের পরম মান নেয় এবং উত্সের সাথে এটি স্বাভাবিক করে।

  1. গতিশীল দৈর্ঘ্য গণনাঃ বাজারের অবস্থার উপর ভিত্তি করে সূচক দৈর্ঘ্যের পরামিতিগুলি সামঞ্জস্য করার জন্য ব্ল্যাকক্যাট 1402 এর গতিশীল দৈর্ঘ্য গণনা পদ্ধতি ব্যবহার করে।

  2. যৌগিক বিশ্লেষণঃ একটি যৌগিক সূচক তৈরি করতে VAWSI, ট্রেন্ডের ধারাবাহিকতা এবং ATR থেকে পাঠ্যগুলি একত্রিত করে। নিম্ন চূড়ান্ত মানগুলি আসন্ন বিপরীত নির্দেশ করে, যখন উচ্চতর মানগুলি অস্থির বা অস্থির বাজারগুলিকে নির্দেশ করে।

  3. ডায়নামিক স্টপ-লস/টেক-প্রফিটঃ কম্পোজিট ইন্ডিকেটর এবং বর্তমান ট্রেন্ডের দিকনির্দেশের ভিত্তিতে ডায়নামিক স্টপ-লস এবং টেক-প্রফিট স্তর গণনা করে।

  4. ট্রেড সিগন্যালঃ ক্রসওভার নিশ্চিত করে এবং যখন মূল্য গণনা করা থ্রেশহোল্ড লাইনটি সম্পূর্ণরূপে অতিক্রম করে তখন ট্রেড সিগন্যাল তৈরি করে।

কৌশলগত সুবিধা

  1. বহুমাত্রিক বিশ্লেষণঃ একাধিক সূচককে একত্রিত করে, কৌশলটি বিভিন্ন কোণ থেকে বাজার বিশ্লেষণ করতে পারে, সিদ্ধান্তের নির্ভুলতা উন্নত করে।

  2. অভিযোজনযোগ্যতাঃ গতিশীল দৈর্ঘ্যের গণনা কৌশলটিকে বিভিন্ন বাজারের অবস্থার সাথে মানিয়ে নিতে দেয়, এর নমনীয়তা বাড়ায়।

  3. ঝুঁকি ব্যবস্থাপনাঃ গতিশীল স্টপ-লস এবং লাভ গ্রহণের সেটিংস ঝুঁকিকে আরও ভালভাবে নিয়ন্ত্রণ করতে এবং বাজারের পরিবর্তনের সাথে মানিয়ে নিতে সহায়তা করে।

  4. মূল সূচকঃ VAWSI এবং ট্রেন্ড পেরসিস্ট্যান্স সূচকগুলি অনন্য বাজার অন্তর্দৃষ্টি প্রদান করে যা ঐতিহ্যগত সূচকগুলির দ্বারা উপেক্ষা করা সংকেতগুলি ক্যাপচার করতে পারে।

  5. অ্যান্টি-রিপেইন্টিংঃ বারস্টেট.আইস কনফার্মেড ব্যবহার করে সিগন্যালগুলি পুনরায় রঙ না করে তা নিশ্চিত করে, ব্যাকটেস্টিংয়ের নির্ভুলতা উন্নত করে।

  6. কাস্টমাইজযোগ্যতাঃ একাধিক সামঞ্জস্যযোগ্য পরামিতি কৌশলকে বিভিন্ন ট্রেডিং যন্ত্র এবং সময়সীমার জন্য অভিযোজিত করার অনুমতি দেয়।

কৌশলগত ঝুঁকি

  1. অতিরিক্ত অপ্টিমাইজেশানঃ প্রচুর সংখ্যক পরামিতি অতিরিক্ত অপ্টিমাইজেশান হতে পারে, যা লাইভ ট্রেডিংয়ে সম্ভাব্যভাবে খারাপ পারফরম্যান্স দেয়।

  2. বাজার অভিযোজনযোগ্যতাঃ নির্দিষ্ট বাজারে ভাল পারফরম্যান্স থাকা সত্ত্বেও, এটি সমস্ত বাজারের অবস্থার জন্য উপযুক্ত নাও হতে পারে, বিশেষ করে কম অস্থিরতার বাজারে।

  3. জটিলতাঃ কৌশলটির জটিলতা বোঝা এবং বজায় রাখা কঠিন করে তুলতে পারে, যা অপারেশনাল ত্রুটির ঝুঁকি বাড়ায়।

  4. গণনা নিবিড়ঃ একাধিক কাস্টম সূচক এবং গতিশীল গণনার ফলে উচ্চ গণনা লোড হতে পারে, যা কার্যকরকরণের গতিকে প্রভাবিত করে।

  5. ঐতিহাসিক তথ্যের উপর নির্ভরশীলতাঃ কৌশলটি গণনার জন্য প্রচুর পরিমাণে ঐতিহাসিক তথ্য ব্যবহার করে, যা কিছু পরিস্থিতিতে বিলম্বের কারণ হতে পারে।

অপ্টিমাইজেশান নির্দেশাবলী

  1. পরামিতি অপ্টিমাইজেশনঃ বিভিন্ন বাজারের অবস্থার অধীনে কৌশল কর্মক্ষমতা উন্নত করতে বিভিন্ন ওজন এবং দৈর্ঘ্য পরামিতি অপ্টিমাইজ করার জন্য মেশিন লার্নিং অ্যালগরিদম ব্যবহার করুন।

  2. মার্কেট স্টেট রিকগনিশনঃ বিভিন্ন মার্কেট পরিবেশে কৌশলগত পরামিতিগুলি স্বয়ংক্রিয়ভাবে সামঞ্জস্য করার জন্য একটি মার্কেট স্টেট রিকগনিশন মডিউল যুক্ত করুন।

  3. সিগন্যাল ফিল্টারিংঃ মিথ্যা সংকেত হ্রাস করার জন্য অতিরিক্ত ফিল্টারিং প্রক্রিয়া যেমন প্রবণতা শক্তি থ্রেশহোল্ডগুলি প্রবর্তন করুন।

  4. ভলিউম বিশ্লেষণঃ ভলিউম বিশ্লেষণ গভীর করা, সম্ভাব্যভাবে সংকেত নির্ভরযোগ্যতা উন্নত করার জন্য ভলিউম প্যাটার্ন স্বীকৃতি প্রবর্তন।

  5. মাল্টি-টাইমফ্রেম বিশ্লেষণঃ ট্রেডিং সিদ্ধান্তের দৃঢ়তা উন্নত করতে একাধিক টাইমফ্রেম থেকে সংকেত একীভূত করুন।

  6. ঝুঁকি ব্যবস্থাপনা অপ্টিমাইজেশানঃ আরও পরিশীলিত ঝুঁকি ব্যবস্থাপনা কৌশল বাস্তবায়ন করুন, যেমন গতিশীল অবস্থান আকার এবং মাল্টি-লেভেল স্টপ-লস।

  7. কম্পিউটেশনাল দক্ষতাঃ গণনার দক্ষতা উন্নত করতে কোডটি অনুকূল করুন, বিশেষত যখন প্রচুর পরিমাণে 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))



সম্পর্কিত

আরো