Berdasarkan strategi perdagangan kuantitatif multi-faktor


Tanggal Pembuatan: 2024-01-31 13:55:37 Akhirnya memodifikasi: 2024-01-31 13:55:37
menyalin: 0 Jumlah klik: 714
1
fokus pada
1617
Pengikut

Berdasarkan strategi perdagangan kuantitatif multi-faktor

Ringkasan

Strategi ini adalah strategi perdagangan kuantitatif yang menggabungkan berbagai indikator teknis. Ini menggabungkan berbagai indikator seperti moving average, MACD, Bollinger Bands, RSI, dan lainnya untuk melakukan perdagangan otomatis yang didorong oleh model multi-faktor.

Prinsip Strategi

Sinyal perdagangan dari strategi ini berasal dari beberapa bagian:

  1. Rata-rata bergerak ganda membentuk garpu emas
  2. MACD membentuk penembusan di atas dan di bawah sumbu nol
  3. Brin berbalik di atas dan di bawah
  4. RSI berbalik di zona jual beli

Ketika lebih dari satu indikator di atas secara bersamaan mengirimkan sinyal beli atau jual, strategi ini akan melakukan operasi beli untuk membuka posisi atau menjual posisi kosong.

Secara khusus, ketika pergerakan cepat melewati pergerakan lambat di atas rata-rata bergerak cepat, dan histogram MACD menunjukkan pertumbuhan garis pilar, RSI bangkit dari zona oversold, dan harga mendekati tren turun Bollinger Bands, dianggap bahwa ada pembalikan pasar, yang menghasilkan sinyal beli.

Ketika bergerak di bawah rata-rata bergerak cepat dan bergerak di bawah rata-rata bergerak lambat, histogram MACD menunjukkan penurunan garis pilar, RSI turun dari zona overbought, dan harga mendekati Bollinger Bands, yang dianggap akan mencapai puncak, menghasilkan sinyal jual.

Dengan kombinasi indikator yang berbeda, sinyal dapat disaring secara efektif dan meningkatkan stabilitas strategi.

Analisis Keunggulan

Keuntungan terbesar dari strategi ini adalah penggunaan model multi-faktor untuk perdagangan, yang dapat meningkatkan keandalan sinyal, meningkatkan stabilitas strategi dan tingkat pengembalian.

  1. Model multi-faktor dapat saling memverifikasi sinyal perdagangan, secara efektif mengurangi gangguan dari sinyal palsu.

  2. Indikator dari berbagai kategori dapat menangkap karakteristik yang lebih komprehensif dari situasi pasar, membuat penilaian yang lebih akurat.

  3. Kombinasi multi-faktor dapat meredam karakteristik gesekan yang ada pada satu indikator, memastikan keuntungan yang lebih stabil.

  4. Ada fleksibilitas untuk menyesuaikan indikator dalam portofolio dan berat masing-masing indikator, strategi yang dipersonalisasi untuk pasar yang berbeda.

Analisis risiko

Strategi ini juga memiliki beberapa risiko yang perlu diperhatikan:

  1. Kombinasi multi-indikator yang kompleks, pengaturan parameter dan pilihan indikator membutuhkan perhitungan dan pengujian yang tepat, atau mudah menghasilkan sinyal yang gagal.

  2. Efek varietas tunggal mungkin tidak stabil, perlu memilih kombinasi varietas yang tepat untuk perdagangan lintas varietas, untuk menyebarkan risiko varietas tunggal.

  3. Perlu kontrol ketat terhadap skala posisi dan strategi stop loss untuk mencegah peningkatan kerugian akibat kondisi pasar yang ekstrem.

Arah optimasi

Strategi ini dapat dioptimalkan dengan beberapa cara:

  1. Uji kombinasi dari lebih banyak indikator untuk mencari parameter optimal. Indikator lain seperti volatilitas, volume transaksi, dan lain-lain dimasukkan ke dalam kombinasi.

  2. Menggunakan metode pembelajaran mesin untuk secara otomatis menghasilkan kombinasi strategi dan konfigurasi parameter yang optimal.

  3. Uji coba dan optimalisasi pada skala waktu yang lebih lama, dengan penyesuaian bobot untuk fase pasar yang berbeda.

  4. Tergabung dengan alat manajemen risiko, kontrol ketat terhadap stop loss tunggal dan posisi keseluruhan.

Meringkaskan

Strategi ini menggunakan berbagai indikator perdagangan untuk membentuk model multi-faktor, memanfaatkan keuntungan dari berbagai indikator, meningkatkan kemampuan penilaian sinyal. Selain itu, perlu diperhatikan pengendalian risiko, dengan optimasi parameter dan pembaruan dapat terus meningkatkan stabilitas dan keuntungan dari strategi.

Kode Sumber Strategi
/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-30 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Математическая Торговая Система с Ишимоку, TP/SL, ADX, RSI, OBV", shorttitle="МТС Ишимоку TP/SL ADX RSI OBV", overlay=true)

is_short_enable = input(0, title="Короткие сделки")
is_long_enable = input(1, title="Длинные сделки")

// Входные параметры для скользящих средних
fast_length = input(21, title="Быстрый период")
slow_length = input(26, title="Медленный период")

