
এই কৌশলটি শেয়ারের দামের প্রবণতা এবং মূল সমর্থনকারী প্রতিরোধের স্তরগুলি সনাক্ত করার জন্য একত্রিত সমান্তরাল চার্ট এবং গড় দিকনির্দেশক সূচক ((ADX) ব্যবহার করে একটি ক্রয় এবং বিক্রয় সংকেত প্রেরণ করে। এই কৌশলটি প্রবণতার পরিস্থিতিতে বৃহত্তর মূল্যের ওঠানামা ক্যাপচার করার উদ্দেশ্যে তৈরি করা হয়েছে।
এক নজরে সমান্তরাল টেবিলটি পূর্ববর্তী রূপান্তর লাইন, বেঞ্চলাইন এবং বিলম্বের লাইন তিনটি চলমান গড় অন্তর্ভুক্ত করে। যখন দাম পূর্ববর্তী রূপান্তর লাইন এবং বেঞ্চলাইন অতিক্রম করে, তখন একটি কেনার সংকেত দেওয়া হয়; যখন দাম নীচে এই দুটি লাইন অতিক্রম করে, তখন একটি বিক্রয় সংকেত দেওয়া হয়। তদতিরিক্ত, এক নজরে সমান্তরাল টেবিলটি মেঘের মাধ্যমে গুরুত্বপূর্ণ সমর্থন এবং প্রতিরোধের অঞ্চলগুলি সনাক্ত করে।
এডিএক্স মূল্য প্রবণতা নির্ধারণের জন্য ব্যবহৃত হয়। যখন + ডিআই এবং - ডিআই সুস্পষ্টভাবে পৃথক হয়, তখন প্রবণতা নির্দেশ করে; যখন + ডিআই এবং - ডিআই কাছাকাছি থাকে, তখন সমন্বয় নির্দেশ করে। এই কৌশলটি যখন এডিএক্স 20 এর চেয়ে বড় হয় তখনই ট্রেডিং সিগন্যাল দেয়, যাতে সমন্বয়কালে মিথ্যা বিরতি ধরা যায় না।
প্রবণতা নির্ণয় করার জন্য প্রথম পর্যায়ের সমীকরণ এবং প্রবণতা শক্তির উপর ADX ফিল্টারিং ব্যবহার করে, প্রবণতা বাজারের যে অংশে দামের উচ্চতর ওঠানামা রয়েছে তা কার্যকরভাবে সনাক্ত করা যায়।
এই কৌশলটি প্রথম নজরে সমান্তরাল এবং ADX এর কার্যকর সমন্বয় দ্বারা প্রবণতা পরিস্থিতির কার্যকর ক্যাপচার অর্জন করে। আরও প্যারামিটার এবং নিয়ম অপ্টিমাইজেশনের উপর ভিত্তি করে, এই কৌশলটি আরও ভাল প্রতিক্রিয়া এবং রিয়েল-টাইম পারফরম্যান্স অর্জন করতে পারে। এই কৌশলটি কৌশলগত বিনিয়োগকারীদের জন্য উপযুক্ত যারা ট্রেন্ডিং স্টকগুলিতে লেনদেন করে।
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-10 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title="Ichimoku + ADX", shorttitle="Ichimoku & ADX Backtest", overlay=true)
//------------------------------
//------------------------------
// ICHIMOKU
//------------------------------
//------------------------------
conversionPeriods = input(9, minval=1, title="Conversion Line Periods"),
basePeriods = input(26, minval=1, title="Base Line Periods")
laggingSpan2Periods = input(52, minval=1, title="Lagging Span 2 Periods"),
displacement = input(26, minval=1, title="Displacement")
donchian(len) => avg(lowest(len), highest(len))
Tenkan = donchian(conversionPeriods)
Kijun = donchian(basePeriods)
SSA = avg(Tenkan, Kijun)
SSB = donchian(laggingSpan2Periods)
SSAdisp = SSA[displacement]
SSBdisp = SSB[displacement]
// Plot Ichimoku
// --------------------
plot(Tenkan, color=color.red, title="Tenkan")
plot(Kijun, color=color.blue, title="Kijun")
plot(close, offset = -displacement + 1, color=#459915, title="Chikou")
p1 = plot(SSA, offset = displacement - 1, color=color.green,
title="Senkou A")
p2 = plot(SSB, offset = displacement - 1, color=color.red,
title="Senkou B")
fill(p1, p2, color = SSA > SSB ? color.green : color.red)
//------------------------------
//------------------------------
// ADX
//------------------------------
//------------------------------
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
keyLevel = input(23, title="key level for ADX")
dirmov(len) =>
up = change(high)
down = -change(low)
truerange = rma(tr, len)
plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange)
minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange)
[plus, minus]
adx(dilen, adxlen) =>
[plus, minus] = dirmov(dilen)
sum = plus + minus
adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
[adx, plus, minus]
[sig, up, down] = adx(dilen, adxlen)
// Plot ADX
// --------------------
//plot(sig, color=color.black, title="ADX")
//plot(up, color=color.green, title="+DI",linewidth=2, style=plot.style_columns, transp=40)
//plot(down, color=color.red, title="-DI",linewidth=2, style=plot.style_columns, transp=40)
//plot(keyLevel, color=color.white, title="Key Level")
//------------------------------
//------------------------------
// STRATEGY
//------------------------------
//------------------------------
// Buy & Sell Signals
// --------------------
// ADX
ABuy1 = up > keyLevel and up - down >5 and sig > down and sig < keyLevel * 2
ASell1 = down > keyLevel and down - up >5 and sig > up and sig < keyLevel * 2
// ICHIMOKU
Bull = close >= max(SSAdisp, SSBdisp)
Bear = close <= min(SSAdisp, SSBdisp)
// 1. Bull
Buy1 = (close >= max(SSAdisp, SSBdisp)) ? 1 : 0
Buy2 = (Tenkan - Kijun >= 0.001) ? 1 : 0
Buy3 = SSA > SSB ? 1 : 0
Buy4 = sig > 20 ? 1 : 0
Buy4a = close - close[displacement] >=0.001 ? 1:0
Buy5 = Buy1 and Buy2 and Buy3 and Buy4 and Buy4a and not(Buy1[1] and Buy2[1] and Buy3[1])
// 1. Bear
Sell1 = (close <= min(SSAdisp, SSBdisp)) ? 1 : 0
Sell2 = (Kijun - Tenkan >= 0.001) ? 1 : 0
Sell3 = SSA < SSB ? 1 : 0
Sell4 = sig > 20 ? 1 : 0
Sell4a = close <= close[displacement]
Sell5 = Sell1 and Sell2 and Sell3 and Sell4 and Sell4a and not(Sell1[1] and Sell2[1] and Sell3[1])
// CONSOLIDATED
buysignal = Buy5
buyexitsignal = crossunder(close,Kijun)
sellsignal = Sell5
sellexitsignal = crossover(close,Kijun)
longCondition = buysignal
shortCondition = sellsignal
// Plot Indicators
// --------------------
// ----- Buy & Sell
//plotshape(longCondition, title = "Buy Signal", text ="BUY", textcolor =#FFFFFF , style=shape.labelup, size = size.tiny, location=location.belowbar, color = #1B8112, transp = 0)
//plotshape(shortCondition, title = "Short Signal", text ="SHORT", textcolor =#FFFFFF , style=shape.labeldown, size = size.tiny, location=location.abovebar, color = #000000, transp = 0)
// ----- Ichimoku Signals
//plotshape(Sell2, title = "Sell Signal", text ="Kumo Twist", textcolor =#FFFFFF , style=shape.labelup, size = size.tiny, location=location.top, color = color.black, transp = 0)
//plotshape(Sell3, title = "Sell Signal", text ="TK/KJ", textcolor =#FFFFFF , style=shape.labelup, size = size.tiny, location=location.bottom, color = color.black, transp = 0)
//plotshape(Buy4, title = "Buy Signal", text ="Kumo Twist", textcolor =#FFFFFF , style=shape.diamond, size = size.tiny, location=location.belowbar, color = color.blue, transp = 0)
//plotshape(Buy3, title = "Buy Signal", text ="TK/KJ", textcolor =#FFFFFF , style=shape.circle, size = size.tiny, location=location.abovebar, color = color.green, transp = 0)
//plotshape(Buy4, title = "Buy Signal", text ="TK/KJ", textcolor =#FFFFFF , style=shape.circle, size = size.tiny, location=location.belowbar, color = color.red, transp = 0)
//plotshape(buyexitsignal, title = "Buy Exit", style=shape.triangledown, size = size.tiny, location=location.abovebar, color = color.green, transp = 0)
//plotshape(sellexitsignal, title = "Buy Exit", style=shape.triangleup, size = size.tiny, location=location.belowbar, color = color.black, transp = 0)
//------------------------------
//------------------------------
// EXECUTION
//------------------------------
//------------------------------
// Test Range
// --------------------
// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 2, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear = input(defval = 2015, title = "From Year", minval = 2017)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear = input(defval = 9999, title = "To Year", minval = 2017)
// === FUNCTION EXAMPLE ===
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window
window() => true // create function "within window of time"
// Orders
// --------------------
if longCondition
strategy.entry("Buy", strategy.long, when=window())
if buyexitsignal
strategy.close("Buy")
if shortCondition
strategy.entry("Sell", strategy.short, when=window())
if sellexitsignal
strategy.close("Sell")