Strategi ini adalah tren mengikuti strategi grid yang hanya panjang dan tidak pendek, memilih periode waktu ketika tren utama naik. ukuran grid default adalah 1xATR, membangun 1, 2, 3 tingkat grid ke bawah untuk mengejar pesanan, dan grid ke-5 menghentikan kerugian. ketika posisi kosong mencapai grid sebelumnya, seluruh grid bergerak ke atas untuk melacak harga.
Strategi ini menggabungkan EMA untuk menentukan arah tren utama dan perdagangan grid untuk melacak harga. Ini dapat memperoleh pengembalian yang lebih besar dalam tren naik. Grid menetapkan beberapa titik harga untuk membuka posisi secara terpisah, yang mengurangi risiko per posisi. Pengaturan stop loss dan take profit mengunci keuntungan dan juga membatasi kerugian maksimum. Setelah semua posisi ditutup, strategi dapat menghitung kembali tingkat tinggi baru grid untuk membuka posisi lagi, memaksimalkan keuntungan.
Keuntungan utama adalah menggabungkan perdagangan tren dan perdagangan grid, yang memastikan keakuratan arah tren dan juga mencapai dispersi risiko perdagangan grid.
Risiko utama adalah penilaian yang salah tentang arah tren utama, yang akan menyebabkan pembukaan posisi melawan tren dan kerugian besar. Juga, jika ada volatilitas sisi tinggi dengan beberapa grid yang terperangkap, kerugian akan diperburuk. Selain itu, penurunan harga yang cepat dapat memicu stop loss dan menutup semua posisi, kehilangan peluang keuntungan berikutnya. Akan sulit untuk kembali memasuki tingkat grid optimal awal setelah pullback.
Keakuratan penilaian tren utama dapat ditingkatkan dengan mengoptimalkan parameter EMA. Mengatur interval grid dan ukuran entri pertama juga dapat mengendalikan kerugian keseluruhan. Posisi stop loss perlu mempertimbangkan frekuensi volatilitas pasar. Juga, pengambilan keuntungan dapat dipertimbangkan untuk posisi parsial daripada menutup semua posisi.
Strategi ini juga dapat dioptimalkan dalam aspek berikut:
Dengan langkah-langkah optimalisasi ini, strategi dapat memperoleh keuntungan yang lebih besar selama tren yang signifikan, sementara juga mengendalikan risiko dan mengurangi kerugian dalam volatilitas sisi normal.
Strategi ini menggabungkan perdagangan tren dan perdagangan grid secara organik. Ini menggunakan EMA untuk menentukan arah utama dan menggunakan perdagangan grid untuk membuka posisi secara terpisah untuk mengejar tren. Dengan manajemen risiko yang tepat termasuk stop loss, take profit dan mekanisme perhitungan ulang grid, strategi ini dapat menghasilkan keuntungan yang layak selama tren utama, sementara juga mengendalikan risiko. Optimasi lebih lanjut pada parameter dan akurasi penilaian dapat menyebabkan keuntungan yang lebih tinggi.
/*backtest start: 2022-12-01 00:00:00 end: 2023-12-07 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © zxcvbnm3260 //@version=5 strategy("grid strategy long", overlay=true) // 版本更新记录: // v1.0 2021/11/09 只做多、不做空,选择大趋势向上的时间段。网格大小默认为1倍ATR,往下1、2、3个网格吃单,第5个网格止损。空仓时到达往上一个网格则网格整体抬升。(Only go long, not short, choose a time period when the general trend is up. The default grid size is 1x ATR, the next one, two, and three grids will take orders, and the fifth grid will stop loss. When the empty position reaches the upper grid, the grid as a whole rises.) X_ATR = input.float(title='网格大小是多少倍ATR?', defval = 1) // 1.基础变量 ema169 = ta.ema(close, 169) ema144 = ta.ema(close, 144) ema12 = ta.ema(close, 12) ema576 = ta.ema(close, 576) ema676 = ta.ema(close, 676) plot(ema169, color=color.new(color.orange, 0), linewidth=2) // plot(ema144, color=color.orange) plot(ema12, color=color.blue) // plot(ema676, color=color.orange, linewidth=1) mtr = math.max(high - low, math.abs(close[1] - high), math.abs(close[1] - low)) atr = ta.ema(mtr, 30) is_0930 = hour(time, 'GMT-4') == 9 and minute(time, 'GMT-4') == 30 is_1500 = hour(time, 'GMT-4') == 15 and minute(time, 'GMT-4') == 00 is_1530 = hour(time, 'GMT-4') == 15 and minute(time, 'GMT-4') == 30 is_yangxian = close>open is_yinxian = close<open // 2.基本趋势标记 big_trend = ema12 >= ema169 ? 1 : 0 big_trend2 = ema12 <= ema169 ? 1 : 0 // 背景的变色处理: bgcolor(big_trend == 1 ? color.new(color.green, 90) : color.new(color.red, 90) ) // 3.网格点位初始化 grid_size = atr * X_ATR // 网格大小 price_entry1 = open - grid_size*1 price_entry2 = open - grid_size*2 price_entry3 = open - grid_size*3 price_stop_loss = open - grid_size*5 price_exit1 = price_entry1 + grid_size*1 price_exit2 = price_entry2 + grid_size*1 price_exit3 = price_entry3 + grid_size*1 qty1 = int(1000/price_entry1) qty2 = int(1000/price_entry2) qty3 = int(1000/price_entry3) // 标出各种点位 slm_lines_time(time, price_entry1, price_entry2, price_entry3, price_stop_loss, price_exit1)=> time2 = time + 1000*3600*24*5 line.new(time, price_stop_loss, time2, price_stop_loss, color=color.red, xloc = xloc.bar_time, width=2) // 止损位 line.new(time, price_entry1, time2, price_entry1, color=color.green, xloc = xloc.bar_time) // line.new(time, price_entry2, time2, price_entry2, color=color.green, xloc = xloc.bar_time) // line.new(time, price_entry3, time2, price_entry3, color=color.green, xloc = xloc.bar_time) // line.new(time, price_exit1, time2, price_exit1, color=color.green, xloc = xloc.bar_time, width=2) // slm_lines(time, price_entry1, price_entry2, price_entry3, price_stop_loss, price_exit1)=> line.new(bar_index, price_stop_loss, bar_index[5], price_stop_loss, color=color.red, xloc = xloc.bar_index, width=2) // 止损位 line.new(bar_index, price_entry1, bar_index[5], price_entry1, color=color.green, xloc = xloc.bar_index) // line.new(bar_index, price_entry2, bar_index[5], price_entry2, color=color.green, xloc = xloc.bar_index) // line.new(bar_index, price_entry3, bar_index[5], price_entry3, color=color.green, xloc = xloc.bar_index) // line.new(bar_index, price_exit1, bar_index[5], price_exit1, color=color.green, xloc = xloc.bar_index, width=2) // // 4.网格点位更新和下单 is_entry0 = big_trend==1 and year>=2020 var is_entry = false // 未进场时: if is_entry0 and not is_entry is_entry := true grid_size := atr * X_ATR // 网格大小 price_entry1 := close - grid_size*1 price_entry2 := close - grid_size*2 price_entry3 := close - grid_size*3 price_stop_loss := close - grid_size*5 price_exit1 := price_entry1 + grid_size*1 price_exit2 := price_entry2 + grid_size*1 price_exit3 := price_entry3 + grid_size*1 qty1 := int(1000/price_entry1) qty2 := int(1000/price_entry2) qty3 := int(1000/price_entry3) // slm_lines(time, price_entry1, price_entry2, price_entry3, price_stop_loss, price_exit1) strategy.entry("open1", strategy.long, qty1, limit = price_entry1) strategy.entry("open2", strategy.long, qty2, limit = price_entry2) strategy.entry("open3", strategy.long, qty3, limit = price_entry3) strategy.exit("close1", qty = qty1, limit = price_exit1, stop = price_stop_loss) strategy.exit("close2", qty = qty2, limit = price_exit2, stop = price_stop_loss) strategy.exit("close3", qty = qty3, limit = price_exit3, stop = price_stop_loss) // 已进场的各类情况 // 1.止损 if is_entry and close <= price_stop_loss strategy.close_all() is_entry := false // 2.网格抬升 if is_entry and close >= price_exit1 is_entry := false