Robot Kotak Putih Iceberg Strategi

Penulis:ChaoZhang, Tanggal: 2023-09-26 21:02:21
Tag:

Gambaran umum

Strategi ini didasarkan pada perdagangan rata-rata bergerak. Ini menetapkan tiga tingkat garis entri panjang dan pendek untuk menerapkan posisi pembukaan bidirectional, yang termasuk dalam strategi trend berikut. Ketika harga menembus rata-rata bergerak, strategi membuka posisi panjang dan pendek dalam batch dengan menempatkan pesanan yang menunggu.

Logika Strategi

Strategi ini terutama menggunakan terobosan rata-rata bergerak untuk menentukan arah tren. Secara khusus, ia menghitung rata-rata aritmatika harga pembukaan, harga penutupan, harga tertinggi, harga terendah dan sebagainya untuk mendapatkan indikator rata-rata bergerak. Kemudian ia mengatur garis entri panjang di atas rata-rata bergerak dan garis entri pendek di bawahnya. Ketika harga menerobos rata-rata bergerak dari bawah, pesanan panjang dipicu satu per satu. Ketika harga menerobos dari atas, pesanan pendek dipicu satu per satu.

Jumlah order panjang dan pendek meningkat secara progresif. Dengan menetapkan order yang sedang menunggu, ia menerapkan posisi pembukaan batch. Misalnya, baris masuk 1 memicu pembukaan 1 kontrak panjang / pendek, baris masuk 2 memicu menambahkan 1 kontrak, dan baris masuk 3 menambahkan 1 kontrak lagi. Ini membantu mendiversifikasi biaya masuk dan mengurangi risiko satu pesanan.

Strategi ini juga memiliki mekanisme lindung nilai. Ketika ukuran posisi tidak 0, maka strategi ini akan menetapkan order stop loss yang mengikuti berdasarkan harga rata-rata bergerak. Jika harga kembali menembus rata-rata bergerak, maka strategi ini akan menutup posisi untuk mengunci sebagian keuntungan dan melindungi modal.

Singkatnya, strategi ini sepenuhnya menggunakan indikator moving average untuk menentukan arah tren, memaksimalkan kisaran keuntungan melalui beberapa garis masuk, dan mengendalikan risiko dengan perintah stop loss.

Analisis Keuntungan

Keuntungan dari strategi ini adalah:

  1. Menggunakan rata-rata bergerak untuk menentukan arah tren jelas dan layak. Rata-rata bergerak dapat menyaring kebisingan pasar secara efektif dan menentukan arah tren utama.

  2. Dengan beberapa garis entri, dapat menangkap seluruh rentang lari dari tren sebanyak mungkin dan memperluas ruang keuntungan.

  3. Membuka posisi dalam batch mengurangi risiko pesanan tunggal. Masuk ke pasar dalam beberapa kali mendiversifikasi risiko pesanan dan mengurangi biaya kepemilikan rata-rata.

  4. Mekanisme stop loss lindung nilai secara efektif mengendalikan risiko. perintah stop loss lindung nilai mewujudkan stop loss cepat ketika harga melanggar moving average lagi, menghindari kerugian besar.

  5. Logika strategi jelas dan mudah dimengerti, dengan pengaturan parameter yang fleksibel yang dapat dioptimalkan untuk pasar yang berbeda.

Analisis Risiko

Ada beberapa risiko dalam strategi ini:

  1. Probabilitas sinyal yang salah dari rata-rata bergerak.

  2. Risiko pembalikan tren yang mengarah ke kerugian. Strategi mengasumsikan tren, sehingga pembalikan tren dapat menyebabkan kerugian besar.

  3. Jalur masuk yang terlalu sering meningkatkan frekuensi perdagangan dan biaya slip.

  4. Posisi pembukaan batch meningkatkan risiko konsentrasi ketika ukuran posisi terlalu besar.

  5. Pengaturan stop loss point yang tidak benar dapat menyebabkan stop loss prematur atau stop loss point terlalu kecil.

Langkah-langkah manajemen risiko yang sesuai:

  1. Mengoptimalkan parameter rata-rata bergerak dan memilih periode yang tepat.

  2. Perhatikan indikator teknis utama untuk melihat sinyal pembalikan tren dan menghentikan kerugian tepat waktu.

  3. Sesuaikan jarak antara garis masuk untuk mengurangi frekuensi perdagangan.

  4. Mengoptimalkan ukuran posisi dan proporsi untuk mengontrol risiko konsentrasi.

  5. Backtest dan optimalkan titik stop loss untuk mengurangi risiko stop loss.

Arahan Optimasi

Strategi dapat dioptimalkan dari aspek berikut:

  1. Uji parameter rata-rata bergerak yang berbeda dan sumber data untuk menemukan indikator rata-rata bergerak berkinerja terbaik untuk menentukan tren.

  2. Optimalkan jarak interval dan proporsi ukuran posisi garis entri panjang dan pendek untuk menemukan parameter optimal.

  3. Tambahkan indikator lain sebagai kondisi filter untuk menghindari sinyal yang salah dari rata-rata bergerak, seperti MACD, RSI dll.

  4. Optimalkan posisi garis stop loss, atau atur titik stop loss secara dinamis berdasarkan ATR.

  5. Tambahkan penilaian pembalikan tren untuk menetapkan kondisi penutupan semua posisi.

  6. Mengoptimalkan parameter untuk periode pasar yang berbeda.

  7. Tambahkan penyesuaian dinamis ukuran posisi berdasarkan persentase penggunaan akun.

Ringkasan

Strategi ini menilai arah tren terutama berdasarkan moving average, dan memanfaatkan trend run sebagai sumber keuntungan. Dengan menggunakan beberapa garis entri dan membuka posisi dalam batch, ini dapat secara efektif menangkap tren dan memperluas zona keuntungan. Pada saat yang sama, mekanisme stop loss digunakan untuk mengendalikan risiko. Logika strategi sederhana dan jelas, cocok untuk pemula untuk belajar, dan juga untuk optimasi yang mendalam. Ini adalah strategi trend berikut yang khas.


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

Lebih banyak