Hull Moving Average এবং WT ক্রস ভিত্তিক ট্রেডিং কৌশল

লেখক:চাওঝাং, তারিখ: ২০২৩-০৯-২৬ ২০ঃ০০ঃ৩২
ট্যাগঃ

সারসংক্ষেপ

এই কৌশলটি মূলত Hull Moving Average এবং WT ক্রস সিগন্যালকে একত্রিত করে যাতে প্রতিটি সূচকের সুবিধাগুলি আরও সঠিক প্রবণতা বিচার এবং প্রবেশের সময় নির্ধারণের জন্য ব্যবহার করা যায়।

কৌশলগত যুক্তি

কৌশলটি হুল মুভিং এভারেজ এবং ডব্লিউটি ক্রস সিগন্যাল নিয়ে গঠিত।

Hull Moving Average অংশটি স্বল্পমেয়াদী এবং দীর্ঘমেয়াদী Hull MAs গণনা করে এবং প্রবণতা দিক নির্ধারণের জন্য রঙ পূরণ করে। সূত্রগুলি হলঃ

শর্ট হুল এমএ = ডব্লিউএমএ (২*ডব্লিউএমএ (এন/২) - ডব্লিউএমএ (এন), স্কয়ার (এন))

লং হুল এমএ = ডব্লিউএমএ ((ডব্লিউএমএ ((এন/৩) *৩ - ডব্লিউএমএ ((এন/২), এন/২)

যেখানে ডব্লিউএমএ হল ওয়েটেড মুভিং এভারেজ। যখন সংক্ষিপ্ত এমএ দীর্ঘ এমএ অতিক্রম করে, এটি একটি উত্থান সংকেত, অন্যথায় একটি হ্রাস সংকেত।

WT অংশটি WT লাইনগুলি গণনা করে এবং এন্ট্রিগুলি নির্ধারণের জন্য তাদের ক্রসিং পর্যবেক্ষণ করে। সূত্রগুলি হলঃ

TCI = (Close - EMA(Close,n1)) / (k * STD(Close - EMA(Close,n1),n1))

WT1 = EMA ((TCI,n2)

WT2 = SMA(WT1,m)

যেখানে TCI হল ট্রেন্ড কম্পোজিট ইনডেক্স, যা EMA থেকে মূল্যের বিচ্যুতিকে প্রতিফলিত করে; WT1 হল TCI এর EMA, WT2 হল WT1 এর SMA, m সাধারণত 4 হয়। WT1 এর WT2 এর উপরে ক্রসিং একটি উত্থান সংকেত নির্দেশ করে, যখন WT1 এর WT2 এর নীচে ক্রসিং একটি bearish সংকেত নির্দেশ করে।

হুল এমএ প্রবণতা বিচার এবং ডব্লিউটি ক্রসিং সংকেত একত্রিত করে, আমরা সঠিক দিকে বাজারে প্রবেশ করতে পারি।

সুবিধা বিশ্লেষণ

এই কৌশলটির সুবিধাগুলো হল:

  1. হুল এমএ হিসাব পরিবর্তন করে দামের পরিবর্তনগুলি দ্রুত ধরতে পারে এবং নির্ভরযোগ্য প্রবণতা মূল্যায়নের জন্য বাজারের গোলমালকে কার্যকরভাবে ফিল্টার করে।

  2. ডাব্লুটি চ্যানেলের মধ্যে মূল্যের ওঠানামা ব্যবহার করে দ্রুত টার্নিং পয়েন্টগুলি ক্যাপচার করে এবং তুলনামূলকভাবে সঠিক ট্রেডিং সংকেত তৈরি করে।

  3. এই সংমিশ্রণে প্রবণতা সামঞ্জস্য হলে ঝুঁকি নিয়ন্ত্রণের জন্য প্রবণতা এবং ক্রসিং উভয়ই বিবেচনা করা হয়।

  4. হুল এমএ এবং ডব্লিউটি পরামিতিগুলি প্রতীক বৈশিষ্ট্য এবং ট্রেডিং পছন্দগুলির উপর ভিত্তি করে সামঞ্জস্য এবং অপ্টিমাইজেশনের জন্য কাস্টমাইজযোগ্য।

  5. হুল এমএ এবং ডব্লিউটি সংকেতগুলি এককভাবে বা একসাথে প্রবণতা অনুসরণ এবং ক্রসিং বৈধকরণের জন্য ব্যবহার করা যেতে পারে।

  6. একক বাণিজ্য ঝুঁকি কার্যকরভাবে নিয়ন্ত্রণ করার জন্য স্টপ লস এবং লাভ নিতে সেট করা যেতে পারে।

ঝুঁকি বিশ্লেষণ

এই কৌশলটির প্রধান ঝুঁকিগুলি হলঃ

  1. হুল এমএ এবং ডব্লিউটি উভয়ই কিছুটা পরিমাণে দামকে মসৃণ করে তোলে, যা প্রবেশের সংকেতগুলিকে পিছিয়ে দিতে পারে।

  2. WT একটি স্পষ্ট প্রবণতা ছাড়াই মিথ্যা উত্থান / হ্রাসের বিপরীত সংকেত তৈরি করতে পারে।

  3. অনুপযুক্ত প্যারামিটার সেটিংগুলি ট্রেডিং পারফরম্যান্সকে প্রভাবিত করতে পারে এবং চলমান অপ্টিমাইজেশান প্রয়োজন।

  4. ট্রেন্ড কনসোলিডেশনের সময় স্টপ লস প্রায়শই সক্রিয় হতে পারে, যা কিছু ক্ষতির কারণ হতে পারে।

ঝুঁকিগুলি নিম্নরূপ মোকাবেলা এবং অপ্টিমাইজ করা যেতে পারেঃ

  1. সর্বোত্তম ভারসাম্য খুঁজে পেতে Hull MA এবং WT পরামিতিগুলি সামঞ্জস্য করুন। অন্যান্য সূচকগুলিও Hull MA দিয়ে পরীক্ষা করা যেতে পারে।

  2. একটি নিশ্চিত প্রবণতা ছাড়া মিথ্যা WT সংকেত এড়াতে প্রবণতা যাচাইকরণ প্রক্রিয়া যোগ করুন।

  3. ব্যাকটেস্টিং এবং ডেমো ট্রেডিংয়ের মাধ্যমে প্যারামিটার অপ্টিমাইজ করুন এবং যুক্তিসঙ্গত স্টপ লস রেঞ্জ সেট করুন।

  4. ট্রেন্ড অস্পষ্ট হলে পজিশনের আকার কমানো বা ট্রেডিং বন্ধ করা।

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

কৌশলটি নিম্নলিখিত দিকগুলি থেকে আরও অনুকূলিত করা যেতে পারেঃ

  1. WT এর সাথে মিলিত বিভিন্ন চলমান গড় পরীক্ষা করুন, যাতে আরও ভাল ভারসাম্য পাওয়া যায়, যেমন KAMA, TEMA ইত্যাদি।

  2. সিদ্ধান্তের নির্ভুলতা বাড়ানোর জন্য অন্যান্য সূচক যেমন দোলক, বোলিংজার ব্যান্ড যুক্ত করুন।

  3. ব্যাকটেস্টিং এবং ডেমো ট্রেডিং এর মাধ্যমে প্যারামিটার অপ্টিমাইজ করুন। দ্রুত টিউনিং এর জন্য প্যারামিটার অপ্টিমাইজেশন প্রোগ্রাম তৈরি করুন।

  4. অপ্টিমাইজ করুন স্টপ লস কৌশল যেমন ট্রেলিং স্টপ, ভোল্টেবিলিটি ভিত্তিক স্টপ, কাছাকাছি থেকে দূরে ইত্যাদি সরানো, অবাঞ্ছিত ট্রিগারিং কমাতে।

  5. অপ্টিমাইজ পজিশন সাইজিং কৌশল, ঝুঁকি কমাতে অস্পষ্ট প্রবণতা আকার এবং ফ্রিকোয়েন্সি হ্রাস।

  6. মেশিন লার্নিং এবং আরও স্মার্ট ট্রেডিং সিদ্ধান্ত এবং অভিযোজিত পরামিতিগুলির জন্য অন্যান্য উন্নত কৌশল প্রবর্তন করা।

সংক্ষিপ্তসার

এই কৌশলটি ট্রেন্ড বিচার এবং যাচাইকরণের জন্য হাল এমএ মসৃণকরণ এবং ডাব্লুটি ক্রসিং শক্তির সংমিশ্রণ করে। নিশ্চিত দিকের সাথে ট্রেডিং ঝুঁকি নিয়ন্ত্রণে সহায়তা করে। প্যারামিটার অপ্টিমাইজেশন, স্টপ লস কৌশল, অবস্থান আকার ইত্যাদিতে আরও উন্নতি করা যেতে পারে। অন্যান্য সূচক এবং বুদ্ধিমান কৌশলগুলিকে একীভূত করাও ভবিষ্যতের অপ্টিমাইজেশনের দিক। সামগ্রিকভাবে, এটি সরলতা, নির্ভরযোগ্যতা এবং অপ্টিমাইজেশনের সহজতার সাথে কৌশল অনুসরণ করে একটি ব্যবহারিক প্রবণতা।


/*backtest
start: 2023-08-26 00:00:00
end: 2023-09-25 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// WT CROSS @author [© LazyBear]
// © pigsq
// @version=5

strategy("Kahlman HullMA / WT Cross Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100)

_1 = input(false, '───────── SP/TP SETTINGS ─────────')

stoploss1 = input(title='Stop Loss On/Off?', defval=true)
stoploss = input.float(5, "Stop Loss", minval = 1, step = 1)/100
takeprofit1 = input(title='Take Profit On/Off?', defval=true)
takeprofit = input.float(10, "Take Profit", minval = 1, step = 1)/100

_2 = input(false, '──────── WT CROSS SETTINGS ────────')

wtcross = input(title='WT Cross On/Off?', defval=true)
wtcross2 = input(title='Change WT Cross Method ( If WT Cross ON )', defval=false)

/// WT CROSS ///

n1 = input(10, 'Channel Length')
n2 = input(21, 'Average Length')

ap = hlc3
esa = ta.ema(ap, n1)
r = ta.ema(math.abs(ap - esa), n1)
ci = (ap - esa) / (0.015 * r)
tci = ta.ema(ci, n2)

wt1 = tci
wt2 = ta.sma(wt1, 4)

/// WT CROSS ///

/// HULL TREND WITH KAHLMAN ///

_3 = input(false, '──────── HULLMA SETTINGS ────────')

srchull = input(hl2, 'Source')
lengthhull = input(24, 'Lookback')
gain = input(10000, 'Gain')
kh = input(true, 'Use Kahlman')

hma(_srchull, _lengthhull) =>
    ta.wma((2 * ta.wma(_srchull, _lengthhull / 2)) - ta.wma(_srchull, _lengthhull), math.round(math.sqrt(_lengthhull)))

hma3(_srchull, _lengthhull) =>
    p = lengthhull / 2
    ta.wma(ta.wma(close, p / 3) * 3 - ta.wma(close, p / 2) - ta.wma(close, p), p)

kahlman(x, g) =>
    kf = 0.0
    dk = x - nz(kf[1], x)
    smooth = nz(kf[1], x) + dk * math.sqrt(g / 10000 * 2)
    velo = 0.0
    velo := nz(velo[1], 0) + g / 10000 * dk
    kf := smooth + velo
    kf

a = kh ? kahlman(hma(srchull, lengthhull), gain) : hma(srchull, lengthhull)
b = kh ? kahlman(hma3(srchull, lengthhull), gain) : hma3(srchull, lengthhull)
c = b > a ? color.lime : color.red
crossdn = a > b and a[1] < b[1]
crossup = b > a and b[1] < a[1]

p1hma = plot(a, color=c, linewidth=1, title='Long Plot', transp=75)
p2hma = plot(b, color=c, linewidth=1, title='Short Plot', transp=75)
fill(p1hma, p2hma, color=c, title='Fill', transp=55)

/// HULL TREND WITH KAHLMAN ///

/// DATE ///

_4 = input(false, '───────── DATE SETTINGS ─────────')

FromMonth = input.int(defval=1, title='From Month', minval=1, maxval=12)
FromDay = input.int(defval=1, title='From Day', minval=1, maxval=31)
FromYear = input.int(defval=999, title='From Year', minval=999)
ToMonth = input.int(defval=1, title='To Month', minval=1, maxval=12)
ToDay = input.int(defval=1, title='To Day', minval=1, maxval=31)
ToYear = input.int(defval=9999, title='To Year', minval=999)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)
window() =>
    time >= start and time <= finish ? true : false

/// DATE ///

/// LONG/SHORT CONDITION ///

longCondition = crossup and ta.crossover(wt1,wt2)
longCondition1 = crossup
longCondition2 = crossup and wt1 > wt2

if (wtcross == true ? longCondition : wtcross == false ? longCondition1:na)
    strategy.entry("LONG", strategy.long, when=window(), comment="Enter Long")
else if (wtcross2 == true ? longCondition2 : wtcross2 == false ? longCondition:na)
    strategy.entry("LONG", strategy.long, when=window(), comment="Enter Long")
    
shortCondition = crossdn and ta.crossunder(wt1,wt2)
shortCondition1 = crossdn
shortCondition2 = crossdn and wt1 < wt2

if (wtcross == true ? shortCondition : wtcross == false ? shortCondition1:na)
    strategy.entry("SHORT", strategy.short, when=window(), comment="Enter Short")
else if (wtcross2 == true ? shortCondition2 : wtcross2 == false ? shortCondition:na)
    strategy.entry("LONG", strategy.long, when=window(), comment="Enter Short")

/// LONG/SHORT CONDITION ///

/// CLOSE STRATEGY ///

strategy.close("LONG", when=wtcross == true ? shortCondition : wtcross == false ? shortCondition1:na, comment = "Close Long")
strategy.close("SHORT", when=wtcross == true ? longCondition : wtcross == false ? longCondition1:na, comment = "Close Short")

/// EXIT STRATEGY ///

strategy.exit("LONG", when=strategy.position_size > 0, stop=stoploss1 == true ? strategy.position_avg_price * (1 - stoploss):na, limit=takeprofit1 == true ? strategy.position_avg_price * (1 + takeprofit):na, comment="Exit Long")
strategy.exit("SHORT", when=strategy.position_size < 0, stop=stoploss1 == true ? strategy.position_avg_price * (1 + stoploss):na, limit=takeprofit1 == true ? strategy.position_avg_price * (1 - takeprofit):na, comment ="Exit Short")

/// LONG SL/TP LINE ///

plot(strategy.position_size > 0 ? strategy.position_avg_price * (1 - stoploss) : na, title='Long Stop Loss', color=stoploss1 == true ? color.new(color.red, 0):na, style=plot.style_linebr)
plot(strategy.position_size > 0 ? strategy.position_avg_price * (1 + takeprofit) : na, title='Long Take Profit', color=takeprofit1 == true ? color.new(color.green, 0):na, style=plot.style_linebr)

/// LONG SL/TP LINE ///

/// SHORT SL/TP LINE ///

plot(strategy.position_size < 0 ? strategy.position_avg_price * (1 + stoploss) : na, title='Short Stop Loss', color=stoploss1 == true ? color.new(color.red, 0):na, style=plot.style_linebr)
plot(strategy.position_size < 0 ? strategy.position_avg_price * (1 - takeprofit) : na, title='Short Take Profit', color=takeprofit1 == true ? color.new(color.green, 0):na, style=plot.style_linebr)

/// SHORT SL/TP LINE ///


আরো