Esta es una mejora de la estrategia de vector normalizado escalado de drkhodakarami, principalmente añadiendo funciones de activación para mejorar el rendimiento de la estrategia. La estrategia calcula la tasa de cambio en el mercado en función de las diferencias de marco de tiempo, y determina señales largas y cortas basadas en valores de umbral. Mientras tanto, se introducen funciones de activación de swish, ReLU y paso para suavizar la secuencia diferencial y mejorar la precisión del juicio de la señal.
Soluciones:
Basado en el trabajo de drkhodakarami, esta estrategia introduce funciones de activación para mejorar el rendimiento. La personalización de parámetros ampliada se adapta mejor a los cambios del mercado. Mientras tanto, la excelente visualización presenta intuitivamente oportunidades comerciales. Los próximos pasos son optimizar aún más las funciones de activación y la configuración de umbral, incorporar lógica de stop loss y más filtración de señales para lograr una eficacia de estrategia aún mejor.
/*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)