Strategi dagangan purata bergerak berbilang peringkat


Tarikh penciptaan: 2023-09-23 15:55:20 Akhirnya diubah suai: 2023-09-23 15:55:20
Salin: 0 Bilangan klik: 686
1
fokus pada
1617
Pengikut

Gambaran keseluruhan

Strategi perdagangan rata-rata bergerak bertingkat dengan menetapkan rata-rata bergerak dengan beberapa parameter yang berbeza, untuk mencapai masuk dan berhenti bertingkat. Strategi ini pertama-tama mengira 3 garis panjang dan 3 garis pendek, lebih banyak apabila panjang lebih rendah daripada garis pendek, dan kosong apabila garis pendek lebih rendah daripada garis panjang. Strategi ini boleh menetapkan parameter seperti panjang kitaran pengiraan rata-rata bergerak, nisbah selisih, dan julat masa yang boleh diperdagangkan.

Prinsip Strategi

  1. Rata-rata bergerak sederhana untuk len-siklus harga sumber src dalam parameter pengiraan, sebagai rata-rata asas.

  2. Jumlah garis panjang dan garis pendek yang sesuai dengan parameter panjang dan pendek.

  3. Longline1 dan lain-lain untuk mengalihkan garis rata-rata asas mengikut perkadaran yang ditetapkan oleh parameter longlevel1 dan lain-lain.

  4. Dalam masa yang boleh diperdagangkan, menilai hubungan harga dengan garis rata-rata, untuk mencapai pelbagai peringkat masuk.

  5. Hentikan kerugian apabila harga menyentuh garis purata rujukan.

  6. Memaksa penutupan kedudukan pada waktu akhir.

Analisis kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Permainan ini mempunyai pelbagai peringkat, dan anda boleh mendapatkan trend pada peringkat yang berbeza untuk mendapatkan keuntungan.

  2. Terdapat banyak parameter yang boleh disesuaikan, yang boleh disesuaikan dengan pelbagai jenis dan gaya perdagangan.

  3. Berdasarkan sistem garis rata, keputusan mengenai penembusan lebih dipercayai.

  4. Tetapkan jangka masa yang boleh diperdagangkan untuk mengelakkan masa-masa yang boleh memberi kesan seperti pengumuman data penting.

  5. Terdapat mekanisme kawalan kerugian yang boleh mengawal kerugian individu.

Analisis risiko

Strategi ini mempunyai beberapa risiko:

  1. Berkali-kali menaikkan risiko dan memerlukan sokongan kewangan yang mencukupi.

  2. Tetapan parameter yang tidak betul boleh menyebabkan operasi garis pendek, parameter harus ditetapkan dengan betul.

  3. Masa keluar tetap mungkin terlepas keuntungan trend di peringkat akhir. Anda boleh menetapkan tracking stop loss untuk mengoptimumkannya.

  4. Tiada pertimbangan untuk penyimpanan malam dan penyimpanan malam. Kawalan kos penyimpanan boleh ditambah.

  5. Tidak mengambil kira kawalan kedudukan, ia boleh menyebabkan terlalu besar kedudukan satu arah.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Tambah kerugian bergerak untuk menggantikan masa berlepas tetap.

  2. Mengambil kira kedudukan semalam, menambah bayaran pemegang dan kawalan titik slippage.

  3. Bergabung dengan Tracking Stop Loss untuk mendapatkan keuntungan peringkat akhir.

  4. Sesuai dengan kedudukan, anda boleh menyesuaikan bilangan tangan tunggal, dan mengawal posisi satu arah.

  5. Uji kesan parameter yang berbeza terhadap pelbagai jenis, mewujudkan mekanisme pengoptimuman parameter.

  6. Pengoptimuman titik henti ujian untuk mengurangkan hentian yang tidak perlu.

ringkaskan

