Strategi Perdagangan Perintah Batas Multi MA

Penulis:ChaoZhang, Tarikh: 2023-09-22
Tag:

Ringkasan

Ini adalah strategi dagangan yang menetapkan pesanan had berdasarkan pelbagai purata bergerak. Ia akan menetapkan jumlah pesanan had panjang atau pendek yang berbeza apabila harga memecahkan melalui tahap MA yang berbeza, membentuk pelbagai kedudukan berbentuk piramid. Apabila harga memecahkan MA sekali lagi, pesanan had terbalik akan dibuka. Apabila memegang kedudukan, kedudukan akan ditutup dengan pesanan pasaran terbalik jika harga memecahkan MA tengah.

Logika Strategi

Strategi ini menggunakan purata bergerak untuk menentukan arah trend. Khususnya, ia menentukan bilangan pesanan had panjang berdasarkan sama ada harga memecahkan 3 garis MA ke atas. Dan ia menentukan bilangan pesanan had pendek berdasarkan sama ada harga memecahkan 3 garis MA ke bawah.

Oleh itu, semakin kuat trend, semakin banyak pesanan had arah yang sama akan ditetapkan. Apabila harga menunjukkan isyarat pembalikan, kedudukan terbalik akan dibuka. MA tengah digunakan untuk menilai terobosan kedudukan yang ada dan menghasilkan isyarat dekat.

Seluruh strategi menggabungkan pembukaan gaya piramid dengan penutupan gaya terobosan untuk membentuk logik perdagangan. Ia bertujuan untuk membuka kedudukan pada harga purata yang lebih baik untuk mengurangkan kos, dan menggunakan MA tengah untuk menghentikan kerugian untuk mengawal risiko.

Analisis Kelebihan

Kelebihan strategi ini termasuk:

  1. Menggunakan MAs untuk menentukan trend, mudah dan intuitif untuk beroperasi.

  2. Pembukaan gaya piramid boleh mendapatkan harga purata yang lebih baik pada peringkat awal trend.

  3. Perhentian kerugian MA tengah boleh menghentikan kerugian dan mengawal risiko tepat pada masanya.

  4. Perintah terhad mengelakkan tergelincir.

  5. Parameter yang boleh disesuaikan disesuaikan dengan produk yang berbeza.

  6. Struktur yang jelas, mudah difahami dan diperluaskan.

Analisis Risiko

Risiko strategi termasuk:

  1. MA kelewatan boleh menyebabkan penilaian yang salah.

  2. Perintah had gagal mungkin kehilangan peluang masuk.

  3. Stop loss MA pertengahan mungkin terlalu mentah untuk menilai kejayaan.

  4. Tetapan parameter yang tidak betul boleh mengakibatkan kedudukan yang terlalu besar.

  5. Tempoh backtest yang tidak mencukupi boleh menyebabkan pemasangan berlebihan.

  6. Tiada pertimbangan kos transaksi.

Penyelesaian adalah:

  1. Tambah penunjuk lain untuk pengesahan, mengoptimumkan parameter.

  2. Tetapkan tamat tempoh, sesuaikan harga had.

  3. Tambah mengambil keuntungan atau logik di tengah MA stop loss.

  4. Mengoptimumkan parameter, menilai nisbah risiko-balasan.

  5. Memperluaskan tempoh backtest, pelbagai pasaran backtest.

  6. Tambah kos transaksi dan logik slippage.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dalam aspek berikut:

  1. Mengoptimumkan parameter untuk lebih banyak produk, menggunakan kaedah pembelajaran mesin.

  2. Tambahkan penunjuk lain untuk pengesahan, contohnya MACD, KDJ dan lain-lain.

  3. Tambah logik mengambil keuntungan pada garis MA tengah.

  4. Sesuaikan saiz kedudukan secara dinamik dan tahap stop loss.

  5. Mengoptimumkan harga terhad untuk kos kemasukan yang lebih baik, contohnya berdasarkan turun naik.

  6. Menguruskan kos untuk mengelakkan kecenderungan yang berlebihan.

  7. Uji parameter pada produk yang berbeza untuk membina kumpulan parameter.

Kesimpulan