// Входные параметры для Ишимоку
tenkan_length = input(9, title="Тенкан-сен")
kijun_length = input(26, title="Киджун-сен")
senkou_length = input(52, title="Сенкоу-спан B")

// Входные параметры для ADX
adx_length = input(14, title="ADX период")
adx_level = input(30, title="ADX уровень")

// Входные параметры для RSI
rsi_length = input(14, title="RSI период")
rsi_overbought = input(70, title="RSI перекупленность")
rsi_oversold = input(30, title="RSI перепроданность")

// Входные параметры для OBV
obv_length = input(14, title="OBV период")

// Вычисление скользящих средних
fast_ma = ta.sma(close, fast_length)
slow_ma = ta.sma(close, slow_length)

// Вычисление Ишимоку
tenkan_sen = ta.sma(high + low, tenkan_length) / 2
kijun_sen = ta.sma(high + low, kijun_length) / 2
senkou_span_a = (tenkan_sen + kijun_sen) / 2
senkou_span_b = ta.sma(close, senkou_length)

// Вычисление ADX
[diplus, diminus, adx_value] = ta.dmi(14, adx_length)

// Вычисление RSI
rsi_value = ta.rsi(close, rsi_length)

// Вычисление OBV
f_obv() => ta.cum(math.sign(ta.change(close)) * volume)
f_obv_1() => ta.cum(math.sign(ta.change(close[1])) * volume[1])
f_obv_2() => ta.cum(math.sign(ta.change(close[2])) * volume[2])
f_obv_3() => ta.cum(math.sign(ta.change(close[3])) * volume[3])
obv_value = f_obv()

price_is_up = close[1] > close[3] 
price_crossover_fast_ma = close > fast_ma
fast_ma_is_up = ta.sma(close[1], fast_length) > ta.sma(close[3], fast_length)
rsi_is_trand_up = ta.rsi(close[1], rsi_length) > ta.rsi(close[3], rsi_length)
rsi_is_upper_50 = rsi_value > 50
obv_is_trand_up = f_obv_1() > f_obv_3() and obv_value > ta.sma(obv_value, obv_length)
is_up = price_is_up and price_crossover_fast_ma and fast_ma_is_up and rsi_is_trand_up and rsi_is_upper_50 and obv_is_trand_up

fast_ma_is_down = close < fast_ma
rsi_is_trend_down =  ta.rsi(close[1], rsi_length) < ta.rsi(close[2], rsi_length)
rsi_is_crossover_sma = rsi_value < ta.sma(rsi_value, rsi_length)
obv_is_trend_down =  f_obv_1() < f_obv_2()
obv_is_crossover_sma = obv_value < ta.sma(obv_value, obv_length)
is_down = fast_ma_is_down and rsi_is_trend_down and rsi_is_crossover_sma and obv_is_trend_down and obv_is_crossover_sma

//----------//
// MOMENTUM //
//----------//
ema8 = ta.ema(close, 8)
ema13 = ta.ema(close, 13)
ema21 = ta.ema(close, 21)
ema34 = ta.ema(close, 34)
ema55 = ta.ema(close, 55)

longEmaCondition = ema8 > ema13 and ema13 > ema21 and ema21 > ema34 and ema34 > ema55
exitLongEmaCondition = ema13 < ema55

shortEmaCondition = ema8 < ema13 and ema13 < ema21 and ema21 < ema34 and ema34 < ema55
exitShortEmaCondition = ema13 > ema55

// ----------  //
// OSCILLATORS //
// ----------- //
rsi = ta.rsi(close, 14)
longRsiCondition = rsi < 70 and rsi > 40
exitLongRsiCondition = rsi > 70

shortRsiCondition = rsi > 30 and rsi < 60
exitShortRsiCondition = rsi < 30

// Stochastic
length = 14, smoothK = 3, smoothD = 3
kFast = ta.stoch(close, high, low, 14)
dSlow = ta.sma(kFast, smoothD)

longStochasticCondition = kFast < 80
exitLongStochasticCondition = kFast > 95

shortStochasticCondition = kFast > 20
exitShortStochasticCondition = kFast < 5

// Логика входа и выхода
longCondition = longEmaCondition and longRsiCondition and longStochasticCondition and strategy.position_size == 0
exitLongCondition = (exitLongEmaCondition or exitLongRsiCondition or exitLongStochasticCondition) and strategy.position_size > 0

shortCondition = shortEmaCondition and shortRsiCondition and shortStochasticCondition and strategy.position_size == 0
exitShortCondition = (exitShortEmaCondition or exitShortRsiCondition or exitShortStochasticCondition) and strategy.position_size < 0

enter_long = (ta.crossover(close, senkou_span_a) or is_up) and longCondition
enter_short = (ta.crossunder(close, senkou_span_a) or is_down) and shortCondition

exit_long = ((ta.crossunder(fast_ma, slow_ma) or ta.crossunder(close, senkou_span_b) or enter_short) or exitLongCondition) 
exit_short = ((ta.crossover(fast_ma, slow_ma) or ta.crossover(close, senkou_span_b) or enter_long) or exitShortCondition)

// Выполнение сделок
if is_long_enable == 1
    strategy.entry("Long", strategy.long, when=enter_long)
    strategy.close("Long", when=exit_long)

if is_short_enable == 1
    strategy.entry("Short", strategy.short, when=enter_short)
    strategy.close("Short", when=exit_short)