Tiga Strategi Mengikuti Trend Purata Pergerakan


Tarikh penciptaan: 2024-02-02 17:30:09 Akhirnya diubah suai: 2024-02-02 17:30:09
Salin: 1 Bilangan klik: 567
1
fokus pada
1617
Pengikut

Tiga Strategi Mengikuti Trend Purata Pergerakan

Gambaran keseluruhan

Strategi ini dinamakan “Lightning Trimmer” dan merupakan strategi trend-following berdasarkan tiga purata bergerak. Ia menilai trend harga dengan mengira persilangan garis cepat, tengah dan lambat, dan menetapkan harga sasaran dan harga berhenti dengan nilai ATR.

Prinsip Strategi

Strategi ini menggunakan tiga purata bergerak berikut:

  1. Rata-rata bergerak bertimbangan 13 hari digunakan untuk menilai trend jangka pendek
  2. Indeks purata bergerak 55 hari, digunakan untuk menilai trend jangka menengah
  3. Purata bergerak mudah 110 hari untuk menilai trend jangka panjang

Apabila garis cepat melintasi garis tengah, garis tengah melintasi garis perlahan, dinilai sebagai melihat banyak trend; apabila garis cepat melintasi garis tengah, garis tengah melintasi garis perlahan, dinilai sebagai tren kosong.

Untuk menyaring sebahagian daripada urus niaga bising, strategi ini juga menetapkan beberapa syarat tambahan:

  1. 5 garis K terendah di atas garis tengah
  2. Dua garis K terdahulu mempunyai titik rendah di bawah garis tengah.
  3. Harga penutupan K 1 di atas garis tengah

Apabila syarat-syarat ini dipenuhi, isyarat untuk melakukan lebih banyak atau lebih pendek akan dikeluarkan. Setiap kali hanya memegang satu kedudukan, anda boleh membuka kedudukan lagi setelah menetas atau berhenti.

Harga sasaran dan harga hentian ditetapkan berdasarkan nilai ATR.

Analisis kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Menggunakan tiga kombinasi purata bergerak untuk menilai trend, mengelakkan kemungkinan salah menilai satu petunjuk.
  2. Ia mempunyai beberapa syarat tambahan untuk penapisan bising, yang dapat meningkatkan kualiti isyarat.
  3. ATR dinamika berhenti kerugian, yang membantu untuk mengawal kerugian tunggal.

Analisis risiko

Strategi ini juga mempunyai risiko:

  1. Kombinasi purata bergerak mungkin memberi isyarat yang salah dan perlu dipertimbangkan.
  2. Tetapan ATR yang tidak betul boleh menyebabkan stop loss terlalu longgar atau ketat.
  3. Ia juga boleh menyebabkan kenaikan harga yang tidak dapat ditapis dengan berkesan.

Untuk mengawal risiko, adalah disyorkan untuk menyesuaikan parameter purata bergerak dengan betul, mengoptimumkan kelipatan ATR, dan menetapkan masa memegang maksimum untuk mengelakkan kerugian tunggal yang terlalu besar.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dengan:

  1. Uji purata bergerak dari pelbagai panjang atau jenis.
  2. Parameter untuk mengoptimumkan keadaan tambahan.
  3. Cubalah dengan penunjuk lain untuk meramalkan trend, seperti MACD, DMI dan sebagainya.
  4. Indikator kuantiti gabungan seperti jumlah transaksi, perbezaan harga dan isyarat penapisan.

ringkaskan

Strategi ini secara keseluruhan adalah strategi mengikuti trend yang stabil. Ia terutamanya bergantung kepada arah trend yang ditentukan oleh purata bergerak, dan ada sekumpulan indikator teknikal yang bekerjasama sebagai bantuan, yang dapat menyaring sebahagian daripada kebisingan. Walaupun masih ada ruang untuk pengoptimuman lebih lanjut, risiko keseluruhan boleh dikawal, sesuai untuk mengikuti trend garis panjang.

Kod sumber strategi
/*backtest
start: 2024-01-02 00:00:00
end: 2024-02-01 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © greenmask9

//@version=4
strategy("Dazzling Bolts", overlay=true)
//max_bars_back=3000

// 13 SMMA
len = input(10, minval=1, title="SMMA Period")
src = input(close, title="Source")
smma = 0.0
smma := na(smma[1]) ? sma(src, len) : (smma[1] * (len - 1) + src) / len

// 55 EMA
emalength = input(55, title="EMA Period")
ema = ema(close, emalength)

// 100 SMA
smalength = input(110, title="SMA Period")
sma = sma(close, smalength)

emaforce = input(title="Force trend with medium EMA", type=input.bool, defval=true)
offsetemavalue = input(defval = 6)

bullbounce = smma>ema and ema>sma and low[5]>ema and low[2]<ema and close[1]>ema and (ema[offsetemavalue]>sma or (not emaforce))
bearbounce = smma<ema and ema<sma and high[5]<ema and high[2]>ema and close[1]<ema and (ema[offsetemavalue]<sma or (not emaforce))
plotshape(bullbounce,  title= "Purple", location=location.belowbar, color=#ff33cc, transp=0, style=shape.triangleup, size=size.tiny, text="Bolts")
plotshape(bearbounce,  title= "Purple", location=location.abovebar, color=#ff33cc, transp=0, style=shape.triangledown, size=size.tiny, text="Bolts")
strategy.initial_capital = 50000
ordersize=floor(strategy.initial_capital/close)
longs = input(title="Test longs", type=input.bool, defval=true)
shorts = input(title="Test shorts", type=input.bool, defval=true)
atrlength = input(title="ATR length", defval=12)
atrm = input(title="ATR muliplier",type=input.float, defval=2)
atr = atr(atrlength)

target = close + atr*atrm
antitarget = close - (atr*atrm)

//limits and stop do not move, no need to count bars from since

bullbuy = bullbounce and longs and strategy.opentrades==0
bb = barssince(bullbuy)
bearsell = bearbounce and shorts and strategy.opentrades==0
bs = barssince(bearsell)

if (bullbuy)
    strategy.entry("Boltsup", strategy.long, ordersize)
    strategy.exit ("Bolts.close", from_entry="Boltsup", limit=target, stop=antitarget)
if (crossover(smma, sma))
    strategy.close("Boltsup", qty_percent = 100, comment = "Bolts.crossover")

if (bearsell)
    strategy.entry("Boltsdown", strategy.short, ordersize)
    strategy.exit("Bolts.close", from_entry="Boltsdown", limit=antitarget, stop=target)
if (crossunder(smma, sma))
    strategy.close("Boltsdown", qty_percent = 100, comment = "Bolts.crossover")

// if (bb<5)
//     bulltarget = line.new(bar_index[bb], target[bb], bar_index[0], target[bb], color=color.blue, width=2)
//     bullclose = line.new(bar_index[bb], close[bb], bar_index[0], close[bb], color=color.blue, width=2)
//     bullstop = line.new(bar_index[bb], antitarget[bb], bar_index[0], antitarget[bb], color=color.blue, width=2)
// if (bs<5)
//     bulltarget = line.new(bar_index[bs], antitarget[bs], bar_index[0], antitarget[bs], color=color.purple, width=2)
//     bullclose = line.new(bar_index[bs], close[bs], bar_index[0], close[bs], color=color.purple, width=2)
//     bullstop = line.new(bar_index[bs], target[bs], bar_index[0], target[bs], color=color.purple, width=2)