
Quantitative Elasticity is a combination strategy using Stochastic and OTT indicators. Strategi ini menggunakan Stochastic untuk menghasilkan sinyal beli dan jual, dan OTT untuk memfilter sinyal, untuk mencoba menangkap tren besar dan mengurangi dampak dari sinyal palsu yang disebabkan oleh pergerakan pasar.
Gagasan inti dari strategi ini adalah untuk memfilter sinyal dari indikator OTT yang dilapisi pada indikator Stokastik. Indikator Stokastik membandingkan harga dengan harga tertinggi dan terendah dalam periode waktu yang ditentukan untuk menentukan apakah harga berada di daerah ekstrem. Indikator OTT menggunakan rata-rata bergerak dan stop loss dinamis untuk melacak tren.
Kode yang disetel Stochastic tinggi adalah 1080, rendah adalah 1020, dan Stochastic rata-rata adalah rentang rata-rata di antara keduanya. Ketika Stochastic menghasilkan sinyal beli / jual, kode akan menilai efektivitas sinyal berdasarkan indikator OTT. Jika harga melintasi rata-rata OTT ke atas, sinyal beli dikirim, dan jika harga melintasi rata-rata OTT ke bawah, sinyal jual dikirim.
Kombinasi ini menggunakan Stochastic untuk menilai overbought dan oversold dan mengirim sinyal masuk, OTT bertanggung jawab untuk melacak tren, memanfaatkan sinyal palsu yang disebabkan oleh penyaringan stop loss yang terlalu kuat untuk mematikan tren getaran, sehingga mengoptimalkan akurasi dan volatilitas sinyal.
Strategi ini memanfaatkan kombinasi indikator Stochastic dan OTT untuk mengoptimalkan beberapa hal berikut:
Secara keseluruhan, strategi ini secara efektif meningkatkan kualitas sinyal dan keuntungan strategi dengan menggunakan OTT untuk memfilter sinyal stochastic, sementara mengurangi jumlah transaksi dan volatilitas strategi, mencapai efek mendekati tren, risiko rendah, dan keuntungan tinggi.
Untuk mengatasi risiko-risiko tersebut, langkah-langkah berikut dapat dilakukan:
Strategi ini dapat dioptimalkan dalam beberapa hal:
Sesuaikan parameter sesuai dengan pasar dan kategori saham yang berbeda. Nilai default sekarang adalah universal, dan Anda dapat menguji masing-masing saham untuk menemukan kombinasi parameter yang optimal.
Memperkenalkan mekanisme stop loss dan stop loss bergerak. Saat ini digunakan stop loss tetap yang dinamis, tidak dapat secara dinamis melacak kerugian dan keuntungan. Dapat diuji untuk memperkenalkan stop loss dan stop loss bergerak untuk mengontrol lebih lanjut strategi risiko dan keuntungan.
Logika penilaian sinyal yang dioptimalkan. Logika penilaian saat ini lebih sederhana, dengan harga yang naik turun langsung menandai sinyal beli dan jual. Dapat dipertimbangkan untuk menggabungkan lebih banyak indikator dan penilaian bentuk harga untuk memastikan keandalan sinyal.
Menambahkan kondisi pembukaan posisi dan mekanisme penyaringan. Strategi saat ini menangani setiap sinyal tanpa perbedaan. Dapat memperkenalkan kondisi pembukaan posisi seperti indikator kuantitatif, indikator volume transaksi, dan menambahkan jendela waktu sinyal tertentu untuk menyingkirkan sinyal palsu.
Untuk menguji kombinasi antara berbagai indikator dengan OTT. Saat ini, kombinasi antara Stochastic dan OTT digunakan. Indikator lain seperti MACD, RSI, dan lain-lain dapat diuji.
Modul pengelolaan dana dan manajemen posisi yang terintegrasi. Tidak ada mekanisme pengelolaan dana dan pengendalian posisi saat ini, sepenuhnya bergantung pada stop loss.
Glitter of Quantification adalah strategi kuantitatif yang secara organik menggabungkan indikator Stochastic dan OTT. Ini memanfaatkan keunggulan yang saling melengkapi dari kedua indikator, meningkatkan akurasi sinyal, dan secara efektif menangkap tren besar sekaligus mengurangi risiko.
Strategi ini memiliki keuntungan dari tingkat kesalahan yang rendah, sinyal yang jelas, dan volatilitas yang kecil. Ini meningkatkan keandalan sinyal, mengoptimalkan tingkat stop loss, mengurangi frekuensi perdagangan, dan merupakan strategi kuantitatif yang disarankan.
Pada saat yang sama, strategi ini juga memiliki ruang untuk perbaikan. Dengan cara mengoptimalkan parameter, memperbaiki mekanisme stop loss, dan meningkatkan mekanisme sinyal dan penyaringan, strategi ini dapat dikembangkan ke arah yang lebih stabil, otomatis, dan cerdas, yang merupakan tujuan pekerjaan 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())