Robot Kotak Putih Iceberg Strategi

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

Ringkasan

Strategi ini adalah berdasarkan perdagangan purata bergerak. Ia menetapkan tiga peringkat garis masuk panjang dan pendek untuk melaksanakan kedudukan pembukaan dua arah, yang tergolong dalam strategi trend berikut. Apabila harga memecahkan purata bergerak, strategi membuka kedudukan panjang dan pendek dalam kumpulan dengan meletakkan pesanan yang menunggu.

Logika Strategi

Strategi ini terutamanya menggunakan terobosan purata bergerak untuk menentukan arah trend. Khususnya, ia mengira purata aritmetik harga pembukaan, harga penutupan, harga tertinggi, harga terendah dan sebagainya untuk mendapatkan penunjuk purata bergerak. Kemudian ia menetapkan garis masuk panjang di atas purata bergerak dan garis masuk pendek di bawahnya. Apabila harga memecahkan purata bergerak dari bawah, pesanan panjang dicetuskan satu demi satu. Apabila harga memecahkan dari atas, pesanan pendek dicetuskan satu demi satu.

Jumlah pesanan panjang dan pendek meningkat secara beransur-ansur. Dengan menetapkan pesanan yang menunggu, ia melaksanakan kedudukan pembukaan batch. Sebagai contoh, baris masuk 1 mencetuskan pembukaan 1 kontrak panjang / pendek, baris masuk 2 mencetuskan menambah 1 kontrak, dan baris masuk 3 menambah 1 kontrak lagi. Ini membantu mempelbagaikan kos kemasukan dan mengurangkan risiko satu pesanan.

Strategi ini juga mempunyai mekanisme lindung nilai. Apabila saiz kedudukan tidak 0, ia akan menetapkan perintah stop loss yang mengikuti berdasarkan harga purata bergerak. Jika harga memecahkan purata bergerak lagi, ia akan menutup kedudukan untuk mengunci keuntungan separa dan melindungi modal.

Ringkasnya, strategi ini menggunakan sepenuhnya penunjuk purata bergerak untuk menentukan arah trend, memaksimumkan julat keuntungan melalui beberapa baris kemasukan, dan mengawal risiko dengan pesanan stop loss.

Analisis Kelebihan

Kelebihan strategi ini ialah:

  1. Menggunakan purata bergerak untuk menentukan arah trend adalah jelas dan boleh dilaksanakan. purata bergerak boleh menapis bunyi pasaran dengan berkesan dan menentukan arah trend utama.

  2. Pelbagai garis masuk memaksimumkan penggunaan trend run. Dengan beberapa garis masuk, ia boleh menangkap keseluruhan julat trend sebanyak mungkin dan mengembangkan ruang keuntungan.

  3. Pembukaan kedudukan dalam kumpulan mengurangkan risiko pesanan tunggal. Masuk ke pasaran dalam beberapa kali mempelbagaikan risiko pesanan dan mengurangkan kos pegangan purata.

  4. Mekanisme stop loss lindung nilai berkesan mengawal risiko. Perintah stop loss lindung nilai merealisasikan stop loss cepat apabila harga memecahkan purata bergerak lagi, mengelakkan kerugian besar.

  5. Logik strategi adalah jelas dan mudah difahami, dengan tetapan parameter yang fleksibel yang boleh dioptimumkan untuk pasaran yang berbeza.

Analisis Risiko

Terdapat beberapa risiko dalam strategi ini:

  1. Kemungkinan isyarat yang salah dari purata bergerak. purata bergerak mempunyai lag dan boleh memberikan isyarat yang salah.

  2. Risiko pembalikan trend yang membawa kepada kerugian. Strategi mengandaikan trend, jadi pembalikan trend boleh membawa kepada kerugian besar.

  3. Garis masuk yang terlalu kerap meningkatkan kekerapan perdagangan dan kos seluncur.

  4. Kedudukan pembukaan kumpulan meningkatkan risiko kepekatan apabila saiz kedudukan terlalu besar.

  5. Tetapan titik stop loss yang tidak betul boleh membawa kepada stop loss awal atau titik stop loss terlalu kecil.

Langkah pengurusan risiko yang sepadan:

  1. Mengoptimumkan parameter purata bergerak dan memilih tempoh yang sesuai.

  2. Perhatikan penunjuk teknikal utama untuk melihat isyarat pembalikan trend dan hentikan kerugian tepat pada masanya.

  3. Sesuaikan jarak antara garis masuk untuk mengurangkan kekerapan perdagangan.

  4. Mengoptimumkan saiz kedudukan dan nisbah untuk mengawal risiko kepekatan.

  5. Backtest dan mengoptimumkan titik stop loss untuk mengurangkan risiko stop loss.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dari aspek berikut:

  1. Uji parameter purata bergerak yang berbeza dan sumber data untuk mencari penunjuk purata bergerak yang paling berkesan untuk menentukan trend.

  2. Mengoptimumkan jarak selang dan saiz kedudukan nisbah garis masuk panjang dan pendek untuk mencari parameter yang optimum.

  3. Tambahkan penunjuk lain sebagai keadaan penapis untuk mengelakkan isyarat yang salah dari purata bergerak, seperti MACD, RSI dll.

  4. Mengoptimumkan kedudukan garis stop loss, atau menetapkan titik stop loss secara dinamik berdasarkan ATR.

  5. Tambah pertimbangan pembalikan trend untuk menetapkan keadaan penutupan semua kedudukan.

  6. Mengoptimumkan parameter untuk tempoh pasaran yang berbeza.

  7. Tambah penyesuaian dinamik saiz kedudukan berdasarkan peratusan penggunaan akaun.

Ringkasan

Strategi ini menilai arah trend terutamanya berdasarkan purata bergerak, dan mengambil kesempatan daripada trend berjalan sebagai sumber keuntungan. Dengan menggunakan pelbagai garis kemasukan dan membuka kedudukan dalam batch, ia dapat menangkap trend dengan berkesan dan mengembangkan zon keuntungan. Pada masa yang sama, mekanisme stop loss digunakan untuk mengawal risiko. Logik strategi adalah mudah dan jelas, sesuai untuk pemula untuk belajar, dan juga untuk pengoptimuman yang mendalam.


/*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 lanjut