
Lampu Kuantiti adalah strategi gabungan yang menggunakan indikator Stochastic dan indikator OTT. Strategi ini menggunakan indikator Stochastic untuk menghasilkan isyarat beli dan jual, dan digabungkan dengan indikator OTT untuk memfilter isyarat, cuba menangkap trend besar dan mengurangkan kesan isyarat palsu yang disebabkan oleh kejutan pasaran.
Idea utama strategi ini adalah penapis isyarat OTT yang diletakkan di atas indikator Stochastic. Indikator Stochastic membandingkan harga dengan harga tertinggi dan terendah dalam tempoh masa yang ditetapkan untuk menentukan sama ada harga berada di kawasan yang melampau. Indikator OTT menggunakan purata bergerak dan stop loss dinamik untuk mengesan trend.
Kod ini menetapkan Stochastic dengan ketinggian 1080, ketinggian 1020, dan rata-rata Stochastic untuk jangka masa yang seimbang. Apabila Stochastic menghasilkan isyarat beli / jual, kod akan menilai keberkesanan isyarat berdasarkan indikator OTT. Jika harga melintasi rata-rata OTT ke atas, isyarat beli akan dihantar, dan jika harga melintasi rata-rata OTT ke bawah, isyarat jual akan dihantar.
Kombinasi ini menggunakan Stochastic untuk menilai overbought dan oversold dan menghantar isyarat masuk, OTT bertanggungjawab untuk mengesan trend, menggunakan penapis kerugian untuk memadamkan isyarat palsu yang disebabkan oleh keadaan gegaran yang terlalu kuat, dan dengan itu mengoptimumkan ketepatan dan turun naik isyarat.
Strategi ini menggunakan gabungan Stochastic dan OTT untuk mengoptimumkan:
Secara keseluruhannya, strategi ini telah meningkatkan kualiti isyarat dan keuntungan strategi dengan menggunakan OTT untuk menyaring isyarat Stochastic, dan pada masa yang sama mengurangkan jumlah dagangan dan turun naik strategi, mencapai kesan berhampiran dengan trend, risiko rendah dan keuntungan tinggi.
Langkah-langkah yang boleh diambil untuk mengatasi risiko tersebut ialah:
Strategi ini boleh dioptimumkan dengan lebih mendalam dalam beberapa aspek:
Tetapkan parameter untuk menyesuaikan dengan pasaran dan kategori saham yang berbeza. Nilai lalai sekarang adalah umum, dan anda boleh menguji kombinasi parameter yang optimum untuk saham yang berbeza.
Pengenalan mekanisme hentian dan hentian bergerak. Hentian tetap yang dinamik digunakan sekarang, tidak dapat secara dinamik mengesan kerugian dan keuntungan. Pengenalan hentian dan hentian bergerak boleh diuji untuk mengawal risiko keuntungan strategi lebih lanjut.
Logik penghakiman isyarat yang dioptimumkan. Logik penghakiman yang lebih mudah sekarang adalah untuk menandai secara langsung tanda-tanda pembelian dan penjualan yang menembusi harga. Anda boleh mempertimbangkan untuk menggabungkan lebih banyak petunjuk dan penghakiman bentuk harga untuk memastikan kebolehpercayaan isyarat.
Menambah syarat-syarat pembukaan dan mekanisme penapisan. Strategi sekarang untuk setiap isyarat yang tidak membezakan. Anda boleh memperkenalkan syarat pembukaan seperti penunjuk kuantiti, penunjuk kuantiti, dan menambah tingkap masa isyarat tertentu untuk membasmi isyarat palsu.
Uji penggabungan pelbagai petunjuk dengan OTT. Kini, gabungan Stochastic dan OTT digunakan. Indikator lain seperti MACD, RSI dan lain-lain boleh menguji keserasian OTT.
Modul pengurusan dana dan pengurusan kedudukan yang bersepadu. Tidak ada mekanisme pengurusan dana dan kawalan kedudukan sekarang, bergantung sepenuhnya pada hentian. Anda boleh menguji pelbagai jenis pengurusan dana dan kaedah pengurusan kedudukan untuk mengawal risiko tunggal dan keseluruhan.
Lampu Kuantitatif adalah strategi kuantitatif yang menggabungkan secara organik Stochastic dengan penunjuk OTT. Ia menggunakan kelebihan kedua-dua penunjuk yang saling melengkapi, meningkatkan ketepatan isyarat, dan menangkap trend besar dengan berkesan sambil mengurangkan risiko.
Strategi ini mempunyai kelebihan yang rendah kesilapan, isyarat yang jelas, kadar turun naik yang kecil. Ia meningkatkan kebolehpercayaan isyarat, mengoptimumkan tahap stop loss, mengurangkan frekuensi perdagangan, dan merupakan strategi kuantitatif yang disyorkan.
Pada masa yang sama, strategi ini juga mempunyai ruang untuk penambahbaikan. Dengan cara seperti pengoptimuman parameter, penyempurnaan mekanisme hentikan kerosakan, peningkatan mekanisme isyarat dan penapisan, strategi ini dapat berkembang ke arah yang lebih stabil, automatik dan pintar, yang juga merupakan matlamat kerja kami selanjutnya.
/*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())