Strategi garisan purata pergerakan bertingkat dengan masuk ke dalam garisan purata bertingkat, untuk menjejaki trend dan memperoleh keuntungan. Masa yang boleh diperdagangkan dan titik berhenti yang ditetapkan dapat mengawal risiko dengan lebih baik. Kesan strategi dapat dipertingkatkan dengan cara mengawal kos pegangan, pengoptimuman parameter, pengoptimuman berhenti dan sebagainya.

Kod sumber strategi
/*backtest
start: 2022-09-16 00:00:00
end: 2023-09-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=4
strategy(title = "Noro's ShiftMA-multi Strategy v1.1", shorttitle = "ShiftMA-multi", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)

//Settings
long = input(3, defval = 3, minval = 0, maxval = 3, title = "Lines for long")
short = input(3, defval = 3, minval = 0, maxval = 3, title = "Lines for short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len = input(3, minval = 1, title = "MA Length")
src = input(ohlc4, title = "MA Source")
shortlevel3 = input(15.0, title = "Short line 3")
shortlevel2 = input(10.0, title = "Short line 2")
shortlevel1 = input(5.0, title = "Short line 1")
longlevel1 = input(-5.0, title = "Long line 1")
longlevel2 = input(-10.0, title = "Long line 2")
longlevel3 = input(-15.0, title = "Long line 3")
needoffset = input(true, title = "Offset")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Variables
size = strategy.position_size
mult = 1 / syminfo.mintick

//MA
ma = sma(src, len)
longline1 = long >= 1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close
longline2 = long >= 2 ? round(ma * ((100 + longlevel2) / 100) * mult) / mult : close
longline3 = long >= 3 ? round(ma * ((100 + longlevel3) / 100) * mult) / mult : close
shortline1 = short >= 1 ? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close
shortline2 = short >= 2 ? round(ma * ((100 + shortlevel2) / 100) * mult) / mult : close
shortline3 = short >= 3 ? round(ma * ((100 + shortlevel3) / 100) * mult) / mult : close

//Lines
colorlong1 = long >= 1 ? color.lime : na
colorlong2 = long >= 2 ? color.lime : na
colorlong3 = long >= 3 ? color.lime : na
colorshort1 = short >= 1 ? color.red : na
colorshort2 = short >= 2 ? color.red : na
colorshort3 = short >= 3 ? color.red : na
offset = needoffset ? 1 : 0
plot(shortline3, offset = offset, color = colorshort1)
plot(shortline2, offset = offset, color = colorshort2)
plot(shortline1, offset = offset, color = colorshort3)
plot(ma, offset = offset, color = color.blue)
plot(longline1, offset = offset, color = colorlong1)
plot(longline2, offset = offset, color = colorlong2)
plot(longline3, offset = offset, color = colorlong3)

//Trading
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
lots = 0.0
needtime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
if ma > 0
    lots := round(size / lot)
    strategy.entry("L1", strategy.long, lot, limit = longline1, when = (lots == 0 and long >= 1 and needtime))
    lots := round(size / lot)
    strategy.entry("L2", strategy.long, lot, limit = longline2, when = (lots <= 1 and long >= 2 and needtime))
    lots := round(size / lot)
    strategy.entry("L3", strategy.long, lot, limit = longline3, when = (lots <= 2 and long >= 3 and needtime))
    
    lots := round(size / lot)
    strategy.entry("S1", strategy.short, lot, limit = shortline1, when = (lots == 0 and short >= 1 and needtime))
    lots := round(size / lot)
    strategy.entry("S2", strategy.short, lot, limit = shortline2, when = (lots >= -1 and short >= 2 and needtime))
    lots := round(size / lot)
    strategy.entry("S3", strategy.short, lot, limit = shortline3, when = (lots >= -2 and short >= 3 and needtime))
if size > 0
    strategy.entry("TPL", strategy.short, 0, limit = ma)
if size < 0
    strategy.entry("TPS", strategy.long, 0, limit = ma)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()