Ini adalah strategi perdagangan kuantitatif yang menggabungkan beberapa indikator teknis. Ini menggabungkan moving average, MACD, Bollinger Bands, RSI dan indikator lainnya untuk menerapkan model perdagangan otomatis yang didorong oleh banyak faktor.
Sinyal perdagangan dari strategi ini berasal dari bagian berikut:
Ketika indikator di atas secara bersamaan mengeluarkan sinyal beli atau jual, strategi akan membuat keputusan panjang atau pendek yang sesuai.
Secara khusus, ketika rata-rata bergerak cepat melintasi yang lambat, histogram MACD mulai meningkat, RSI bangkit dari zona oversold, dan harga mendekati rel bawah Bollinger Bands, itu dianggap sebagai sinyal pembalikan tren untuk masuk panjang.
Dan ketika MA cepat melintasi di bawah MA lambat, histogram MACD mulai menurun, RSI turun dari area overbought, dan harga mencapai Bollinger Bands atas, itu dianggap sebagai pembalikan atas jangka pendek untuk entri pendek.
Dengan menggabungkan sinyal dari beberapa indikator, sinyal palsu dapat disaring secara efektif dan stabilitas strategi dapat ditingkatkan.
Keuntungan terbesar dari strategi ini adalah bahwa ia mengadopsi model multi-faktor untuk perdagangan, yang meningkatkan keandalan sinyal, stabilitas dan profitabilitas strategi.
Model multi-faktor dapat memverifikasi sinyal perdagangan satu sama lain dan mengurangi gangguan dari sinyal palsu secara efektif.
Indikator dari kategori yang berbeda dapat menangkap karakteristik pergerakan pasar yang lebih komprehensif dan membuat penilaian yang lebih akurat.
Kombinasi dari beberapa indikator dapat meratakan fluktuasi dari indikator individu dan memastikan pengembalian yang lebih stabil.
Indikator dan bobotnya dalam kombinasi dapat disesuaikan secara fleksibel untuk menyesuaikan strategi untuk kondisi pasar yang berbeda.
Beberapa risiko dari strategi ini harus diperhatikan:
Kombinasi kompleks dari beberapa indikator membutuhkan pengaturan dan pengujian parameter yang tepat, jika tidak, dapat menghasilkan sinyal yang tidak valid.
Kinerja pada satu produk mungkin tidak cukup stabil. portofolio yang terdiri dari produk yang cocok harus dibangun untuk mendiversifikasi risiko.
Ukuran posisi dan mekanisme stop loss harus dikontrol secara ketat untuk membatasi kerugian dalam kondisi pasar yang ekstrim.
Beberapa arah strategi ini dapat dioptimalkan:
Uji kombinasi dari lebih banyak indikator untuk mengetahui parameter optimal, seperti volatilitas tersirat, volume dll.
Menggunakan metode pembelajaran mesin untuk secara otomatis menghasilkan kombinasi indikator dan set parameter yang optimal.
Lakukan lebih banyak backtesting dan optimasi pada jangka waktu yang lebih lama, sesuaikan bobot sesuai untuk tahap pasar yang berbeda.
Mengintegrasikan alat manajemen risiko untuk mengontrol kerugian pada perdagangan tunggal dan posisi keseluruhan secara ketat.
Strategi ini memanfaatkan sepenuhnya keuntungan dari indikator teknis yang berbeda dan membentuk model multi-faktor, yang meningkatkan akurasi sinyal secara efektif. Sementara itu, pengendalian risiko, penyesuaian parameter dan pembaruan strategi juga sangat penting untuk terus meningkatkan stabilitas dan profitabilitas.
/*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)