
Strategi ini adalah strategi grid trend-tracking yang hanya melakukan lebih banyak dan tidak kosong, memilih masa trend besar ke atas. Saiz grid lalai adalah 1 kali ganda ATR, menjejaki ke bawah untuk membuat grid peringkat 1, 2, 3, dan 5 berhenti. Apabila harga menembusi satu grid ketika kosong, seluruh grid bergerak ke atas untuk menjejaki harga.
Strategi ini menggunakan EMA untuk menentukan arah trend besar, kemudian digabungkan dengan strategi grid untuk dijejaki, dapat memperoleh keuntungan yang lebih besar dalam trend trend besar ke atas. Grid menetapkan beberapa titik harga, membina gudang secara berturut-turut, dapat mengurangkan risiko satu kedudukan. Tetapan stop loss membolehkan keuntungan dapat dikunci, dan juga mengawal kerugian maksimum. Apabila semua kedudukan kosong, dapat menghitung semula titik tinggi grid, untuk membuka kedudukan lagi, sehingga memaksimumkan keuntungan.
Kelebihan utama strategi ini adalah menggabungkan perdagangan trend dan perdagangan grid, yang memastikan kebenaran arah trend, tetapi juga membahagikan risiko strategi grid. Selain itu, grid dapat dikira semula tanpa had setelah kedudukan kosong, sehingga mendapat keuntungan besar jika berlaku gelombang besar.
Risiko utama adalah kesalahan dalam menilai trend besar, yang boleh menyebabkan kerugian besar dalam membina kedudukan yang berlawanan. Selain itu, jika berlaku gegaran yang teruk, kerugian akan bertambah jika beberapa grid terkurung pada masa yang sama. Selain itu, penurunan harga yang cepat yang mencetuskan stop loss juga boleh menyebabkan posisi kosong sepenuhnya, kehilangan peluang untuk memperoleh keuntungan berikutnya.
Anda boleh meningkatkan ketepatan penilaian trend besar dengan mengoptimumkan parameter EMA. Anda juga boleh mengawal kerugian keseluruhan dengan menyesuaikan jarak grid dan jumlah pesanan pertama.
Strategi ini juga boleh dioptimumkan dalam beberapa arah:
Melalui langkah-langkah pengoptimuman ini, strategi dapat memperoleh keuntungan yang lebih besar dalam keadaan yang lebih besar, sambil mengawal risiko dan mengurangkan kerugian dalam pergerakan goyah biasa.
Strategi ini adalah gabungan organik perdagangan trend dan perdagangan grid. Ia menggunakan EMA untuk menentukan arah besar, dan kemudian menggunakan strategi grid untuk membangunkan kedudukan berturut-turut. Risiko terkawal, ada mekanisme pengesanan untuk menghentikan kerugian dan menghitung semula grid. Secara keseluruhan, strategi ini dapat memperoleh keuntungan yang baik dalam trend besar, dan juga mengawal risiko.
/*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