Strategi Perdagangan Swing

Penulis:ChaoZhang, Tanggal: 2023-10-11 16:29:37
Tag:

Gambaran umum

Ini adalah strategi mengikuti tren berdasarkan crossover rata-rata bergerak, dikombinasikan dengan manajemen stop loss/take profit dan efek leverage, yang bertujuan untuk mengidentifikasi tren di berbagai pasar dan memaksimalkan keuntungan.

Logika Strategi

Strategi ini menggunakan persilangan rata-rata bergerak cepat dan lambat sebagai sinyal perdagangan.

Untuk menyaring perdagangan kebisingan dari tren kecil, ia juga menggunakan MA 200 hari sebagai filter tren.

Strategi ini menggunakan stop trading range. Setelah masuk, tingkat stop loss dan take profit persentase tetap ditetapkan, misalnya 1% stop loss dan 1% take profit. Posisi akan ditutup ketika harga mencapai stop loss atau take profit.

Efek leverage digunakan untuk memperkuat keuntungan perdagangan. Berdasarkan karakteristik pasar yang berbeda, rasio leverage yang tepat dapat dipilih, misalnya 10x.

Analisis Keuntungan

  • Salah satu keuntungannya adalah dapat mengidentifikasi tren di berbagai pasar termasuk kripto, saham dan berjangka, sehingga strategi dapat diterapkan secara luas.

  • Menggunakan crossover MA cepat/lambat dan filter tren dapat lebih baik mengidentifikasi arah tren dan mencapai tingkat kemenangan yang baik di pasar tren.

  • Range trading stop membantu mengendalikan kerugian perdagangan tunggal dalam kisaran yang dapat ditanggung, memungkinkan menjalankan strategi yang stabil.

  • Efek leverage memperkuat keuntungan perdagangan, memanfaatkan sepenuhnya keunggulan strategi.

  • Desain antarmuka visual dengan warna latar belakang yang berbeda untuk pasar bull/bear menawarkan wawasan pasar yang intuitif.

Analisis Risiko

  • Strategi ini mengikuti tren sehingga mungkin berkinerja buruk di pasar yang bergolak dan terbatas pada kisaran.

  • Stop loss/take profit persentase tetap membawa risiko berhenti keluar.

  • Leverage memperkuat ukuran posisi serta risiko.

  • Sifat keterlambatan rata-rata bergerak dapat menyebabkan sinyal perdagangan tertunda.

Arahan Optimasi

  • Uji kombinasi parameter yang berbeda dan pilih panjang MA cepat/lambat yang optimal.

  • Masukkan indikator atau model lain sebagai sinyal filter untuk meningkatkan akurasi, misalnya ATR berhenti, RSI dll.

  • Penelitian alat identifikasi tren lain seperti ADX untuk lebih meningkatkan kemampuan menangkap tren.

  • Gunakan model pembelajaran mesin untuk mengoptimalkan sinyal strategi dan menemukan titik masuk / keluar yang lebih efektif.

  • Pertimbangkan stop loss/take profit dinamis berdasarkan volatilitas dan kondisi pasar untuk stop yang lebih masuk akal.

Ringkasan

Strategi ini menggunakan pendekatan yang sistematis mengikuti tren dan menggunakan stop/take profit dan leverage untuk mengontrol risiko dan memperbesar keuntungan.


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

////////////////////////////////////////////////////////////////////////////////
// Bozz Strategy
// Developed for Godstime
// Version 1.1
// 11/28/2021
////////////////////////////////////////////////////////////////////////////////

//@version=4
// strategy("Bozz Strategy", "", true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, margin_long=0, margin_short=0)

// ----------------------------- Inputs ------------------------------------- //
source_ma_type = input("EMA", "Source MA Type", options=["SMA", "EMA"])
source_ma_length = input(50, "Source MA Length")
fast_ma_length = input(20, "Fast MA Length")
slow_ma_length = input(50, "Slow MA Length")
use_trend_filter = input(true, "Trend Filter")
trend_filter_ma_type = input("EMA", "Trend Filter MA Type", options=["SMA", "EMA"])
trend_filter_ma_length = input(200, "Trend Filter MA Period")
show_mas = input(true, "Show MAs")
swing_trading_mode = input(false, "Swing Trading")

// -------------------------- Calculations ---------------------------------- //
fast_ma = ema(close, fast_ma_length)
slow_ma = ema(close, slow_ma_length)
source_ma = source_ma_type == "EMA"? ema(close, source_ma_length): 
                                     sma(close, source_ma_length)
trend_filter_ma = trend_filter_ma_type == "EMA"? ema(close, trend_filter_ma_length): 
                                                 sma(close, trend_filter_ma_length)

// --------------------------- Conditions ----------------------------------- //
uptrend = not use_trend_filter or close > trend_filter_ma
buy_cond = crossover(fast_ma, slow_ma) and uptrend

downtrend = not use_trend_filter or close < trend_filter_ma
sell_cond = crossunder(fast_ma, slow_ma) and downtrend

// ---------------------------- Plotting ------------------------------------ //
bgcolor(use_trend_filter and downtrend? color.red: use_trend_filter? color.green: na)
plot(show_mas? fast_ma: na, "Fast MA", color.green)
plot(show_mas? slow_ma: na, "Slow MA", color.red)
plot(show_mas? source_ma: na, "Source MA", color.purple)
plot(show_mas? trend_filter_ma: na, "Trend Filter MA", color.blue)


// ---------------------------- Trading  ------------------------------------ //
// Inputs
sl_perc = input(1.0, "Stop Loss (in %)", group="Backtest Control")/100
tp_perc = input(1.0, "Take Profit (in %)", group="Backtest Control")/100
leverage = input(10, "Leverage", maxval=100, group="Backtest Control")
bt_start_time = input(timestamp("2021 01 01"), "Backtest Start Time", input.time, group="Backtest Control")
bt_end_time = input(timestamp("2021 12 31"), "Backtest End Time", input.time, group="Backtest Control")

// Trading Window
in_trading_window = true
trade_qty = (strategy.equity * leverage) / close 

// Long Side
strategy.entry("Long Entry", strategy.long,  when=buy_cond and in_trading_window)
long_tp = strategy.position_avg_price * (1 + tp_perc)
long_sl = strategy.position_avg_price * (1 - sl_perc)
if not swing_trading_mode
    strategy.exit("Long Exit", "Long Entry", limit=long_tp, stop=long_sl)

// Short Side
strategy.entry("Short Entry", strategy.short, when=sell_cond and in_trading_window)
short_tp = strategy.position_avg_price * (1 - tp_perc)
short_sl = strategy.position_avg_price * (1 + sl_perc)
if not swing_trading_mode
    strategy.exit("Short Exit", "Short Entry", limit=short_tp, stop=short_sl)

// End of trading window close
strategy.close_all(when=not in_trading_window)

Lebih banyak