Trend Mengikuti Strategi Purata Pergerakan Automatik


Tarikh penciptaan: 2023-10-10 15:21:45 Akhirnya diubah suai: 2023-10-10 15:21:45
Salin: 1 Bilangan klik: 649
1
fokus pada
1617
Pengikut

Gambaran keseluruhan

Strategi ini berdasarkan pada persilangan garis rata-rata bergerak cepat dan garis rata-rata bergerak perlahan sebagai isyarat membeli dan menjual, termasuk dalam strategi jenis trend. Dengan menyesuaikan parameter rata-rata bergerak secara automatik, menyesuaikan diri secara dinamik dengan trend pasaran untuk mencapai keuntungan maksimum.

Prinsip Strategi

  1. Hitung rata-rata bergerak cepat dan rata-rata bergerak perlahan. Parameter rata-rata bergerak cepat adalah 21 secara lalai, dan parameter rata-rata bergerak perlahan adalah 34 secara lalai.

  2. Apabila ia melintasi garis purata bergerak perlahan pada garis purata bergerak cepat, ia menunjukkan pergerakan ke atas dan menghantar isyarat beli.

  3. Apabila pergerakan laju bergerak di bawah garis purata bergerak perlahan, ia menunjukkan pergerakan ke bawah dan mengeluarkan isyarat menjual.

  4. Menerima keuntungan dengan menyesuaikan parameter panjang garisan purata bergerak secara automatik, menjadikan dinamiknya sesuai dengan trend pasaran, dan menjejaki trend.

Analisis kelebihan

  1. Strategi ini mudah difahami dan diimplementasikan.

  2. Ia juga boleh digunakan untuk mengesan trend pasaran dengan berkesan dan mempunyai potensi keuntungan yang besar.

  3. Dengan menyesuaikan parameter secara dinamik, anda boleh menyesuaikan diri dengan perubahan keadaan.

  4. Algoritma rata-rata bergerak boleh dikonfigurasi untuk meningkatkan fleksibiliti strategi.

  5. Ia boleh dikonfigurasikan secara bebas untuk membeli dan menjual aplikasi yang logik dan fleksibel.

Analisis risiko

  1. Strategi moving average line mudah menghasilkan transaksi yang kerap dan kos transaksi yang tinggi.

  2. Dalam situasi yang tidak menentu, pergerakan rata-rata bergerak terlewat dan mungkin terlepas peluang terbaik untuk membeli atau menjual.

  3. Perlu mengoptimumkan parameter dan frekuensi penyesuaian rata-rata bergerak, konfigurasi yang tidak betul boleh menyebabkan kegagalan strategi.

  4. Ia memerlukan kawalan yang ketat untuk mengelakkan kerosakan daripada berkembang.

  5. Jika trend berbalik, ia boleh menyebabkan kerugian yang besar.

Arah pengoptimuman

  1. Mengoptimumkan parameter purata bergerak untuk menjadikannya lebih sensitif dan menangkap perubahan trend tepat pada masanya.

  2. Menambah logik henti rugi dan kawalan ketat terhadap kerugian tunggal.

  3. Meningkatkan indikator penilaian trend untuk mengelakkan kerugian akibat pembalikan trend.

  4. Mengoptimumkan strategi penyesuaian garis rata bergerak untuk menjadikannya lebih pintar dan automatik.

  5. Tambah modul pengoptimuman parameter, pengoptimuman automatik menggunakan kaedah pembelajaran mesin.

ringkaskan

Strategi ini secara keseluruhannya mudah difahami, membeli dan menjual dengan mengkonfigurasi garis purata bergerak perlahan dengan panjang yang berbeza, merupakan strategi penjejakan trend yang tipikal. Kelebihan strategi ini adalah peraturan perdagangan yang mudah, mudah dilaksanakan, dan dapat menangkap trend dengan berkesan. Tetapi ada juga risiko tertentu, perlu terus mengoptimumkan konfigurasi parameter, logik stop loss, untuk menjadikan strategi lebih stabil dan boleh dipercayai. Secara keseluruhan, strategi ini mempunyai potensi peningkatan yang besar, perlu dikaji dan digunakan secara mendalam.

Kod 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)