그리드 전략에 따른 경향

저자:차오장, 날짜: 2023-12-08 12:05:17
태그:

img

전반적인 설명

이 전략은 주요 트렌드가 상승할 때 기간을 선택하여 길고 짧지 않는 그리드 전략을 따르는 추세입니다. 기본 그리드 크기는 1xATR이며, 주문을 추격하기 위해 1, 2, 3 그리드 레벨을 아래로 구축하고 5 번째 그리드는 손실을 중지합니다. 빈 지위가 이전 그리드에 도달하면 전체 그리드가 가격을 추적하기 위해 올라갑니다.

전략 논리

  1. 주요 트렌드 방향을 판단하기 위해 EMA 라인을 사용하십시오. EMA12가 EMA144보다 높다는 것은 주요 트렌드가 상승한다는 것을 의미합니다.
  2. 주요 트렌드가 상승할 때만 긴 포지션을 개설합니다.
  3. 기본 격자 크기는 1xATR입니다, 곱셈은 조정할 수 있습니다
  4. 가격을 추적 하 고 개별적으로 긴 포지션을 열기 위해 아래로 1, 2, 3 그리드 레벨을 구축
  5. 5번째 그리드에서 중지 손실 포인트를 설정
  6. 포지션을 열고 나서, 손해를 멈추고 수익을 얻는 지점을 설정합니다.
  7. 가격 상승 시 영업점점을 돌파할 때 포지션을 닫습니다.
  8. 가격이 하반기에 스톱 로스 포인트에 도달 할 때 포지션을 닫습니다.
  9. 모든 포지션이 닫힌 후, 가격이 다시 마지막 그리드를 통과하면, 다시 그리드 위치와 양을 계산 하 고 위로 추적

이 전략은 주요 트렌드 방향을 결정하고 가격을 추적하기 위해 그리드 트레이딩을 결합합니다. 상승 추세에서 더 큰 수익을 얻을 수 있습니다. 그리드는 포지션을 개별적으로 열기 위해 여러 가격 포인트를 설정하여 포지션별 위험을 줄여줍니다. 스톱 로스와 취리 수익 설정은 이익을 잠금하고 최대 손실을 제한합니다. 모든 포지션이 닫히면 전략은 다시 포지션을 열기 위해 그리드의 새로운 높은 수준을 재 계산하여 수익을 극대화 할 수 있습니다.

이점 분석

  1. 주요 트렌드 방향을 결정하기 위해 EMA를 사용하십시오. 트렌드에 반대하는 포지션을 열지 마십시오.
  2. 네트워크 거래는 단일 포지션 위험을 줄이기 위해 포지션을 별도로 열 수 있습니다.
  3. 손실을 멈추고 이익을 취하십시오. 이익을 잠금하고 최대 손실을 제어하십시오.
  4. 모든 포지션을 닫은 후, 계속 추격하기 위해 그리드를 재 계산하면 수익 공간을 확장 할 수 있습니다.

주요 장점은 트렌드 트레이딩과 그리드 트레이딩을 결합하여 트렌드 방향의 정확성을 보장하고 그리드 트레이딩의 위험 분산을 달성하는 것입니다. 또한 포지션을 닫은 후 그리드를 재 계산하면 무한한 추격을 할 수 있으며 큰 릴리가있을 때 큰 이익을 얻을 수 있습니다.

위험 분석

  1. 주요 추세 판단은 잘못된 방향 으로 진입 할 수 있습니다.
  2. 네트워크에서 큰 손실을 초래하는 중요한 측면 변동성
  3. 스톱 로즈가 너무 빨리 작동해서 모든 포지션을 닫습니다.
  4. 복귀 후 최적의 입구 지점으로 다시 들어갈 수 없습니다.

주요 위험은 주요 트렌드 방향에 대한 잘못된 판단으로 인해 트렌드에 반대되는 포지션을 개설하고 큰 손실이 발생할 수 있습니다. 또한 여러 그리드가 갇혀있는 높은 측면 변동성이있는 경우 손실이 심화 될 것입니다. 또한 빠른 가격 하락은 스톱 로스를 유발하고 모든 포지션을 닫을 수 있으며, 후속 수익 기회를 잃을 수 있습니다. 인하 후 초기 최적 그리드 레벨에 다시 들어가는 것이 어려울 것입니다.

주요 트렌드 판단의 정확성은 EMA 매개 변수를 최적화함으로써 향상될 수 있다. 그리드 간격과 첫 입출금 크기를 조정하면 전체 손실을 제어할 수 있다. 스톱 로스 포지션은 시장 변동성의 빈도를 고려해야 한다. 또한 모든 포지션을 닫는 대신 부분 포지션에 대해 수익을 취하는 것을 고려할 수 있다.

최적화 방향

이 전략은 다음 측면에서도 최적화 될 수 있습니다.

  1. 주요 트렌드 판단의 정확성을 향상시키기 위해 EMA 매개 변수를 최적화
  2. 리스크/상금 비율을 최적화하기 위해 그리드 간격과 양을 조정합니다.
  3. 스톱 로스 및 수익을 취하는 논리를 개선하십시오. 예를 들어 부분적인 수익, 후속 스톱 로스 등
  4. 재입국 조건에 대한 더 많은 제한을 추가하여 철수 중 조기 재입국을 피합니다.
  5. 최적의 출입 시기를 결정하기 위해 더 많은 지표를 포함하십시오. 예를 들어 촛불 패턴, 지표 민감도 등
  6. 이상적인 시장 조건에서 큰 손실을 피하기 위해 외형 감지 추가

이러한 최적화 조치로 전략은 중요한 추세에서 더 큰 이익을 얻을 수 있으며, 동시에 위험을 통제하고 정상적인 측면 변동성에서의 손실을 줄일 수 있습니다.

요약

이 전략은 트렌드 트레이딩과 그리드 트레이딩을 유기적으로 결합합니다. 주요 방향을 결정하기 위해 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
        




더 많은