Joker Mengikuti mengambil keuntungan Strategi

Penulis:ChaoZhang, Tanggal: 23 September 2023 15:04:20
Tag:

Gambaran umum

Strategi Joker Trailing Take Profit adalah strategi mengikuti tren berdasarkan moving average. Strategi ini menggabungkan fitur trailing stop loss dan trailing take profit untuk memaksimalkan keuntungan ketika pasar bergerak ke arah yang menguntungkan, sementara memotong kerugian ketika tren berbalik.

Logika Strategi

Strategi ini menggunakan rata-rata bergerak cepat dan lambat untuk mengidentifikasi tren keseluruhan.

Strategi ini pertama-tama menghitung harga take profit awal berdasarkan persentase yang dikonfigurasi setelah membuka posisi. Jika trailing take profit diaktifkan, strategi ini menghitung langkah trailing berdasarkan ukuran tik minimum simbol dan persentase trailing yang dikonfigurasi.

Ketika arah posisi sesuai dengan sinyal, pesanan batas digunakan untuk mengambil keuntungan jika trailing dinonaktifkan. Jika trailing diaktifkan, harga take profit ditarik berdasarkan ukuran langkah.

Analisis Keuntungan

  • Rata-rata bergerak menyaring kebisingan pasar dan menghindari sinyal palsu.

  • Trailing take profit menyesuaikan tingkat take profit secara dinamis berdasarkan aksi harga.

  • Mengikuti mengambil keuntungan mengunci lebih banyak keuntungan dan mengurangi kesempatan untuk memberikan kembali keuntungan.

  • Fungsi stop loss memungkinkan strategi untuk keluar lebih awal ketika tren berbalik.

Analisis Risiko

  • Moving averages dapat menghasilkan sinyal palsu atau lag selama perubahan harga yang besar. Ini dapat menyebabkan kerugian dari perdagangan yang salah. Optimasi parameter MA dan menambahkan filter dapat membantu.

  • Rasio take profit yang terlalu tinggi meningkatkan periode kepemilikan dan penyimpangan antara harga take profit yang sebenarnya dan yang diharapkan.

  • Sebuah langkah set trailing terlalu kecil menyebabkan pembaruan order yang berlebihan dan meningkatkan biaya dan slippage.

  • Trailing TP hanya bergerak ke atas dan tidak mempertimbangkan drawdown. Hal ini dapat menyebabkan penyimpangan antara harga take profit aktual dan yang diharapkan.

Arahan Optimasi

  • Pertimbangkan penyesuaian dinamis parameter MA berdasarkan volatilitas. periode yang lebih panjang ketika volatilitas meningkat dan periode yang lebih kecil ketika volatilitas turun.

  • Penelitian optimal mengambil rasio keuntungan untuk produk dan pasar yang berbeda untuk meminimalkan risiko penyimpangan.

  • Jelajahi mekanisme trailing dua arah untuk melacak naik dan turun.

  • Menggabungkan indikator kekuatan tren untuk mengurangi rasio mengambil keuntungan dalam tren lemah dan meningkatkan rasio dalam tren kuat.

  • Gabungkan dengan model pembelajaran mesin untuk mengatur rasio keuntungan secara dinamis berdasarkan rentang harga yang diprediksi.

Kesimpulan

Strategi Joker Trailing Take Profit memiliki struktur yang jelas dan menggunakan moving average untuk menentukan arah tren dan trailing untuk mengunci keuntungan. Ini menggabungkan keuntungan dari trailing stop dan trailing take profit untuk mengikuti tren dengan lancar sambil mengendalikan risiko. Perbaikan lebih lanjut dapat dilakukan melalui optimasi parameter dan meningkatkan mekanisme take profit untuk beradaptasi dengan lingkungan pasar yang lebih kompleks. Secara keseluruhan, ini adalah strategi yang layak penelitian dan aplikasi lebih lanjut.


