Strategi pengambilan untung dinamik purata bergerak


Tarikh penciptaan: 2023-09-18 21:46:47 Akhirnya diubah suai: 2023-09-18 21:46:47
Salin: 3 Bilangan klik: 606
1
fokus pada
1617
Pengikut

Gambaran keseluruhan

Strategi ini berdasarkan purata bergerak untuk menentukan arah trend, dengan peratusan ATR berhenti, dan digabungkan dengan ATR untuk menyesuaikan kedudukan secara dinamik. Matlamatnya adalah untuk mengesan trend untuk mendapatkan keuntungan, sambil mengawal risiko.

Prinsip

Strategi menggunakan purata bergerak sederhana dengan panjang N untuk menentukan arah trend. Apabila memakai SMA jangka panjang pada SMA jangka pendek, lakukan lebih banyak; Apabila memakai SMA jangka panjang di bawah SMA jangka pendek, lakukan kosong.

Selepas masuk, strategi menggunakan ATR beberapa kali ganda sebagai tempat berhenti, jika kedudukan panjang, tempat berhenti adalah Harga Masuk + ATR * Factor. Apabila harga melebihi tempat berhenti, tempat berhenti keluar.

Selain itu, strategi menyesuaikan kedudukan dengan saiz ATR. Ukuran ATR mewakili kadar turun naik pasaran, saiz kedudukan berbanding terbalik dengan ATR.

Kelebihan

  1. Menggunakan purata bergerak untuk menentukan arah trend, mempunyai keupayaan untuk mengesan trend.

  2. ATR yang dihentikan dengan cara yang menguntungkan dan mengelakkan pembalikan.

  3. Kedudukan dinamik boleh disesuaikan dengan tahap turun naik pasaran untuk mengawal risiko.

  4. Faktor penangguhan dan parameter kedudukan boleh disesuaikan.

  5. Ia boleh digunakan untuk mengurangkan risiko.

Risiko dan Penyelesaian

  1. Rata-rata bergerak terlewat, yang boleh menyebabkan kelewatan kemasukan. Parameter yang lebih sensitif boleh diuji.

  2. Perubahan dalam saiz ATR boleh menyebabkan stutter terlalu kecil atau terlalu besar. Anda boleh memasukkan ATR rata-rata untuk mengekstrak trendnya.

  3. Jika turun naik terlalu besar, kedudukan mungkin terlalu sedikit mempengaruhi keuntungan. Anda boleh menetapkan had kedudukan rendah.

  4. Tidak menetapkan Hentikan Kerugian menyebabkan risiko peningkatan kerugian. Anda boleh menyertai strategi Hentikan Kerugian Bergerak.

  5. Pilihan yang tidak tepat untuk aset, seperti aset dengan kadar turun naik yang rendah, strategi ini mungkin tidak berkesan. Patokan yang lebih turun naik harus dipilih.

Optimum idea

  1. Uji kombinasi parameter yang berbeza untuk mencari parameter yang optimum.

  2. Mengoptimumkan logik pembukaan kedudukan, seperti penapisan untuk penunjuk lain.

  3. Kajian mengenai strategi berhenti dan hentikan kerugian secara dinamik untuk menjadikan hentian dan hentikan kerugian lebih fleksibel

  4. Pengurusan kedudukan digabungkan dengan indikator kadar turun naik.

  5. Menyertai mekanisme kemasukan semula untuk memanjangkan tempoh pegangan.

ringkaskan

Strategi ini menggunakan trend penghakiman purata bergerak, berhenti pada nisbah ATR, dan menyesuaikan kedudukan secara dinamik. Kelebihannya adalah bahawa ia mempunyai keupayaan untuk mengikuti trend, boleh menyesuaikan risiko dengan parameter. Tetapi terdapat masalah seperti sukar memilih parameter, terlalu banyak berhenti.

Kod sumber strategi
/*backtest
start: 2023-09-10 00:00:00
end: 2023-09-17 00:00:00
period: 5m
basePeriod: 1m
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/
// © dongyun

//@version=4
strategy("利润目标止损的移动平均线", overlay=true)

period = input(80,'')
ptper = input(252,'')
ptfactor = input(12,'')
sizeper = input(20, '')

trend = 0.0
signal = 0
size = 1.0
investment = 100000
atrange = 0.0
ptrange = 0.0
stoph = 0.0
stopl = 0.0


if sizeper != 0
	atrange := atr(sizeper)

if atrange == 0 or sizeper == 0 
	size := 1
else
	size := investment/atrange * 0.1

trend := sma(close,period)


if signal != 1 and nz(trend[1]) < nz(trend[2]) and trend > nz(trend[1])
	strategy.entry('long',strategy.long, comment='open_long')
	signal := 1
else
    signal := nz(signal[1])
    
if signal != -1 and nz(trend[1]) > nz(trend[2]) and trend < nz(trend[1])
	strategy.entry('short',strategy.short, comment='open_short')
	signal := -1
else
    if signal == 0
        signal := nz(signal[1])

ptrange := atr(ptper)

if strategy.position_size > 0
	strategy.exit("exit_long", "long", qty = strategy.position_size, limit = close + ptfactor*ptrange , comment='trail_long') 
else
	if strategy.position_size < 0
		strategy.exit("exit_short", "short", qty = abs(strategy.position_size), limit = close - ptfactor*ptrange, comment='trail_short')