এই কৌশলটি মূলত হালের চলমান গড় এবং ডব্লিউটি সূচকগুলির ক্রস সিগন্যালকে একত্রিত করে যাতে প্রবণতা বিচার এবং প্রবেশের সময় নির্বাচন করার ক্ষেত্রে আরও সঠিক সিদ্ধান্ত গ্রহণের জন্য তাদের নিজস্ব সূচকগুলির সুবিধা গ্রহণ করা যায়।
এই কৌশলটি মূলত হুলের চলমান গড় এবং ডব্লিউটি সূচক ক্রস সিগন্যাল দ্বারা গঠিত।
Hull Moving Average অংশ, স্বল্পমেয়াদী এবং দীর্ঘমেয়াদী Hull MA গণনা করে এবং রং পূরণ করে ট্রেন্ডের দিকনির্দেশনা নির্ধারণ করে।
স্বল্পমেয়াদী হুল এমএ = ডাব্লুএমএ*WMA(n/2) - WMA(n), sqrt(n))
দীর্ঘমেয়াদী হুল এমএ = ডাব্লুএমএ (ডাব্লুএমএ) (এন/৩)*3 - WMA(n/2), n/2)
যেখানে WMA হল ওজনযুক্ত মুভিং এভারেজ। দীর্ঘমেয়াদী লাইন অতিক্রম করার সময় এটি একটি bullish সংকেত, অন্যথায় এটি একটি bearish সংকেত।
WT সূচক অংশ, WT সূচকটির বহুভুজ গড়রেখা গণনা করে এবং গড়রেখার ক্রসগুলি পর্যবেক্ষণ করে প্রবেশের বিচার করা হয়। গণনা সূত্রটি হলঃ
TCI = (Close - EMA(Close,n1)) / (k * STD(Close - EMA(Close,n1),n1))
WT1 = EMA(TCI,n2)
WT2 = SMA(WT1,m)
যেখানে টিসিআই হল ট্রেন্ড কম্পোজিট ইনডেক্স, যা দামের মধ্যম লাইন ইএমএর বিচ্যুতিকে প্রতিফলিত করে; ডাব্লুটি 1 টিসিআইয়ের ইএমএ সমতলীকরণ, ডাব্লুটি 2 ডাব্লুটি 1 এর এসএমএ মান, এম সাধারণত 4 নেয়। যখন ডাব্লুটি 1 ডাব্লুটি 2 দিয়ে যায় তখন মাল্টিহেড সংকেত, যখন ডাব্লুটি 1 ডাব্লুটি 2 দিয়ে যায় তখন ফাঁকা সংকেত।
সংমিশ্রিত হুল এমএ এর প্রবণতা বিচার এবং ডব্লিউটি সূচক এর ক্রস সংকেত, প্রবণতা দিকটি সঠিক হলেই খেলায় প্রবেশ করা যায়।
এই কৌশলটি হুল এমএ এবং ডব্লিউটি সূচকগুলির সুবিধাগুলিকে একত্রিত করে এবং এর কয়েকটি সুবিধা রয়েছেঃ
Hull MA, মুভিং এভারেজের গণনা পদ্ধতি পরিবর্তন করে, দামের পরিবর্তনের প্রবণতাকে আরও দ্রুত ধরতে পারে, এবং কার্যকরভাবে বাজারের শব্দটি মুছে ফেলতে পারে, যাতে প্রবণতা সঠিকভাবে এবং নির্ভরযোগ্যভাবে বিচার করা যায়।
ডব্লিউটি সূচকগুলি চ্যানেলের মধ্যে দামের ওঠানামা বৈশিষ্ট্যগুলি ব্যবহার করে, দ্রুত টার্নিং পয়েন্টগুলি ধরতে এবং আরও সঠিক ট্রেডিং সংকেত দিতে পারে।
এই দুইয়ের সমন্বয়ে প্রবণতা নির্ণয় এবং ক্রস সংকেত উভয়ই বিবেচনা করা হয়, যা প্রবণতা শক্তির সাথে ঝুঁকি নিয়ন্ত্রণ করতে পারে।
হুল এমএ মসৃণকরণ প্যারামিটার এবং ডব্লিউটি সূচক প্যারামিটার উভয়ই কাস্টমাইজযোগ্য এবং বিভিন্ন জাতের বৈশিষ্ট্য এবং লেনদেনের পছন্দ অনুসারে অপ্টিমাইজ করা যেতে পারে।
ক্রস সিগন্যাল ট্রেড করার জন্য Hull MA বা WT ইন্ডিকেটর ব্যবহার করা যেতে পারে, অথবা ট্রেডিং ট্র্যাকিং এবং ক্রস যাচাইকরণ উভয়ই ব্যবহার করা যেতে পারে।
স্টপ লস স্টপ স্টপ কৌশল সেট করতে পারেন, যাতে একক লেনদেনের ঝুঁকি কার্যকরভাবে নিয়ন্ত্রণ করা যায়।
এই কৌশলটি নিম্নলিখিত ঝুঁকির সাথে জড়িতঃ
Hull MA এবং WT সূচক উভয়ই দামের সাথে কিছুটা অস্পষ্ট আচরণ করেছে, যা কিছুটা পিছিয়ে যেতে পারে, যার ফলে প্রবেশের সময়টি সঠিক নয়।
ডব্লিউটি সূচকগুলি একাধিক ওভারহেড এবং খালি ওভারহেডের মিথ্যা সংকেত তৈরি করতে পারে, যা ট্রেডিংয়ের ঝুঁকি বাড়িয়ে তুলতে পারে যদি ট্রেন্ডিংয়ের বিচার না করা হয়।
ভুল প্যারামিটার সেটিং ট্রেডিংয়ের ফলাফলের উপর প্রভাব ফেলতে পারে, যা জাতের বৈশিষ্ট্য অনুসারে ক্রমাগত পরীক্ষা এবং অপ্টিমাইজেশনের প্রয়োজন।
ট্রেডিংয়ের সময় স্টপ লস প্রায়শই ট্রিগার করা হয়, যার ফলে ট্রেডিংয়ের ক্ষতি হয়।
ঝুঁকি মোকাবেলায়, নিম্নলিখিত উপায়ে অপ্টিমাইজেশন এবং উন্নতি করা যেতে পারেঃ
Hull MA এবং WT প্যারামিটারগুলিকে সামঞ্জস্য করুন এবং সর্বোত্তম ভারসাম্য খুঁজে বের করুন। অন্যান্য সূচকগুলিও Hull MA এর সাথে ব্যবহার করা যেতে পারে।
প্রবণতা নির্ধারণের জন্য একটি পদ্ধতি যুক্ত করা হয়েছে, যাতে WT সূচকটি স্পষ্ট প্রবণতা না থাকলে ভুল সংকেত দেয় না।
রিটার্নিং এবং সিমুলেশন ট্রেডিং ব্যবহার করে সর্বোত্তম প্যারামিটারগুলি খুঁজে বের করুন এবং যুক্তিসঙ্গত স্টপ লস সেট করুন।
ট্রেন্ড অস্পষ্ট হলে, পজিশনের আকার কমিয়ে আনুন বা অস্থায়ীভাবে ট্রেড করবেন না।
এই কৌশলটি নিম্নলিখিত দিকগুলি থেকে আরও উন্নত করা যেতে পারেঃ
WT সূচকগুলির সাথে বিভিন্ন চলমান গড়ের সমন্বয় পরীক্ষা করুন, আরও ভাল ভারসাম্য খুঁজুন যেমন KAMA, TEMA ইত্যাদি।
অন্যান্য সূচক যুক্ত করুন, যেমন কম্পন সূচক, বোলিংগার ব্যান্ডস ইত্যাদি, সিদ্ধান্ত গ্রহণের নির্ভুলতা বাড়ানোর জন্য।
৩. প্যারামিটার সেটিং অপ্টিমাইজ করুন, ফিডব্যাক এবং সিমুলেশন দ্বারা সর্বোত্তম প্যারামিটার সমন্বয় খুঁজুন। প্যারামিটার অপ্টিমাইজেশন প্রোগ্রাম তৈরি করতে পারেন, দ্রুত সর্বোত্তম প্যারামিটার খুঁজুন।
স্টপ-অফ কৌশলগুলিকে অপ্টিমাইজ করুন, যেমন চলমান স্টপ, ওসিল্যান্ট স্টপ, কাছাকাছি এবং দূরবর্তী স্টপ ব্যবহার করে স্টপ-অফের সম্ভাবনা হ্রাস করুন।
পজিশন ম্যানেজমেন্ট কৌশল অপ্টিমাইজ করুন, ট্রেডিং ফ্রিকোয়েন্সি এবং পজিশনের আকার কমিয়ে আনুন যখন প্রবণতা অনিশ্চিত হয়, ঝুঁকি হ্রাস করুন।
মেশিন লার্নিং এবং অন্যান্য উন্নত প্রযুক্তির ব্যবহারের মাধ্যমে ট্রেডিং সিদ্ধান্ত গ্রহণ এবং প্যারামিটারগুলিকে আরও স্মার্ট করার জন্য।
এই কৌশলটি হুল এমএ সমতল চলমান গড় এবং ডব্লিউটি সূচক ক্রস বৈশিষ্ট্য এবং প্রবণতা বিচার এবং ক্রস যাচাইকরণের সুবিধাগুলিকে সংহত করে। সঠিক দিকনির্দেশের নিশ্চয়তা প্রদান করে ট্রেডিং করা, ঝুঁকি কার্যকরভাবে নিয়ন্ত্রণ করা যায়। প্যারামিটার সেটিং, স্টপ লস কৌশল, পজিশন ম্যানেজমেন্ট ইত্যাদির অপ্টিমাইজেশনের মাধ্যমে কৌশলটির স্থিতিশীলতা এবং ব্যবসায়ের কার্যকারিতা আরও বাড়ানো যেতে পারে। অন্যান্য সূচক বিচার এবং স্মার্ট ট্রেডিং প্রযুক্তিও ভবিষ্যতের অপ্টিমাইজেশনের দিক। সামগ্রিকভাবে, এই কৌশলটি সহজ, নির্ভরযোগ্য, সহজেই অপ্টিমাইজ করার বৈশিষ্ট্য রয়েছে এবং এটি একটি ব্যবহারিক প্রবণতা অনুসরণকারী কৌশল।
/*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 ///