Tren Mengikuti Strategi Rata-rata Gerak Adaptif

Penulis:ChaoZhang, Tanggal: 2023-10-10 15:21:45
Tag:

Gambaran umum

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.

Logika Strategi

  1. Menghitung rata-rata bergerak cepat dan lambat. panjang default MA cepat adalah 21, dan panjang default MA lambat adalah 34.

  2. Ketika MA cepat melintasi MA lambat, ini menunjukkan tren naik dan menghasilkan sinyal beli.

  3. Ketika MA cepat melintasi di bawah MA lambat, ini menunjukkan tren penurunan dan menghasilkan sinyal jual.

  4. Dengan menyesuaikan panjang rata-rata bergerak secara otomatis, strategi secara dinamis menyesuaikan diri dengan tren pasar untuk melacak keuntungan.

Analisis Keuntungan

  1. Strategi ini sederhana dan jelas, mudah dimengerti dan diterapkan.

  2. Hal ini dapat secara efektif melacak tren pasar dengan potensi keuntungan yang besar.

  3. Penyesuaian parameter dinamis beradaptasi dengan perubahan kondisi pasar.

  4. Algoritma MA yang dapat disesuaikan meningkatkan fleksibilitas strategi.

  5. Konfigurasi logika jual beli yang fleksibel.

Analisis Risiko

  1. Perdagangan yang sering menyebabkan biaya transaksi yang lebih tinggi.

  2. MA lag mungkin tidak mencapai titik masuk dan keluar terbaik selama pasar yang volatile.

  3. Parameter MA yang tidak tepat dan optimasi frekuensi penyesuaian menyebabkan kegagalan strategi.

  4. Stop loss yang ketat diperlukan untuk membatasi kerugian.

  5. Pembalikan tren dapat menyebabkan kerugian besar.

Arahan Optimasi

  1. Mengoptimalkan parameter MA untuk mendeteksi perubahan tren yang lebih baik.

  2. Tambahkan logika stop loss untuk mengendalikan kerugian perdagangan tunggal.

  3. Tambahkan indikator penilaian tren untuk menghindari kerugian pembalikan tren.

  4. Meningkatkan strategi penyesuaian MA agar lebih cerdas dan otomatis.

  5. Tambahkan modul optimasi parameter menggunakan pembelajaran mesin.

Ringkasan

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)

Lebih banyak