Indikator Botvenko Adaptif Strategi Pendek Panjang

Penulis:ChaoZhang, Tanggal: 2024-01-04 16:09:30
Tag:

img

Gambaran umum

Strategi ini dikembangkan berdasarkan indikator Botvenko untuk secara otomatis mengidentifikasi tren pasar dan menetapkan posisi panjang/pendek.

Prinsip Strategi

Indikator inti dari strategi ini adalah indikator Botvenko. Dengan menghitung perbedaan logaritma antara harga penutupan pada hari perdagangan yang berbeda, ia menilai tren pasar dan level support/resistance yang penting.

Selain itu, strategi ini mengintegrasikan EMA Protection Belt yang terdiri dari rata-rata bergerak 21 hari, 55 hari dan lainnya.

Dengan mengidentifikasi sinyal perdagangan dengan indikator Botvenko dan menilai tahap pasar dengan rata-rata bergerak, pembentukan posisi yang tidak tepat dapat dihindari ketika digunakan dalam kombinasi.

Analisis Keuntungan

Keuntungan terbesar dari strategi ini adalah bahwa ia dapat secara otomatis mengidentifikasi tren panjang/pendek pasar. Indikator Botvenko sangat sensitif terhadap perbedaan antara harga selama dua periode waktu dan dapat dengan cepat menemukan level support/resistance utama. Pada saat yang sama, pengelompokan rata-rata bergerak dapat secara efektif menilai apakah saat ini lebih baik untuk menjadi panjang atau pendek.

Ide menggabungkan indikator cepat dan indikator tren memungkinkan strategi untuk dengan cepat menemukan titik masuk dan keluar sambil mencegah pembelian dan penjualan yang tidak tepat.

Analisis Risiko

Risiko dari strategi ini terutama berasal dari dua aspek. Pertama, indikator Botvenko itu sendiri sangat sensitif terhadap perubahan harga, yang dapat menghasilkan banyak sinyal perdagangan yang tidak perlu. Kedua, pengelompokan rata-rata bergerak dapat menjadi berantakan selama pergerakan samping, yang mengarah pada pembentukan posisi yang berantakan.

Untuk mengatasi risiko pertama, parameter indikator Botvenko dapat disesuaikan untuk memperpanjang siklus perhitungan dan mengurangi perdagangan yang tidak perlu. Untuk risiko kedua, lebih banyak moving average dapat ditambahkan untuk membuat penilaian tren lebih akurat.

Arahan Optimasi

Arah pengoptimalan utama adalah penyesuaian parameter dan penambahan kondisi filter.

Untuk indikator Botvenko, parameter periode yang berbeda dapat dicoba untuk menemukan kombinasi yang optimal. Untuk moving average, lebih banyak dari mereka dapat ditambahkan untuk membentuk sistem penilaian tren yang lebih lengkap. Selain itu, indikator volatilitas, indikator volume perdagangan dll juga dapat diperkenalkan untuk menyaring sinyal palsu.

Melalui penyesuaian komprehensif parameter dan kondisi filter, stabilitas dan profitabilitas strategi dapat ditingkatkan lebih lanjut.

Ringkasan

Strategi adaptatif Botvenko long/short berhasil menggabungkan indikator cepat dan tren untuk secara otomatis mengidentifikasi titik pasar kunci dan menetapkan posisi yang benar. Keuntungannya terletak pada lokasi cepat dan pencegahan posisi yang tidak tepat. Langkah selanjutnya adalah untuk meningkatkan stabilitas dan profitabilitas melalui optimasi parameter dan kondisi.