Strategi ini membuka kedudukan berbentuk piramid dengan pesanan had untuk mencapai kos purata yang lebih baik. Ia menggunakan MA tengah untuk menghentikan kerugian untuk mengawal risiko. Struktur strategi adalah mudah dan jelas, mudah difahami dan diperluaskan. Tetapi ia boleh dipertingkatkan dengan memperkenalkan penunjuk lain, mengoptimumkan parameter, meningkatkan logik pesanan had dan lain-lain untuk menjadikannya lebih mantap. Secara keseluruhan, strategi ini memberikan idea perdagangan pesanan had yang mudah dan praktikal yang memegang beberapa nilai rujukan.


/*backtest
start: 2022-09-15 00:00:00
end: 2023-09-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=4
strategy(title = "Robot WhiteBox MultiMA", shorttitle = "Robot WhiteBox MultiMA", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)

//Settings
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len = input(3, minval = 1, title = "MA Length")
s = input(defval = "7. OHLC4", options = ["1. Open", "2. High", "3. Low", "4. Close", "5. HL2", "6. HLC3", "7. OHLC4", "8. OC2", "9. PCMA"], title = "Data")
short3 = input(true, title = "short 3")
short2 = input(true, title = "short 2")
short1 = input(true, title = "short 1")
long1 = input(true, title = "long 1")
long2 = input(true, title = "long 2")
long3 = input(true, title = "long 3")
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
needtime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)

//MA
oc2 = (open + close) / 2
pcma = (highest(high, len) + lowest(low, len)) / 2
src = s == "1. Open" ? open : s == "2. High" ? high : s == "3. Low" ? low : s == "4. Close" ? close : s == "5. HL2" ? hl2 : s == "6. HLC3" ? hlc3 : s == "7. OHLC4" ? ohlc4 : s == "8. OC2" ? oc2: close
sma = sma(src, len)
ma = s == "9. PCMA" ? round(pcma * mult) / mult : round(sma * mult) / mult

//Levels
longline1 = long1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close
longline2 = long2 ? round(ma * ((100 + longlevel2) / 100) * mult) / mult : close
longline3 = long3 ? round(ma * ((100 + longlevel3) / 100) * mult) / mult : close
shortline1 = short1 ? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close
shortline2 = short2 ? round(ma * ((100 + shortlevel2) / 100) * mult) / mult : close
shortline3 = short3 ? round(ma * ((100 + shortlevel3) / 100) * mult) / mult : close

//Lines
colorlong1 = long1 ? color.lime : na
colorlong2 = long2 ? color.lime : na
colorlong3 = long3 ? color.lime : na
colorshort1 = short1 ? color.red : na
colorshort2 = short2 ? color.red : na
colorshort3 = short3 ? color.red : na
offset = needoffset ? 1 : 0
plot(shortline3, offset = offset, color = colorshort3, title = "Short line 3")
plot(shortline2, offset = offset, color = colorshort2, title = "Short line 2")
plot(shortline1, offset = offset, color = colorshort1, title = "Short line 1")
plot(ma, offset = offset, color = color.blue, title = "MA line")
plot(longline1, offset = offset, color = colorlong1, title = "Long line 1")
plot(longline2, offset = offset, color = colorlong2, title = "Long line 2")
plot(longline3, offset = offset, color = colorlong3, title = "Long line 3")

//Trading
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
lots = 0.0
if ma > 0
    lots := round(size / lot)
    strategy.entry("L1", strategy.long, lot, limit = longline1, when = (lots == 0 and long1 and needtime))
    lots := round(size / lot)
    strategy.entry("L2", strategy.long, lot, limit = longline2, when = (lots <= 1 and long2 and needtime))
    lots := round(size / lot)
    strategy.entry("L3", strategy.long, lot, limit = longline3, when = (lots <= 2 and long3 and needtime))
    lots := round(size / lot)
    strategy.entry("S1", strategy.short, lot, limit = shortline1, when = (lots == 0 and short1 and needtime))
    lots := round(size / lot)
    strategy.entry("S2", strategy.short, lot, limit = shortline2, when = (lots >= -1 and short2 and needtime))
    lots := round(size / lot)
    strategy.entry("S3", strategy.short, lot, limit = shortline3, when = (lots >= -2 and short3 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 lanjut