Strategi White Box Iceberg


Tarikh penciptaan: 2023-09-26 21:02:21 Akhirnya diubah suai: 2023-09-26 21:02:21
Salin: 0 Bilangan klik: 754
1
fokus pada
1617
Pengikut

Gambaran keseluruhan

Strategi ini berdasarkan perdagangan garis rata, dengan menetapkan tiga garis masuk dengan kepala dan kepala kosong, untuk mewujudkan kedudukan terbuka dua arah yang banyak, termasuk strategi mengikuti trend. Apabila harga menembusi garis rata, berturut-turut membuka kedudukan dan melakukan lebih banyak ruang, untuk mencapai masuk secara berturut-turut dengan menggantung.

Prinsip Strategi

Strategi ini menilai arah trend berdasarkan penembusan garis rata-rata. Secara khusus, ia mendapat penunjuk garis rata-rata dengan mengira nilai purata aritmetik harga pembukaan, harga penutup, harga tertinggi, harga terendah, dan sebagainya.

Bilangan pesanan untuk melakukan lebih banyak ruang kosong meningkat secara berturut-turut, dengan menetapkan pesanan menggantung untuk mewujudkan pembukaan gudang secara berturut-turut. Sebagai contoh, baris masuk 1 mencetuskan 1 tangan untuk melakukan lebih banyak / kosong, baris masuk 2 mencetuskan 1 tangan untuk memegang, baris masuk 3 menambah 1 lagi memegang. Ini dapat menyebarkan kos masuk, mengurangkan risiko pesanan tunggal.

Strategi ini juga menyediakan mekanisme penyesuaian. Apabila jumlah pegangan kurang dari 0, ia akan menjejaki stop loss mengikut harga garis purata, dan jika harga jatuh lagi ke bawah garis purata, ia akan menghentikan kedudukan rata. Ini dapat mengunci sebahagian keuntungan dan melindungi dana.

Secara keseluruhannya, strategi ini memanfaatkan penunjuk garis rata untuk menentukan arah trend, memaksimumkan ruang keuntungan melalui garis masuk pelbagai peringkat, sambil menetapkan risiko kawalan stop loss tunggal, dan merupakan strategi trend-following yang tipikal.

Analisis kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Garis purata boleh digunakan untuk menentukan arah trend dengan jelas. Garis purata boleh menapis bunyi pasaran dengan berkesan untuk menentukan arah trend utama.

  2. Garis masuk pelbagai peringkat, memanfaatkan sepenuhnya kawasan operasi trend. Dengan pelbagai garis masuk, anda dapat menangkap keseluruhan kawasan operasi trend untuk memaksimumkan ruang keuntungan.

  3. Membuka kedudukan secara berturut-turut, mengurangkan risiko tunggal. Membawa masuk beberapa kali, dapat menyebarkan risiko pesanan, mengurangkan kos memegang kedudukan purata.

  4. Menetapkan mekanisme penangguhan kerugian, mengawal risiko dengan berkesan. Dengan penangguhan kerugian, anda boleh menghentikan kerugian dengan cepat apabila harga jatuh kembali ke bawah garis purata, dan mengelakkan kerugian yang berlebihan.

  5. Strategi yang jelas dan mudah difahami, parameter yang fleksibel, boleh dioptimumkan untuk pasaran yang berbeza.

Analisis risiko

Strategi ini mempunyai beberapa risiko:

  1. Kebarangkalian bahawa garis rata-rata akan memberi isyarat yang salah. Garis rata-rata menilai trend yang terlewat dan mungkin memberi isyarat yang salah.

  2. Risiko kerugian akibat trend berbalik. Strategi ini berasaskan trend, dan jika trend berbalik, kerugian yang lebih besar akan berlaku.

  3. Garis masuk ditetapkan terlalu padat, meningkatkan frekuensi transaksi dan kos slippage.

  4. Pembukaan kedudukan secara berturut-turut meningkatkan risiko kepekatan kedudukan. Apabila jumlah pegangan terlalu besar, risiko tertumpu.

  5. Penetapan titik henti tidak munasabah, mungkin terlalu awal atau terlalu kecil.

Kaedah pengurusan risiko:

  1. Optimumkan parameter garis purata, pilih garis purata kitaran yang sesuai.

  2. Perhatian kepada petunjuk teknikal penting, menilai isyarat perubahan trend, dan menghentikan kerugian tepat pada masanya.

  3. Menyesuaikan jarak penempatan garisan masuk untuk mengurangkan kekerapan transaksi.

  4. Mengoptimumkan saiz dan perkadaran kedudukan, mengawal risiko kepekatan.

  5. Ujian dan pengoptimuman titik hentian untuk mengurangkan risiko hentian.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dengan:

  1. Uji parameter dan sumber data garis purata yang berbeza, pilih indikator garis purata yang terbaik untuk menilai kesan trend.

  2. Mengoptimumkan jarak jarak dan nisbah kedudukan garis masuk kosong untuk mencari parameter terbaik.

  3. Gabungan dengan penunjuk lain sebagai syarat penapis, untuk mengelakkan isyarat yang salah. Contohnya MACD, RSI dan sebagainya.

  4. Untuk mengoptimumkan kedudukan garis henti, anda juga boleh menetapkan titik henti berdasarkan ATR dinamik.

  5. Menambah penilaian terhadap perubahan trend, menetapkan syarat untuk menutup semua pegangan.

  6. Parameter yang boleh mengoptimumkan strategi mengikut tempoh pasaran yang berbeza.

  7. Tambah fungsi penyesuaian dinamik jumlah kedudukan, menentukan jumlah pemain yang dibuka berdasarkan peratusan penggunaan dana.

ringkaskan

Strategi ini secara keseluruhannya menggunakan arah trend penilaian garis rata, dengan pergerakan trend sebagai sumber keuntungan utama. Dengan masuk ke dalam pelbagai peringkat dan membuka kedudukan secara berturut-turut, anda boleh menangkap trend dengan berkesan, mengembangkan kawasan keuntungan.

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