Strategi Perdagangan Rata-rata Gerak Bergeser Berbagai Tingkat

Penulis:ChaoZhang, Tanggal: 2023-09-23
Tag:

Gambaran umum

Strategi trading shift moving average multi level memasuki dan menghentikan kerugian pada beberapa tingkat dengan mengatur beberapa shift moving average line dengan parameter yang berbeda. Strategi ini pertama menghitung 3 garis panjang dan 3 garis pendek. Ini panjang ketika garis panjang berada di bawah garis pendek, dan pendek ketika garis pendek berada di bawah garis panjang. Strategi ini memungkinkan penyesuaian parameter seperti periode moving average, shift ratio, rentang waktu yang dapat diperdagangkan, dll. Ini cocok untuk perdagangan tren jangka menengah-panjang.

Logika Strategi

  1. Menghitung periode len rata-rata bergerak sederhana dari harga src sebagai garis dasar.

  2. Tetapkan jumlah garis panjang dan pendek berdasarkan parameter panjang dan pendek.

  3. Longline1 dll diatur dengan menggeser garis dasar sesuai dengan rasio longlevel1 dll.

  4. Masukkan perdagangan pada beberapa tingkat ketika harga melintasi garis dalam waktu yang dapat diperdagangkan.

  5. Hentikan kerugian saat harga menyentuh garis dasar.

  6. Kekuatan tutup semua posisi setelah waktu akhir.

Analisis Keuntungan

Strategi ini memiliki keuntungan berikut:

  1. Masuk multi-level memungkinkan keuntungan pada tahap yang berbeda dari tren.

  2. Sangat disesuaikan dengan parameter untuk produk yang berbeda dan gaya perdagangan.

  3. Sistem penyebaran yang dapat diandalkan berdasarkan rata-rata bergerak.

  4. Hindari peristiwa besar dengan menetapkan rentang waktu yang dapat diperdagangkan.

  5. Kekalahan yang terkendali melalui stop loss.

Analisis Risiko

Beberapa risiko dari strategi:

  1. Risiko tinggi dari posisi piramida, modal yang cukup diperlukan.

  2. Parameter yang tidak tepat dapat menyebabkan perdagangan berlebihan.

  3. Waktu keluar yang tetap mungkin kehilangan keuntungan tren terlambat.

  4. Tidak ada pertimbangan untuk posisi overnight dan biaya bawa.

  5. Tidak ada kendali atas ukuran posisi.

Arahan Optimasi

Strategi ini dapat ditingkatkan dalam hal berikut:

  1. Tambahkan trailing stop loss alih-alih waktu keluar tetap.

  2. Pertimbangkan biaya bawa untuk posisi overnight.

  3. Tambahkan stop loss untuk menangkap keuntungan terlambat.

  4. Posisi ukuran dinamis berdasarkan eksposur saat ini.

  5. Uji parameter pada produk yang berbeda dan membangun metode optimasi.

  6. Optimalkan tingkat stop loss untuk menghindari stop yang tidak perlu.

Ringkasan

Strategi shift moving average multi level menghasilkan keuntungan dari tren melalui entri multi level berdasarkan moving average. Waktu yang dapat diperdagangkan dan kontrol stop loss berisiko baik. Perbaikan lebih lanjut pada kontrol biaya carry, optimasi parameter, optimasi stop loss dll dapat meningkatkan strategi dan layak untuk diteliti.


/*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()

Lebih banyak