Strategi ini menghasilkan sinyal perdagangan berdasarkan persilangan antara rata-rata bergerak cepat dan lambat, yang termasuk dalam strategi trend berikut. Dengan menyesuaikan parameter rata-rata bergerak secara adaptif, secara dinamis beradaptasi dengan tren pasar untuk keuntungan maksimum.
Menghitung rata-rata bergerak cepat dan lambat. panjang default MA cepat adalah 21, dan panjang default MA lambat adalah 34.
Ketika MA cepat melintasi MA lambat, ini menunjukkan tren naik dan menghasilkan sinyal beli.
Ketika MA cepat melintasi di bawah MA lambat, ini menunjukkan tren penurunan dan menghasilkan sinyal jual.
Dengan menyesuaikan panjang rata-rata bergerak secara otomatis, strategi secara dinamis menyesuaikan diri dengan tren pasar untuk melacak keuntungan.
Strategi ini sederhana dan jelas, mudah dimengerti dan diterapkan.
Hal ini dapat secara efektif melacak tren pasar dengan potensi keuntungan yang besar.
Penyesuaian parameter dinamis beradaptasi dengan perubahan kondisi pasar.
Algoritma MA yang dapat disesuaikan meningkatkan fleksibilitas strategi.
Konfigurasi logika jual beli yang fleksibel.
Perdagangan yang sering menyebabkan biaya transaksi yang lebih tinggi.
MA lag mungkin tidak mencapai titik masuk dan keluar terbaik selama pasar yang volatile.
Parameter MA yang tidak tepat dan optimasi frekuensi penyesuaian menyebabkan kegagalan strategi.
Stop loss yang ketat diperlukan untuk membatasi kerugian.
Pembalikan tren dapat menyebabkan kerugian besar.
Mengoptimalkan parameter MA untuk mendeteksi perubahan tren yang lebih baik.
Tambahkan logika stop loss untuk mengendalikan kerugian perdagangan tunggal.
Tambahkan indikator penilaian tren untuk menghindari kerugian pembalikan tren.
Meningkatkan strategi penyesuaian MA agar lebih cerdas dan otomatis.
Tambahkan modul optimasi parameter menggunakan pembelajaran mesin.
Logika strategi sederhana dan jelas, menghasilkan perdagangan berdasarkan penyeberangan MA cepat dan lambat. Ini secara efektif menangkap tren tetapi memiliki risiko. Optimasi terus menerus pada parameter, logika stop loss diperlukan untuk membuat strategi lebih kuat. Secara keseluruhan strategi memiliki potensi peningkatan yang besar dan layak untuk diteliti dan diterapkan.
/*backtest start: 2022-10-03 00:00:00 end: 2023-10-09 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // // @version=4 // © Ehsan Haghpanah, (ehsanha) // Algorithmic Trading Research // // eha Moving Averages Strategy, // A simple strategy based on crossing Moving Averages of // different lengths (a fast moving average and slow one) // strategy(title = "eha Moving Averages Strategy", shorttitle = "eha MA Strategy", overlay = true) // // -- strategy parameter(s) // moving averages parameter(s) var _fastMA_len = input(title = "Fast MA Length", defval = 21, type = input.integer, minval = 1, step = 1) var _slowMA_len = input(title = "Slow MA Length", defval = 34, type = input.integer, minval = 1, step = 1) var _ma_algo_id = input(title = "MA Algorithm", defval = "SMA", options = ["SMA", "EMA", "WMA"]) // backtesting date and time range parameter(s) var _startYear = input(defval = 2020, title = "Start Year", type = input.integer, minval = 1976) var _startMonth = input(defval = 1, title = "Start Month", type = input.integer, minval = 1, maxval = 12) var _startDay = input(defval = 1, title = "Start Day", type = input.integer, minval = 1, maxval = 31) var _closeYear = input(defval = 2020, title = "Close Year", type = input.integer, minval = 1984) var _closeMonth = input(defval = 9, title = "Close Month", type = input.integer, minval = 1, maxval = 12) var _closeDay = input(defval = 1, title = "Close Day", type = input.integer, minval = 1, maxval = 31) // // -- function(s) and calculation(s) // checks whether current time is in backtesting time range start_t = timestamp(_startYear, _startMonth, _startDay, 00, 00) // backtesting range start time, (00, 00); (hour, minute) close_t = timestamp(_closeYear, _closeMonth, _closeDay, 23, 59) // backtesting range close time, (23, 59); (hour, minute) isInRange() => true // // calculates moving average based on provided algorithm, source and length // alg : moving average algorithm // len : length // ser : series calcMA(alg, len, ser) => (len == 0) ? ser : ((alg == "SMA") ? sma(ser, len) : ((alg == "EMA") ? ema(ser, len) : (alg == "WMA" ? wma(ser, len) : na))) // // -- strategy logic and calculation(s) ma_fast = calcMA(_ma_algo_id, _fastMA_len, close) ma_slow = calcMA(_ma_algo_id, _slowMA_len, close) cross_ov = crossover (ma_fast, ma_slow) // returns true if fastMA crosses over slowMA cross_un = crossunder(ma_fast, ma_slow) // returns true if slowMA crosses over fastMA // // -- strategy execution logic // opens a long position whenever the time is in range and crosses over strategy.entry("ID", comment = "-", long = strategy.long, when = isInRange() and cross_ov) // closes the position whenever the time is in range and crosses under strategy.close("ID", comment = "-", when = isInRange() and cross_un) // // -- drawing and visualization co_fast = color.new(color.gray, 25) co_slow = color.new(color.gray, 75) // drawing moving average(s) plot(ma_fast, color = co_fast, linewidth = 2, style = plot.style_line) plot(ma_slow, color = co_slow, linewidth = 3, style = plot.style_line)