Strategi Perdagangan Swing

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

Ringkasan

Ini adalah strategi mengikuti trend berdasarkan persilangan purata bergerak, digabungkan dengan pengurusan stop loss / mengambil keuntungan dan kesan leverage, yang bertujuan untuk mengenal pasti trend di pelbagai pasaran dan memaksimumkan keuntungan.

Logika Strategi

Strategi ini menggunakan persilangan purata bergerak pantas dan perlahan sebagai isyarat perdagangan. Ia pergi panjang apabila MA pantas melintasi di atas MA perlahan, dan pergi pendek apabila MA pantas melintasi di bawah MA perlahan.

Untuk menapis perdagangan bising dari trend kecil, ia juga menggunakan MA 200 hari sebagai penapis trend. Isyarat perdagangan hanya dihasilkan apabila harga di atas atau di bawah MA 200 hari.

Strategi ini menggunakan stop perdagangan julat. Selepas kemasukan, tahap stop loss peratusan tetap dan mengambil keuntungan ditetapkan, contohnya, 1% stop loss dan 1% mengambil keuntungan. Posisi akan ditutup apabila harga mencapai stop loss atau mengambil keuntungan.

Kesan leverage digunakan untuk memperkuat keuntungan perdagangan. Berdasarkan ciri pasaran yang berbeza, nisbah leverage yang sesuai boleh dipilih, contohnya 10x.

Analisis Kelebihan

  • Satu kelebihan ialah ia dapat mengenal pasti trend di pelbagai pasaran termasuk crypto, saham dan niaga hadapan, menjadikan strategi ini boleh digunakan secara meluas.

  • Menggunakan persilangan MA cepat / perlahan dan penapis trend dapat mengenal pasti arah trend dengan lebih baik dan mencapai kadar kemenangan yang baik di pasaran trend.

  • Hentian perdagangan julat membantu mengawal kerugian perdagangan tunggal dalam julat yang dapat ditanggung, yang membolehkan strategi berjalan dengan stabil.

  • Kesan leverage meningkatkan keuntungan perdagangan, menggunakan sepenuhnya kelebihan strategi.

  • Reka bentuk antara muka visual dengan warna latar belakang yang berbeza untuk pasaran lembu / beruang menawarkan wawasan pasaran yang intuitif.

Analisis Risiko

  • Strategi ini adalah trend-mengikut sehingga mungkin underperform di bergolak, pasaran julat terikat. saiz kedudukan harus dikawal.

  • Kadar stop loss / take profit peratusan tetap membawa risiko berhenti. Tahap harus diselaraskan berdasarkan turun naik pasaran tertentu.

  • Leverage meningkatkan saiz kedudukan dan juga risiko. nisbah Leverage harus dikawal untuk mengelakkan kerugian yang terlalu besar.

  • Sifat lambat purata bergerak boleh menyebabkan isyarat perdagangan yang tertunda.

Arahan pengoptimuman

  • Uji kombinasi parameter yang berbeza dan pilih panjang MA pantas / perlahan yang optimum.

  • Menggabungkan penunjuk atau model lain sebagai isyarat penapis untuk meningkatkan ketepatan, contohnya hentian ATR, RSI dll.

  • Penyelidikan alat pengenalan trend lain seperti ADX untuk meningkatkan lagi keupayaan menangkap trend.

  • Gunakan model pembelajaran mesin untuk mengoptimumkan isyarat strategi dan mencari titik masuk / keluar yang lebih berkesan.

  • Pertimbangkan stop loss / mengambil keuntungan dinamik berdasarkan turun naik dan keadaan pasaran untuk berhenti yang lebih masuk akal.

Ringkasan

Strategi ini menggunakan pendekatan trend yang sistematik dan menggunakan berhenti / mengambil keuntungan dan leverage untuk mengawal risiko dan meningkatkan keuntungan. Ia boleh digunakan secara meluas di seluruh pasaran dengan potensi untuk alfa yang stabil. Perhatian masih harus diberikan kepada pengoptimuman parameter, kawalan risiko dan pengulangan strategi untuk kejayaan jangka panjang.


/*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 lanjut