Quant Lights adalah strategi gabungan menggunakan penunjuk Stochastic dan penunjuk OTT. Strategi ini menggunakan penunjuk Stochastic untuk menjana isyarat beli dan jual, dan menggabungkannya dengan penunjuk OTT untuk menapis isyarat, cuba menangkap trend besar dan mengurangkan kesan turun naik pasaran yang menyebabkan isyarat palsu.
Idea utama strategi ini adalah untuk menumpuk penunjuk OTT pada penunjuk Stochastic untuk penapisan isyarat. Penunjuk Stochastic membandingkan harga dengan harga tertinggi dan terendah dalam tempoh masa yang ditentukan untuk menilai sama ada harga berada di kawasan yang melampau.
Kod ini menetapkan tahap tinggi Stochastic pada 1080 dan tahap rendah pada 1020. Apabila nilai Stochastic berada di antara mereka, ia adalah kawasan terhad. Apabila Stochastic menghasilkan isyarat beli / jual, kod ini akan menentukan kesahihan isyarat berdasarkan penunjuk OTT. Jika harga melintasi di atas garis purata OTT, isyarat beli dikeluarkan. Jika harga melintasi di bawah garis purata OTT, isyarat jual dikeluarkan.
Gabungan ini memanfaatkan Stochastic untuk menentukan keadaan overbought dan oversold dan menjana isyarat kemasukan, sementara OTT bertanggungjawab untuk mengesan trend dan menggunakan berhenti untuk menapis isyarat palsu yang disebabkan oleh turun naik pasaran yang berlebihan, dengan itu mengoptimumkan ketepatan isyarat dan turun naik.
Strategi ini menggabungkan penunjuk Stochastic dan OTT untuk mengoptimumkan aspek berikut:
Ringkasnya, dengan menggunakan OTT untuk menapis isyarat Stochastic, strategi secara berkesan meningkatkan kualiti isyarat dan pulangan pelaburan, sambil mengurangkan bilangan transaksi dan turun naik strategi, mencapai kesan risiko rendah, pulangan tinggi dan mengesan tren dengan teliti.
Mengenai risiko di atas, langkah-langkah berikut boleh diambil untuk memperbaiki:
Strategi ini boleh dioptimumkan lagi dalam aspek berikut:
Sesuaikan tetapan parameter mengikut pasaran dan jenis stok yang berbeza. Nilai lalai semasa adalah sejagat dan boleh diuji secara berasingan untuk stok yang berbeza untuk mencari kombinasi parameter yang optimum.
Memperkenalkan mekanisme mengambil keuntungan dan berhenti bergerak. Pada masa ini menggunakan berhenti tetap dinamik tidak dapat menjejaki kerugian dan keuntungan secara dinamik. Ujian pengenalan berhenti bergerak dan mengambil keuntungan untuk kawalan risiko dan keuntungan yang lebih lanjut boleh dijalankan.
Mengoptimumkan logik penghakiman isyarat. Logik penghakiman semasa agak mudah, secara langsung menandakan isyarat beli dan jual apabila harga pecah atau turun. Lebih banyak penunjuk dan corak harga boleh dimasukkan untuk memastikan kebolehpercayaan isyarat.
Meningkatkan keadaan kedudukan terbuka dan mekanisme penapisan. Strategi semasa memproses setiap isyarat secara tidak berasingan. Penunjuk jumlah, penunjuk jumlah dagangan dan keadaan kedudukan terbuka yang lain boleh diperkenalkan, serta tetingkap masa isyarat tertentu untuk menapis isyarat palsu.
Uji kombinasi penunjuk yang berbeza dengan OTT. Pada masa ini menggunakan gabungan Stochastic dan OTT. Keberkesanan menggabungkan penunjuk lain seperti MACD dan RSI dengan OTT boleh diuji.
Mengintegrasikan modul pengurusan modal dan saiz kedudukan. Pada masa ini tidak ada mekanisme pengurusan modal dan kawalan kedudukan, bergantung sepenuhnya pada henti. Pelbagai jenis pengurusan modal dan kaedah ukuran kedudukan boleh diuji untuk mengawal risiko tunggal dan keseluruhan.
Quant Lights adalah strategi kuantitatif yang secara organik menggabungkan penunjuk Stochastic dengan penunjuk OTT. Ia menggunakan kekuatan pelengkap kedua-dua penunjuk untuk meningkatkan ketepatan isyarat dan dengan berkesan menangkap trend utama sambil mengurangkan risiko.
Kelebihan strategi ini termasuk kadar ralat yang rendah, isyarat yang jelas, dan turun naik yang kecil.
Pada masa yang sama, masih ada ruang untuk penambahbaikan dalam strategi ini. Melalui pengoptimuman parameter, penambahbaikan mekanisme berhenti, peningkatan isyarat dan mekanisme penapisan, dan lain-lain, strategi ini boleh berkembang ke arah arah yang lebih stabil, automatik dan pintar. Ini juga merupakan matlamat kerja susulan kami.
/*backtest start: 2023-12-27 00:00:00 end: 2024-01-03 00:00:00 period: 3m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © KivancOzbilgic //created by: @Anil_Ozeksi //developer: ANIL ÖZEKŞİ //author: @kivancozbilgic strategy(title="Stochastic Optimized Trend Tracker", shorttitle="SOTT", format=format.price, precision=2) periodK = input(250, title="%K Length", minval=1) smoothK = input(50, title="%K Smoothing", minval=1) src1 = input(close, title="Source") length=input(3, "OTT Period", minval=1) percent=input(0.618, "OTT Percent", type=input.float, step=0.1, minval=0) showsupport = input(title="Show Support Line?", type=input.bool, defval=false) showsignalsc = input(title="Show Stochastic/OTT Crossing Signals?", type=input.bool, defval=false) Var_Func1(src1,length)=> valpha1=2/(length+1) vud11=src1>src1[1] ? src1-src1[1] : 0 vdd11=src1<src1[1] ? src1[1]-src1 : 0 vUD1=sum(vud11,9) vDD1=sum(vdd11,9) vCMO1=nz((vUD1-vDD1)/(vUD1+vDD1)) VAR1=0.0 VAR1:=nz(valpha1*abs(vCMO1)*src1)+(1-valpha1*abs(vCMO1))*nz(VAR1[1]) VAR1=Var_Func1(src1,length) k = Var_Func1(stoch(close, high, low, periodK), smoothK) src=k+1000 Var_Func(src,length)=> valpha=2/(length+1) vud1=src>src[1] ? src-src[1] : 0 vdd1=src<src[1] ? src[1]-src : 0 vUD=sum(vud1,9) vDD=sum(vdd1,9) vCMO=nz((vUD-vDD)/(vUD+vDD)) VAR=0.0 VAR:=nz(valpha*abs(vCMO)*src)+(1-valpha*abs(vCMO))*nz(VAR[1]) VAR=Var_Func(src,length) h0 = hline(1080, "Upper Band", color=#606060) h1 = hline(1020, "Lower Band", color=#606060) fill(h0, h1, color=#9915FF, transp=80, title="Background") plot(k+1000, title="%K", color=#0094FF) MAvg=Var_Func(src, length) fark=MAvg*percent*0.01 longStop = MAvg - fark longStopPrev = nz(longStop[1], longStop) longStop := MAvg > longStopPrev ? max(longStop, longStopPrev) : longStop shortStop = MAvg + fark shortStopPrev = nz(shortStop[1], shortStop) shortStop := MAvg < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop dir = 1 dir := nz(dir[1], dir) dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir MT = dir==1 ? longStop: shortStop OTT=MAvg>MT ? MT*(200+percent)/200 : MT*(200-percent)/200 plot(showsupport ? MAvg : na, color=#0585E1, linewidth=2, title="Support Line") OTTC = #B800D9 pALL=plot(nz(OTT[2]), color=OTTC, linewidth=2, title="OTT", transp=0) alertcondition(cross(src, OTT[2]), title="Price Cross Alert", message="OTT - Price Crossing!") alertcondition(crossover(src, OTT[2]), title="Price Crossover Alarm", message="PRICE OVER OTT - BUY SIGNAL!") alertcondition(crossunder(src, OTT[2]), title="Price Crossunder Alarm", message="PRICE UNDER OTT - SELL SIGNAL!") buySignalc = crossover(src, OTT[2]) plotshape(buySignalc and showsignalsc ? OTT*0.995 : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0) sellSignallc = crossunder(src, OTT[2]) plotshape(sellSignallc and showsignalsc ? OTT*1.005 : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0) dummy0 = input(true, title = "=Backtest Inputs=") FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromYear = input(defval = 2005, title = "From Year", minval = 2005) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToYear = input(defval = 9999, title = "To Year", minval = 2006) Start = timestamp(FromYear, FromMonth, FromDay, 00, 00) Finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) Timerange() => time >= Start and time <= Finish ? true : false if buySignalc strategy.entry("Long", strategy.long,when=Timerange()) if sellSignallc strategy.entry("Short", strategy.short,when=Timerange())