/*backtest
start: 2023-08-23 00:00:00
end: 2023-09-22 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title='Joker Trailing TP Bot', shorttitle='Joker TTP Bot', overlay=true, pyramiding=0, process_orders_on_close=false, close_entries_rule='ANY', calc_on_every_tick=false, calc_on_order_fills=false, commission_type=strategy.commission.percent, commission_value=0.07, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=1000, currency=currency.USD) //, max_labels_count=500)

fromDate = input(timestamp('01 Jan 2021 00:00 UTC'), 'From Date')
toDate = input(timestamp('31 Dec 2121 23:59 UTC'), 'To Date')
fastMALen = input.int(23, 'Fast SMA Length')
slowMALen = input.int(50, 'Slow SMA Length')
longTakeProfitPerc = input.float(0.5, 'Long Take Profit %', minval=0.05, step=0.05) * 0.01
shortTakeProfitPerc = input.float(0.5, 'Short Take Profit %', minval=0.05, step=0.05) * 0.01
enableTrailing = input.bool(true, 'Enable Trailing')
trailingTakeProfitPerc = input.float(0.01, 'Trailing Take Profit %', minval=0.01, maxval=100, step=0.01) * 0.01

float fastMA = ta.sma(close, fastMALen)
float slowMA = ta.sma(close, slowMALen)
bool isWithinPeriod = true
bool openLongPosition = isWithinPeriod and ta.crossover(fastMA, slowMA)
bool openShortPosition = isWithinPeriod and ta.crossunder(fastMA, slowMA)
bool longIsActive = openLongPosition or strategy.position_size > 0
bool shortIsActive = openShortPosition or strategy.position_size < 0

float longTakeProfitPrice = na
longTakeProfitPrice := if longIsActive
    if openLongPosition and not (strategy.position_size > 0)
        close * (1 + longTakeProfitPerc)
    else
        nz(longTakeProfitPrice[1], close * (1 + longTakeProfitPerc))
else
    na

float shortTakeProfitPrice = na
shortTakeProfitPrice := if shortIsActive
    if openShortPosition and not (strategy.position_size < 0)
        close * (1 - shortTakeProfitPerc)
    else
        nz(shortTakeProfitPrice[1], close * (1 - shortTakeProfitPrice))
else
    na

float longTrailingTakeProfitStepTicks = longTakeProfitPrice * trailingTakeProfitPerc / syminfo.mintick
float shortTrailingTakeProfitStepTicks = shortTakeProfitPrice * trailingTakeProfitPerc / syminfo.mintick

strategy.entry(id = 'Long Entry', direction = strategy.long, when = openLongPosition, alert_message = 'Long(' + syminfo.ticker + '): Started')
strategy.entry(id = 'Short Entry', direction = strategy.short, when = openShortPosition, alert_message = 'Short(' + syminfo.ticker + '): Started')
strategy.exit(id = 'Long Take Profit', from_entry = 'Long Entry', limit = enableTrailing ? na : longTakeProfitPrice, trail_price = enableTrailing ? longTakeProfitPrice : na, trail_offset = enableTrailing ? longTrailingTakeProfitStepTicks : na, when = longIsActive, alert_message = 'Long(' + syminfo.ticker + '): Take Profit activated')
strategy.exit(id = 'Short Take Profit', from_entry = 'Short Entry', limit = enableTrailing ? na : shortTakeProfitPrice, trail_price = enableTrailing ? shortTakeProfitPrice : na, trail_offset = enableTrailing ? shortTrailingTakeProfitStepTicks : na, when = shortIsActive, alert_message = 'Short(' + syminfo.ticker + '): Take Profit activated')

plot(series = fastMA, title='Fast SMA', color = color.blue, linewidth = 1, style = plot.style_line)
plot(series = slowMA, title='Slow SMA', color = color.orange, linewidth = 1, style = plot.style_line)
plot(series = longTakeProfitPrice, title='Long Take Profit', color = color.green, linewidth = 1, style = plot.style_cross, offset = 1)
plot(series = shortTakeProfitPrice, title='Short Take Profit', color = color.red, linewidth = 1, style = plot.style_cross, offset = 1)
plot(series = strategy.position_avg_price, title='Position', color = color.white, linewidth = 1, style = plot.style_linebr)


Lebih banyak