이 전략은 주요 트렌드가 상승할 때 기간을 선택하여 길고 짧지 않는 그리드 전략을 따르는 추세입니다. 기본 그리드 크기는 1xATR이며, 주문을 추격하기 위해 1, 2, 3 그리드 레벨을 아래로 구축하고 5 번째 그리드는 손실을 중지합니다. 빈 지위가 이전 그리드에 도달하면 전체 그리드가 가격을 추적하기 위해 올라갑니다.
이 전략은 주요 트렌드 방향을 결정하고 가격을 추적하기 위해 그리드 트레이딩을 결합합니다. 상승 추세에서 더 큰 수익을 얻을 수 있습니다. 그리드는 포지션을 개별적으로 열기 위해 여러 가격 포인트를 설정하여 포지션별 위험을 줄여줍니다. 스톱 로스와 취리 수익 설정은 이익을 잠금하고 최대 손실을 제한합니다. 모든 포지션이 닫히면 전략은 다시 포지션을 열기 위해 그리드의 새로운 높은 수준을 재 계산하여 수익을 극대화 할 수 있습니다.
주요 장점은 트렌드 트레이딩과 그리드 트레이딩을 결합하여 트렌드 방향의 정확성을 보장하고 그리드 트레이딩의 위험 분산을 달성하는 것입니다. 또한 포지션을 닫은 후 그리드를 재 계산하면 무한한 추격을 할 수 있으며 큰 릴리가있을 때 큰 이익을 얻을 수 있습니다.
주요 위험은 주요 트렌드 방향에 대한 잘못된 판단으로 인해 트렌드에 반대되는 포지션을 개설하고 큰 손실이 발생할 수 있습니다. 또한 여러 그리드가 갇혀있는 높은 측면 변동성이있는 경우 손실이 심화 될 것입니다. 또한 빠른 가격 하락은 스톱 로스를 유발하고 모든 포지션을 닫을 수 있으며, 후속 수익 기회를 잃을 수 있습니다. 인하 후 초기 최적 그리드 레벨에 다시 들어가는 것이 어려울 것입니다.
주요 트렌드 판단의 정확성은 EMA 매개 변수를 최적화함으로써 향상될 수 있다. 그리드 간격과 첫 입출금 크기를 조정하면 전체 손실을 제어할 수 있다. 스톱 로스 포지션은 시장 변동성의 빈도를 고려해야 한다. 또한 모든 포지션을 닫는 대신 부분 포지션에 대해 수익을 취하는 것을 고려할 수 있다.
이 전략은 다음 측면에서도 최적화 될 수 있습니다.
이러한 최적화 조치로 전략은 중요한 추세에서 더 큰 이익을 얻을 수 있으며, 동시에 위험을 통제하고 정상적인 측면 변동성에서의 손실을 줄일 수 있습니다.
이 전략은 트렌드 트레이딩과 그리드 트레이딩을 유기적으로 결합합니다. 주요 방향을 결정하기 위해 EMA를 사용하고 트렌드를 추격하기 위해 격자 거래를 사용하여 포지션을 별도로 여는 것입니다. 스톱 로스, 영리 및 격자 재 계산 메커니즘을 포함한 적절한 리스크 관리로,이 전략은 주요 트렌드 중에 적당한 수익을 창출 할 수 있으며, 동시에 위험을 제어 할 수 있습니다. 매개 변수 및 판단 정확성에 대한 추가 최적화는 더 높은 수익으로 이어질 수 있습니다. 라이브 트레이딩에 대한 자세한 테스트와 최적화가 가치가 있습니다.
/*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