
La estrategia es una estrategia de seguimiento de la red de tendencias que solo hace más y no hace hueco, elige el momento de la gran tendencia hacia arriba. El tamaño de la red predeterminado es 1x el ATR, el seguimiento hacia abajo establece una red de nivel 1, 2 y 3 para el seguimiento, el bloqueo de la 5a línea. Si el precio se rompe en una red cuando la posición vacía, toda la red se mueve hacia arriba para seguir el precio.
La estrategia utiliza EMA para determinar la dirección de la tendencia general, y luego se combina con la estrategia de la red para realizar un seguimiento, lo que permite obtener mayores ganancias en la tendencia ascendente de la tendencia general. La red establece varios puntos de precio, construye una posición en lotes y reduce el riesgo de una sola posición. La configuración de stop loss permite que los beneficios se bloqueen y también controla la pérdida máxima.
La principal ventaja de esta estrategia es que combina el comercio de tendencias y el comercio de la red, lo que garantiza la corrección de la dirección de la tendencia y la dispersión del riesgo de la estrategia de la red. Además, la redirección de la red después de la posición de posición se puede recuperar indefinidamente, lo que genera una gran ganancia en caso de una ola.
El principal riesgo reside en el error en el juicio de la gran tendencia, lo que puede conducir a una posición de reversión y una gran pérdida. Además, si ocurre una gran sacudida en el mercado, las pérdidas se agravarán si varias grillas se encierran al mismo tiempo. Además, la caída rápida de los precios también puede provocar un alto de pérdidas.
Se puede mejorar la precisión de las grandes tendencias mediante la optimización de los parámetros de EMA. El ajuste de la distancia de la grilla y el número de primeras órdenes también puede controlar la pérdida total. La configuración de la posición de los puntos de parada necesita tener en cuenta la frecuencia de las fluctuaciones del mercado. Además, también se puede considerar que algunas posiciones se detuvieron después de obtener ganancias, en lugar de cerrar todas las posiciones.
La estrategia también puede ser optimizada en las siguientes direcciones:
Mediante estas optimizaciones, la estrategia puede obtener mayores ganancias en el escenario general, mientras que los riesgos pueden ser controlados y las pérdidas reducidas en el escenario de movimiento de la oscilación normal.
La estrategia es una combinación orgánica de comercio de tendencias y comercio de la red. Utiliza la EMA para determinar la dirección general, y luego utiliza la estrategia de la red para construir posiciones por lotes. El control del riesgo está en su lugar, con un mecanismo de seguimiento del stop loss y el recálculo de la red.
/*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