Strategi Rata-rata Pergerakan Otomatis Mengikuti Tren


Tanggal Pembuatan: 2023-10-10 15:21:45 Akhirnya memodifikasi: 2023-10-10 15:21:45
menyalin: 1 Jumlah klik: 653
1
fokus pada
1621
Pengikut

Ringkasan

Strategi ini didasarkan pada persilangan rata-rata bergerak cepat dan rata-rata bergerak lambat sebagai sinyal beli dan jual. Strategi ini termasuk dalam kategori strategi pelacakan tren. Dengan menyesuaikan parameter rata-rata bergerak secara otomatis, dan secara dinamis beradaptasi dengan tren pasar untuk mencapai keuntungan maksimal.

Prinsip Strategi

  1. Perhitungan rata-rata bergerak cepat dan rata-rata bergerak lambat. Parameter rata-rata bergerak cepat default 21, parameter rata-rata bergerak lambat default 34.

  2. Ketika bergerak cepat di atas rata-rata bergerak lambat, menunjukkan bahwa pasar naik, dan mengirimkan sinyal beli.

  3. Ketika cepat bergerak di bawah rata-rata bergerak lambat garis, menunjukkan bahwa pasar ke bawah, mengeluarkan sinyal jual.

  4. Dengan menyesuaikan parameter panjang rata-rata bergerak secara otomatis, membuat dinamika sesuai dengan tren pasar, dan melacak tren untuk mendapatkan keuntungan.

Analisis Keunggulan

  1. Strategi ini sederhana, jelas, dan mudah dipahami.

  2. Ini adalah salah satu cara yang paling efektif untuk memantau tren pasar dan memiliki potensi keuntungan yang besar.

  3. Dengan menyesuaikan parameter secara dinamis, dapat disesuaikan dengan perubahan situasi.

  4. Algoritma rata-rata bergerak dapat dikonfigurasi untuk meningkatkan fleksibilitas strategi.

  5. Aplikasi yang dapat dikonfigurasi secara bebas, logis, dan fleksibel.

Analisis risiko

  1. Strategi Moving Average Line cenderung menghasilkan transaksi yang lebih sering dan lebih mahal.

  2. Pada saat terjadi volatilitas yang sangat tinggi, pergerakan rata-rata akan terlambat dan mungkin akan melewatkan waktu terbaik untuk membeli atau menjual.

  3. Perlu mengoptimalkan parameter moving average line dan frekuensi penyesuaian, konfigurasi yang tidak tepat dapat menyebabkan kegagalan strategi.

  4. Hal ini perlu dikendalikan secara ketat untuk mencegah kerugian yang lebih besar.

  5. Jika tren berbalik, maka akan terjadi kerugian besar.

Arah optimasi

  1. Mengoptimalkan parameter moving average agar lebih sensitif dan dapat menangkap perubahan tren.

  2. Menambahkan logika stop loss, ketat mengendalikan kerugian tunggal.

  3. Meningkatkan indikator penilaian tren untuk menghindari kerugian akibat pembalikan tren.

  4. Optimalkan strategi penyesuaian rata-rata mobile agar lebih cerdas dan otomatis.

  5. Tambahkan modul optimasi parameter, optimasi otomatis menggunakan metode pembelajaran mesin.

Meringkaskan

Strategi ini memiliki ide yang jelas dan mudah dipahami, dengan mengkonfigurasi garis rata-rata bergerak cepat dan lambat dengan panjang yang berbeda untuk menyelesaikan pembelian dan penjualan, dan merupakan strategi pelacakan tren yang khas. Keuntungan dari strategi ini adalah aturan perdagangan yang sederhana, mudah diimplementasikan, dan dapat menangkap tren secara efektif. Namun, ada juga risiko tertentu, perlu terus mengoptimalkan konfigurasi parameter, dan logika stop loss, untuk membuat strategi lebih stabil dan dapat diandalkan. Secara keseluruhan, strategi ini memiliki potensi perbaikan yang besar, yang perlu diteliti dan diterapkan secara mendalam.

Kode Sumber Strategi
/*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)