
Strategi ini adalah strategi dagangan kuantitatif yang menggabungkan pelbagai petunjuk teknikal. Ia menggabungkan pelbagai petunjuk seperti purata bergerak, MACD, Bollinger Bands, RSI, dan sebagainya untuk perdagangan automatik yang didorong oleh model pelbagai faktor.
Isyarat perdagangan untuk strategi ini berasal dari beberapa bahagian:
Apabila lebih daripada satu petunjuk di atas menghantar isyarat membeli atau menjual pada masa yang sama, strategi ini akan melakukan operasi membeli dan membuka atau menjual kedudukan kosong yang sesuai.
Khususnya, apabila rata-rata bergerak cepat melintasi rata-rata bergerak perlahan dan histogram MACD menunjukkan pertumbuhan garis tiang, RSI bangkit dari kawasan oversold dan harga mendekati tren turun Brin, ia dianggap berbalik dan menghasilkan isyarat beli.
Apabila pergerakan bergerak cepat melintasi pergerakan bergerak perlahan, histogram MACD menunjukkan garis tiang yang berkurang, RSI jatuh dari zon overbought, dan harga mendekati jalur Bollinger Bands, ia menganggap bahawa harga akan mencapai puncak, yang menghasilkan isyarat jual.
Dengan menggunakan gabungan pelbagai indikator seperti itu, isyarat dapat disaring dengan berkesan dan meningkatkan kestabilan strategi.
Kelebihan utama strategi ini adalah penggunaan model multi-faktor untuk berdagang, yang dapat meningkatkan kebolehpercayaan isyarat, meningkatkan kestabilan strategi dan kadar keuntungan.
Model multi-faktor dapat saling mengesahkan isyarat perdagangan, secara berkesan mengurangkan gangguan isyarat palsu.
Indikator dalam pelbagai kategori dapat menangkap ciri-ciri yang lebih menyeluruh mengenai keadaan pasaran dan membuat penilaian yang lebih tepat.
Kombinasi pelbagai faktor dapat meratakan sifat goyah yang ada dalam satu petunjuk, memastikan keuntungan lebih stabil.
Anda boleh menyesuaikan indeks dalam portofolio anda secara fleksibel, dan berat masing-masing, untuk strategi individu yang sesuai dengan pasaran yang berbeza.
Strategi ini juga mempunyai risiko yang perlu diperhatikan:
Kombinasi pelbagai indikator yang rumit, penetapan parameter dan pemilihan indikator memerlukan pengiraan dan ujian yang tepat, jika tidak, ia mudah menghasilkan isyarat kegagalan.
Kesan varieti tunggal mungkin tidak stabil, perlu memilih kombinasi varieti yang sesuai untuk perdagangan antara varieti, untuk menyebarkan risiko varieti tunggal.
Perlu kawalan ketat terhadap saiz kedudukan dan strategi penutupan kerugian untuk mengelakkan peningkatan kerugian akibat keadaan yang melampau.
Strategi ini boleh dioptimumkan dengan cara berikut:
Uji kombinasi lebih banyak indikator untuk mencari parameter yang optimum. Indeks lain seperti kadar turun naik, jumlah transaksi, dan lain-lain dimasukkan ke dalam kombinasi.
Menggunakan kaedah pembelajaran mesin untuk menghasilkan kombinasi strategi dan konfigurasi parameter terbaik secara automatik.
Ujian dan pengoptimuman pada skala masa yang lebih lama, dengan penyesuaian berat untuk peringkat pasaran yang berbeza.
Gabungan dengan alat pengurusan risiko, kawalan ketat terhadap single stop loss dan keseluruhan kedudukan.
Strategi ini menggunakan pelbagai indikator perdagangan untuk membentuk model pelbagai faktor, memanfaatkan kelebihan indikator yang berbeza, meningkatkan kebolehan penilaian isyarat. Pada masa yang sama, perlu berhati-hati terhadap kawalan risiko, dengan pengoptimuman dan pembaruan parameter dapat meningkatkan kestabilan dan keuntungan 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)