Strategi ini adalah strategi yang didasarkan pada trading dengan beberapa setelan harga pembatasan setelan garis rata-rata. Ini akan mengatur berbagai jumlah setelan harga pembatasan atau penarikan sesuai dengan harga yang menerobos garis rata-rata yang berbeda, membentuk posisi piramida multi-unit.
Strategi ini menggunakan indikator garis rata untuk menentukan arah tren. Secara khusus, berdasarkan apakah harga telah menembus garis rata-rata 3 baris ke atas, untuk menilai jumlah pesanan yang ditetapkan untuk melakukan batas maksimum; berdasarkan apakah harga telah menembus garis rata-rata 3 baris ke bawah, untuk menilai jumlah pesanan yang ditetapkan untuk melakukan batas maksimum.
Dengan cara ini, semakin kuat tren harga, maka akan lebih banyak pesanan batas yang sama arahnya; ketika harga muncul sinyal pembalikan, maka akan dilakukan reversal open position. Garis sumbu tengah digunakan untuk menilai terobosan dari posisi yang dipegang, dan mengeluarkan sinyal posisi kosong.
Strategi keseluruhan membentuk piramida open posisi dengan breakout close posisi. Tujuan dari strategi ini adalah untuk membuka posisi dengan harga rata-rata dalam beberapa kali, mengurangi biaya; stop loss pada garis rata-rata sumbu tengah, mengendalikan risiko.
Strategi ini memiliki keuntungan sebagai berikut:
Menggunakan tren penilaian rata-rata, operasi sederhana dan intuitif.
Dengan cara ini, Anda bisa mendapatkan harga yang lebih baik di awal tren.
Aksi rata-rata stop loss, dapat berhenti pada waktu yang tepat, mengendalikan risiko.
“Saya tidak tahu apa yang terjadi”, kata dia.
Parameter yang dapat disesuaikan untuk berbagai varietas.
Struktur yang jelas, mudah dipahami dan diperluas.
Strategi ini juga memiliki risiko sebagai berikut:
Indikator rata-rata terlambat dan dapat menyebabkan kesalahan penilaian.
Kegagalan tiket terbatas dapat menyebabkan kehilangan waktu masuk.
Hentikan rata-rata sumbu tengah mungkin terlalu tebal dan tidak dapat menembus Mengambil keputusan
Setting parameter yang tidak tepat dapat menyebabkan posisi piramida terlalu besar.
Rentang waktu pengembalian yang tidak memadai dapat menyebabkan kurva terlalu cocok.
Tidak mempertimbangkan faktor biaya.
Solusi untuk menghadapi risiko adalah sebagai berikut:
Parameter pengesahan dan pengoptimalan, dikombinasikan dengan indikator lainnya.
Setel batas waktu dan tingkat harga.
Setting stop stop di garis tengah, atau menambahkan logik penilaian terobosan.
Parameter optimasi untuk menilai rasio keuntungan dan kerugian.
Memperluas jangka waktu pengembalian, pengembalian multi-pasar
Tambahkan biaya dan logika slider.
Strategi ini dapat dioptimalkan dengan:
Parameter yang dioptimalkan untuk lebih banyak varietas.
Tambahkan konfirmasi filter indikator lainnya. Misalnya MACD, KDJ, dll.
Logika Stop Stop ditambahkan pada sumbu tengah.
Dinamis menyesuaikan rasio posisi terbuka dan posisi stop loss.
Mengoptimalkan pengaturan harga limit, memperbaiki biaya. Misalnya, harga berdasarkan rentang fluktuasi.
Meningkatkan pengelolaan biaya dan mencegah penarikan yang berlebihan.
Uji efek parameter dari varietas yang berbeda, dan bangun kolam parameter.
Strategi ini membuka posisi dengan membentuk piramida dengan menetapkan harga batas rata-rata untuk mendapatkan biaya yang lebih baik. Menggunakan stop loss rata-rata sumbu tengah untuk mengendalikan risiko. Struktur strategi sederhana dan jelas, mudah dipahami dan diperluas. Tetapi dapat ditingkatkan dengan memperkenalkan indikator lain, parameter optimasi, dan logika harga batas 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()