
এই কৌশলটি drkhodakarami এর স্কেল একীভূত ভেক্টর কৌশলটির একটি উন্নতি, মূলত কৌশলটির কার্যকারিতা উন্নত করার জন্য একটি অ্যাক্টিভেশন ফাংশন যুক্ত করা হয়েছে। কৌশলটি সময় অক্ষের পার্থক্য ব্যবহার করে বাজারের পরিবর্তনের হার গণনা করে এবং হ্রাসের বিচার করে আরও খালি সংকেত দেয়। একই সাথে, কৌশলটি সুইচ, রিএলইউ এবং ধাপের অ্যাক্টিভেশন ফাংশন প্রবর্তন করে, যা বিভেদ সিকোয়েন্সকে সমতল করে, সংকেত বিচারের নির্ভুলতা উন্নত করে।
সমাধানঃ
এই কৌশলটি drkhodakarami এর উপর ভিত্তি করে, সক্রিয়করণ ফাংশনটি পারফরম্যান্স বাড়ানোর জন্য প্রবর্তন করা হয়েছে, প্যারামিটার অপ্টিমাইজেশান স্পেসের সম্প্রসারণের মাধ্যমে বাজারের পরিবর্তনের সাথে আরও ভালভাবে খাপ খাইয়ে নেওয়া যায়। একই সাথে, এটি একটি দুর্দান্ত ভিজ্যুয়াল ডিজাইন যা ট্রেডিংয়ের সুযোগকে স্বজ্ঞাতভাবে প্রতিফলিত করে। পরবর্তী সময়ে সক্রিয়করণ ফাংশনটি এবং থ্রেশহোল্ড সেটিংটি অপ্টিমাইজ করা যেতে পারে এবং স্টপ লজিক এবং আরও সংকেত ফিল্টারিং যুক্ত করা যেতে পারে, যা আরও ভাল কৌশলগত প্রভাব অর্জন করতে পারে।
/*backtest
start: 2023-01-15 00:00:00
end: 2024-01-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
// author: capissimo
strategy("Scaled Normalized Vector Strategy, ver.4", precision=2, overlay=false)
// This is a modification of my Scaled Normalized Vector Strategy
// original: Drkhodakarami (https://www.tradingview.com/script/Fxv2xFWe-Normalized-Vector-Strategy-By-Drkhodakarami-Opensource/)
price = input(close, "Price Data")
tf = input(18, "Timeframe", minval=1, maxval=1440)
thresh = input(14., "Threshold", minval=.1, step=.1)
div = input(1000000,"Divisor", options=[1,10,100,1000,10000,100000,1000000,10000000,100000000])
mmx = input(233, "Minimax Lookback", options=[1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584])
showVol = input(false, "Volume")
useold = input(true, "Use Old System")
method = input("Swish", "Activation", options=["Step", "LReLU", "Swish", "None"])
scaleMinimax(X, p, min, max) =>
hi = highest(X, p), lo = lowest(X, p)
(max - min) * (X - lo)/(hi - lo) + min
getdiff(prc, tf) =>
prev = scaleMinimax((useold ? security(syminfo.tickerid, tostring(tf), prc[1], barmerge.gaps_off, barmerge.lookahead_on)
: security(syminfo.tickerid, tostring(tf), prc[1])), tf, 0, 1)
curr = scaleMinimax((useold ? security(syminfo.tickerid, tostring(tf), hlc3, barmerge.gaps_off, barmerge.lookahead_on)
: security(syminfo.tickerid, tostring(tf), hlc3)), tf, 0, 1)
(curr/prev) - 1
relu(x) => max(x, 0)
lrelu(x, alpha) => relu(x) - alpha * relu(-x)
step(x) => x >= 0 ? 1 : -1
log2(x) => log(x) / log(2)
sigmoid(x) => 1 / (1 + exp(-x))
swish(x) => x * sigmoid(x)
f(m) => method==m
vol = useold ? security(syminfo.tickerid, tostring(tf), volume, barmerge.gaps_off, barmerge.lookahead_on)
: security(syminfo.tickerid, tostring(tf), volume)
obv = cum(change(price) > 0 ? vol : change(price) < 0 ? -vol : 0*vol)
prix = showVol ? obv : price
x = getdiff(prix, tf)
p = f("Swish") ? swish(x) : f("Step") ? step(x) : f("LReLU") ? lrelu(x, .8) : x
th = thresh/div
long = crossover(p, th)
short= crossunder(p, -th)
lime = color.new(color.lime, 10), fuchsia = color.new(color.fuchsia, 10),
black = color.new(color.black, 100), gray = color.new(color.gray, 50)
bg = long ? lime : short ? fuchsia : black
cl = p > th ? color.green : p < -th ? color.red : color.silver
bgcolor(bg, editable=false)
plot(scaleMinimax(th, mmx, -1, 1), color=lime, editable=false, transp=0)
hline(0, linestyle=hline.style_dotted, title="base line", color=gray, editable=false)
plot(scaleMinimax(-th, mmx, -1, 1), color=fuchsia, editable=false, transp=0)
plot(scaleMinimax(p, mmx, -1, 1), color=cl, style=plot.style_histogram, transp=70, editable=false)
plot(scaleMinimax(p, mmx, -1, 1), color=cl, style=plot.style_linebr, title="prediction", transp=0, editable=false)
strategy.entry("L", true, 1, when=long)
strategy.entry("S", false, 1, when=short)
alertcondition(long, title='Long', message='Long Signal!')
alertcondition(short, title='Short', message='Short Signal!')
//*** Karobein Oscillator
per = input(8, "Karobein Osc Lookback")
prix2 = ema(price, per)
a = ema(prix2 < prix2[1] ? prix2/prix2[1] : 0, per)
b = ema(prix2 > prix2[1] ? prix2/prix2[1] : 0, per)
c = (prix2/prix2[1])/(prix2/prix2[1] + b)
d = 2*((prix2/prix2[1])/(prix2/prix2[1] + c*a)) - 1
plot(scaleMinimax(d, mmx, -1, 1), color=color.orange, transp=0)