/*backtest
start: 2023-12-27 00:00:00
end: 2024-01-03 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © boftei

//@version=5

strategy("Boftei's Strategy", overlay=false, pyramiding=1, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, margin_long = 100, margin_short = 100, slippage=0, commission_type=strategy.commission.percent, commission_value = 0, initial_capital = 40, precision = 6)
strat_dir_input = input.string("all", "strategy direction", options=["long", "short", "all"])
strat_dir_value = strat_dir_input == "long" ? strategy.direction.long : strat_dir_input == "short" ? strategy.direction.short : strategy.direction.all
strategy.risk.allow_entry_in(strat_dir_value)
//////////////////////////////////////////////////////////////////////
//DATA
testStartYear = input(2005, "Backtest Start Year")
testStartMonth = input(7, "Backtest Start Month")
testStartDay = input(16, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
//Stop date if you want to use a specific range of dates
testStopYear = input(2030, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)


testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
//////////////////////////////////////////////////////////////////////
sell = input.float(0.0065, "sell level")
buy = input.float(0, "buy level")
long1 = input.float(-0.493, "long retry - too low")
long2 = input.float(2, "long close up")
long3 = input.float(-1.5, "long close down")
short1 = input.float(1.26, "short retry - too high")
short2 = input.float(-5, "dead - close the short")
///< botvenko script
nn = input(60, "Histogram Period")
float x = 0
float z = 0
float k = 0



y = math.log(close[0]) - math.log(close[nn])
if y>0
    x := y
else
    k := y
//---------------------------------------------
        
plot(y > 0 ? x: 0, color = color.green, linewidth = 4)
plot(y <= 0 ? k: 0, color = color.maroon, linewidth = 4)
plot(y, color = color.yellow, linewidth = 1)

co = ta.crossover(y, buy)
cu = ta.crossunder(y, sell)
retry_long = ta.crossunder(y, long1)
deadline_long_up = ta.crossover(y, long2)
deadline_long_down = ta.crossunder(y, long3)
retry_short = ta.crossover(y, short1)
deadline_short = ta.crossunder(y, short2)


hline(buy, title='buy', color=color.green, linestyle=hline.style_dotted, linewidth=2)
hline(0, title='zero', color=color.white, linestyle=hline.style_dotted, linewidth=1)
hline(sell, title='sell', color=color.red, linestyle=hline.style_dotted, linewidth=2)
hline(long1, title='long retry', color=color.blue, linestyle=hline.style_dotted, linewidth=2)
hline(long2, title='overbought', color=color.teal, linestyle=hline.style_dotted, linewidth=2)
hline(long3, title='oversold', color=color.maroon, linestyle=hline.style_dotted, linewidth=2)
hline(short1, title='short retry', color=color.purple, linestyle=hline.style_dotted, linewidth=2)
hline(short2, title='too low to short - an asset may die', color=color.navy, linestyle=hline.style_dotted, linewidth=2)


////////////////////////////////////////////////////////////EMAprotectionBLOCK
ema_21 = ta.ema(close, 21)
ema_55 = ta.ema(close, 55)
ema_89 = ta.ema(close, 89)
ema_144 = ta.ema(close, 144)
//ema_233 = ta.ema(close, 233)
// ema_377 = ta.ema(close, 377)

long_st = ema_21>ema_55 and ema_55>ema_89 and ema_89>ema_144 //and ema_144>ema_233 and ema_233>ema_377
short_st = ema_21<ema_55 and ema_55<ema_89 and ema_89<ema_144 //and ema_144<ema_233 and ema_233<ema_377 

g_v = long_st == true?3:0
r_v = short_st == true?-2:0
y_v = long_st != true and short_st != true?2:0

plot(math.log(ema_21), color = color.new(#ffaf5e, 50))
plot(math.log(ema_55), color = color.new(#b9ff5e, 50))
plot(math.log(ema_89), color = color.new(#5eff81, 50))
plot(math.log(ema_144), color = color.new(#5effe4, 50))
//plot(math.log(ema_233), color = color.new(#5e9fff, 50))
//plot(math.log(ema_377), color = color.new(#af5eff, 50))

plot(long_st == true?3:0, color = color.new(color.green, 65), linewidth = 5)
plot(short_st == true?-2:0, color = color.new(color.red, 65), linewidth = 5)
plot(long_st != true and short_st != true?2:0, color = color.new(color.yellow, 65), linewidth = 5)
////////////////////////////////////////////////////////////EMAprotectionBLOCK




if (co and testPeriod() and (g_v == 3 or y_v == 2))
    strategy.close("OH BRO", comment = "EXIT-SHORT")
    strategy.close("OH DUDE", comment = "EXIT-SHORT")
	strategy.entry("OH DAMN", strategy.long, comment="ENTER-LONG 'co'")
if (retry_long and testPeriod() and (g_v == 3 or y_v == 2))
    strategy.close("OH DAMN", comment = "EXIT-LONG")
    strategy.entry("OH BRUH", strategy.long, comment="ENTER-LONG 'retry_long'")
	
if (cu and testPeriod() and (r_v == -2 or y_v == 2))
    strategy.close("OH DAMN", comment = "EXIT-LONG")
    strategy.close("OH BRUH", comment = "EXIT-LONG")
	strategy.entry("OH BRO", strategy.short, comment="ENTER-SHORT 'cu'")
if (retry_short and testPeriod() and (r_v == -2 or y_v == 2))
    strategy.close("OH BRO", comment = "EXIT-SHORT")
    strategy.entry("OH DUDE", strategy.short, comment="ENTER-SHORT 'retry_short'")
	
    
if (deadline_long_up and testPeriod() or r_v == -2 and testPeriod())
    strategy.close("OH DAMN", comment = "EXIT-LONG 'deadline_long_up'")
if (deadline_long_down and testPeriod())
    strategy.close("OH DAMN", comment = "EXIT-LONG 'deadline_long_down'")
if (deadline_short and testPeriod() or g_v == 3 and testPeriod())
    strategy.close("OH BRO", comment = "EXIT-SHORT 'deadline_short'")
    // (you can use strategy.close_all(comment = "close all entries") here)



Lebih banyak