Strategi ini didasarkan pada perdagangan rata-rata, dengan menetapkan tiga garis masuk dengan multihead dan head kosong, untuk mencapai posisi terbuka dua arah, termasuk strategi pelacakan tren. Ketika harga menembus garis rata-rata, posisi terbuka dilakukan secara berurutan, dan masuk ke dalam kelompok dilakukan dengan menggantung.
Strategi ini didasarkan pada penembusan garis rata-rata untuk menentukan arah tren. Secara khusus, dengan menghitung rata-rata aritmatika dari harga pembukaan, harga penutupan, harga tertinggi, harga terendah, dan lain-lain, ia mendapatkan indikator rata-rata. Kemudian, berdasarkan garis rata-rata, ia menetapkan garis masuk multihead di atas garis rata-rata, dan garis masuk kosong di bawah garis rata-rata.
Jumlah pesanan yang melakukan lebih banyak posisi kosong meningkat secara berturut-turut, dengan mengatur daftar gantung untuk melakukan pembukaan saham secara berturut-turut. Misalnya, baris masuk 1 memicu pembukaan 1 tangan untuk melakukan lebih banyak / kosong, baris masuk 2 memicu peningkatan 1 tangan untuk memegang saham, baris masuk 3 menambahkan 1 tangan lagi untuk memegang saham. Ini dapat mendistribusikan biaya masuk, mengurangi risiko pesanan tunggal.
Strategi ini juga menyiapkan mekanisme kompensasi. Ketika jumlah posisi tidak mencapai 0, stop loss akan dilacak berdasarkan harga rata-rata, dan jika harga kembali jatuh di bawah garis rata-rata, stop loss akan terjadi. Ini dapat mengunci sebagian keuntungan dan melindungi dana.
Secara keseluruhan, strategi ini memanfaatkan indikator rata-rata untuk menentukan arah tren, memaksimalkan area keuntungan melalui garis masuk multi-level, dan mengatur risiko pengendalian stop loss tunggal, merupakan strategi pelacakan tren yang khas.
Strategi ini memiliki keuntungan sebagai berikut:
Garis rata dapat digunakan untuk menilai arah tren dengan jelas. Garis rata dapat secara efektif menyaring kebisingan pasar untuk menentukan arah tren utama.
Jalur masuk multi-level, memanfaatkan area operasi tren sepenuhnya. Dengan banyak jalur masuk, Anda dapat menangkap seluruh area operasi tren secara maksimal, memperluas ruang keuntungan.
Berbagi membuka posisi, mengurangi risiko tunggal. Berbagi masuk beberapa kali, dapat menyebarkan risiko pesanan, mengurangi biaya rata-rata posisi.
Menetapkan mekanisme penghentian kerugian untuk mengendalikan risiko secara efektif. Melalui penghentian kerugian yang terbalik, Anda dapat menghentikan kerugian dengan cepat jika harga kembali turun di bawah garis rata-rata, dan menghindari kerugian yang berlebihan.
Strategi yang jelas dan mudah dipahami, parameter yang fleksibel, dapat dioptimalkan untuk pasar yang berbeda.
Strategi ini juga memiliki beberapa risiko:
Probabilitas bahwa garis rata-rata akan mengirimkan sinyal yang salah. Garis rata-rata menilai adanya keterlambatan tren yang mungkin akan mengirimkan sinyal yang salah.
Risiko kerugian yang ditimbulkan oleh pembalikan tren. Strategi ini didasarkan pada tren, dan jika terjadi pembalikan tren, akan terjadi kerugian yang lebih besar.
Garis masuk diatur terlalu padat, meningkatkan frekuensi transaksi dan biaya slippage.
Pembukaan saham dalam jumlah banyak meningkatkan risiko konsentrasi posisi. Jika jumlah saham terlalu besar, risiko terpusat.
Stop loss setting tidak masuk akal, mungkin stop loss terlalu dini atau stop loss terlalu kecil.
Langkah-langkah manajemen risiko yang sesuai:
Optimalkan parameter rata-rata, pilih rata-rata siklus yang sesuai.
Perhatikan indikator-indikator teknis penting, pertimbangkan sinyal-sinyal perubahan tren, dan hentikan kerugian tepat waktu.
Mengatur jarak pengaturan garis masuk untuk mengurangi frekuensi transaksi.
Optimalkan ukuran dan proporsi posisi, kendalikan risiko konsentrasi.
Pengujian dan optimalisasi stop loss untuk mengurangi risiko stop loss.
Strategi ini dapat dioptimalkan dengan:
Uji parameter dan sumber data rata-rata yang berbeda untuk memilih indikator rata-rata yang terbaik untuk menilai efek tren.
Mengoptimalkan jarak jarak dan rasio posisi untuk garis masuk multi-ruang untuk menemukan parameter optimal.
Dalam kombinasi dengan indikator lain sebagai kondisi penyaringan, untuk menghindari kesalahan sinyal linear. Misalnya MACD, RSI, dll.
Untuk mengoptimalkan posisi stop loss line, Anda juga dapat mengatur stop loss point berdasarkan ATR dinamis.
Menambahkan penilaian terhadap perubahan tren, dan menetapkan kondisi untuk menutup semua posisi.
Parameter yang dapat mengoptimalkan strategi berdasarkan periode pasar yang berbeda.
Meningkatkan jumlah posisi dengan fungsi penyesuaian dinamis, menentukan jumlah pemain yang membuka posisi berdasarkan proporsi penggunaan dana.
Strategi ini secara keseluruhan menggunakan garis rata untuk menilai arah tren, dengan perilaku tren sebagai sumber keuntungan utama. Dengan masuk multi-tingkat dan membuka posisi secara bertahap, Anda dapat secara efektif menangkap tren, memperluas area keuntungan. Sementara mengatur mekanisme stop loss untuk mengendalikan risiko.
/*backtest
start: 2022-09-19 00:00:00
end: 2023-09-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2019
//@version=4
strategy(title = "Robot WhiteBox Iceberg", shorttitle = "Robot WhiteBox Iceberg", 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
lots = 0.0
size = strategy.position_size
mult = 1 / syminfo.mintick
needtime = true
//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 = 0.0
longline2 = 0.0
longline3 = 0.0
shortline1 = 0.0
shortline2 = 0.0
shortline3 = 0.0
longline1 := long1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close
longline2 := lots[1] == 0 ? long2 ? round(ma * ((100 + longlevel2) / 100) * mult) / mult : close : longline2[1]
longline3 := lots[1] == 0 ? long3 ? round(ma * ((100 + longlevel3) / 100) * mult) / mult : close : longline3[1]
shortline1 := short1 ? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close
shortline2 := lots[1] == 0 ? short2 ? round(ma * ((100 + shortlevel2) / 100) * mult) / mult : close : shortline2[1]
shortline3 := lots[1] == 0 ? short3 ? round(ma * ((100 + shortlevel3) / 100) * mult) / mult : close : shortline3[1]
//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]
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, when = needtime)
if size < 0
strategy.entry("TPS", strategy.long, 0, limit = ma, when = needtime)
if time > timestamp(toyear, tomonth, today, 23, 59)
strategy.close_all()
strategy.cancel("L1")
strategy.cancel("L2")
strategy.cancel("L3")
strategy.cancel("S1")
strategy.cancel("S2")
strategy.cancel("S3")
strategy.cancel("TPL")
strategy.cancel("TPS")