Strategi ini adalah strategi perdagangan berdasarkan pelbagai garis rata yang menetapkan harga terhad. Ia akan menetapkan pelbagai jumlah tawaran untuk melakukan atau menolak harga terhad berdasarkan harga yang melanggar garis rata yang berbeza, membentuk pegangan berganda dalam bentuk piramida. Apabila harga melanggar garis rata sekali lagi, kedudukan terbuka terhad terbalik akan dilakukan.
Strategi ini menggunakan penunjuk garis rata untuk menentukan arah trend. Secara khusus, jumlah pesanan yang ditetapkan untuk membuat harga maksimum ditentukan berdasarkan apakah harga telah menembusi garis rata-rata 3 baris ke atas; dan jumlah pesanan yang ditetapkan untuk melakukan harga terhad berdasarkan apakah harga telah menembusi garis rata-rata 3 baris ke bawah.
Dengan cara ini, semakin kuat trend harga, akan menetapkan lebih banyak pesanan had harga yang sama arah; apabila harga muncul isyarat pembalikan, maka pembukaan kedudukan terbalik akan dilakukan. Garis sumbu tengah digunakan untuk menilai penembusan kedudukan dan mengeluarkan isyarat kedudukan yang sama.
Strategi keseluruhan membentuk cara perdagangan yang menggabungkan kedudukan terbuka seperti piramid dengan kedudukan kosong yang pecah. Ia bertujuan untuk membuka kedudukan pada harga purata yang banyak, mengurangkan kos; Hentikan garis purata sumbu tengah, mengawal risiko.
Strategi ini mempunyai kelebihan berikut:
Menggunakan trend penilaian rata-rata, operasi mudah dan intuitif.
Bermula dengan perdagangan dalam bentuk piramid, anda boleh mendapatkan harga yang lebih baik pada awal trend.
Hentikan kerosakan pada sumbu tengah, anda boleh menghentikan kerosakan tepat pada masanya, dan mengawal risiko.
“Saya tidak tahu apa-apa mengenai harga.
Parameter boleh disesuaikan untuk pelbagai jenis.
Strukturnya jelas, mudah difahami dan diperluaskan.
Strategi ini juga mempunyai risiko:
Indeks garis purata terlewat dan boleh menyebabkan kesalahan penilaian.
Kegagalan tiket terhad boleh menyebabkan anda terlepas peluang untuk masuk ke dalam permainan.
Hentian rata-rata aksa mungkin terlalu tebal dan tidak dapat menembusi Menentukan keputusan.
Tetapan parameter yang tidak betul boleh menyebabkan kedudukan piramid terlalu besar.
Julat masa pengesanan yang tidak mencukupi boleh menyebabkan kurva terlalu sesuai.
Tidak mengambil kira faktor yuran.
Penyelesaian untuk menghadapi risiko adalah seperti berikut:
Parameter pengesahan dan pengoptimuman digabungkan dengan petunjuk lain.
Tetapkan tarikh luput dan sesuaikan harga.
Tetapkan halangan pada garis tengah, atau tambahkan logik penilaian terobosan.
Parameter pengoptimuman untuk menilai kadar keuntungan dan kerugian.
Memperluaskan jangka masa tindak balas, tindak balas pelbagai pasaran.
Tambah yuran dan logik slippoint.
Strategi ini boleh dioptimumkan dengan:
Parameter yang dioptimumkan untuk lebih banyak jenis. Pembelajaran mesin boleh digunakan.
Tambah pengesahan penapis indikator lain. Contohnya MACD, KDJ dan sebagainya.
Tambah logik hentian pada garis tengah.
Secara dinamik menyesuaikan kadar pembukaan dan kedudukan hentian.
Mengoptimumkan tetapan harga terhad, meningkatkan kos. Contohnya, menetapkan harga mengikut rentang turun naik.
Meningkatkan pengurusan kos dan mengelakkan penarikan balik yang berlebihan.
Uji kesan parameter pelbagai jenis untuk membina kolam parameter.
Strategi ini membuka kedudukan dengan membentuk piramida dengan menetapkan harga had rata untuk mendapatkan kos yang lebih baik. Menggunakan stop loss rata rata untuk mengawal risiko. Struktur strategi sederhana dan jelas, mudah difahami dan diperluas. Tetapi ia boleh diperbaiki dengan memperkenalkan petunjuk lain, parameter pengoptimuman, dan logik harga had yang lebih baik.
/*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()