El autor:¿ Qué pasa?, Fecha: 2024-01-25 12:34:59
Las etiquetas:

img

Resumen general

Principio de la estrategia

  1. El carril medio de las bandas de Bollinger es el promedio móvil simple de los precios de cierre de N días, el carril superior es el carril medio + M veces la volatilidad del rango verdadero de N días del canal KC, y el carril inferior es el carril medio - M veces la volatilidad del rango verdadero de N días del canal KC.

  2. Calcule el canal KC. El carril medio del canal KC es el promedio móvil simple de los precios de cierre de N días, el carril superior es el carril medio + M veces la volatilidad del rango verdadero de N días, y el carril inferior es el carril medio - M veces la volatilidad del rango verdadero de N días.

  3. Cuando el tren superior de la banda de Bollinger está por debajo del tren superior del canal KC y el tren inferior de la banda de Bollinger está por encima del tren inferior del canal KC, se trata de un apretón.

  4. Cuando el establecimiento está subiendo, las líneas cortas de yang y las liberaciones son señales largas; cuando el establecimiento está cayendo, las líneas cortas de yin y las compresiones son señales cortas.

Ventajas estratégicas

  1. El juicio de tendencia del establecimiento, el comercio de acuerdo con la tendencia.

  2. Cuando el precio toca la línea de stop loss, cierra automáticamente la posición para detener la pérdida.

Riesgos estratégicos

  1. Los parámetros que se establecen incorrectamente para las bandas de Bollinger y los canales de KC pueden dar lugar a juicios erróneos de compresiones y liberaciones.

  2. El juicio de la tendencia del establecimiento se retrasa, lo que puede perder los puntos de inversión de tendencia.

  3. Los acontecimientos repentinos causan movimientos enormes que no pueden ser detenidos, con riesgos considerables de pérdida.

Direcciones para la optimización de la estrategia

  1. Optimizar los parámetros del ciclo de la media móvil del establecimiento para que capte mejor las nuevas tendencias.

  2. Añadir indicadores de volumen de negociación para evitar fallas, como el indicador de marea de energía, acumulación/distribución, etc.

  3. Los juicios de varios marcos de tiempo distinguen entre señales a medio y largo plazo y a corto plazo.

  4. Parámetros de optimización de IA, búsqueda exhaustiva y combinación óptima de parámetros buscados.

Resumen de las actividades


/*backtest
start: 2024-01-17 00:00:00
end: 2024-01-24 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2017

//@version=2
strategy(shorttitle = "Squeeze str 1.1", title="Noro's Squeeze Momentum Strategy v1.1", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
lev = input(1, defval = 1, minval = 1, maxval = 100, title = "leverage")
length = input(20, title="BB Length")
mult = input(2.0,title="BB MultFactor")
lengthKC=input(20, title="KC Length")
multKC = input(1.5, title="KC MultFactor")
useTrueRange = true
mode2 = input(true, defval = true, title = "Mode 2")
usecolor = input(true, defval = true, title = "Use color of candle")
usebody = input(true, defval = true, title = "Use EMA Body")
needbg = input(false, defval = false, title = "Show trend background")
fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

// Calculate BB
source = close
basis = sma(source, length)
dev = multKC * stdev(source, length)
upperBB = basis + dev
lowerBB = basis - dev

// Calculate KC
ma = sma(source, lengthKC)
range = useTrueRange ? tr : (high - low)
rangema = sma(range, lengthKC)
upperKC = ma + rangema * multKC
lowerKC = ma - rangema * multKC

sqzOn  = (lowerBB > lowerKC) and (upperBB < upperKC)
sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC)
noSqz  = (sqzOn == false) and (sqzOff == false)

val = linreg(source  -  avg(avg(highest(high, lengthKC), lowest(low, lengthKC)),sma(close,lengthKC)), lengthKC,0)

bcolor = iff( val > 0, iff( val > nz(val[1]), lime, green), iff( val < nz(val[1]), red, maroon))
scolor = noSqz ? blue : sqzOn ? black : gray 

trend = val > 0 ? 1 : val < 0 ? -1 : 0

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)

//Body
body = abs(close - open)
abody = sma(body, 10) / 3

//Indicator
bcol = iff( val > 0, iff( val > nz(val[1]), lime, green), iff( val < nz(val[1]), red, maroon))
scol = noSqz ? blue : sqzOn ? black : gray 
plot(val, color=bcol, style=histogram, linewidth=4)
plot(0, color=scol, style=cross, linewidth=2)

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up1 = trend == 1 and (bar == -1 or usecolor == false) and (body > abody or usebody == false) and mode2 == false
dn1 = trend == -1 and (bar == 1 or usecolor == false) and (body > abody or usebody == false) and mode2 == false

up2 = trend == 1 and val < val[1] and mode2 
dn2 = trend == -1 and val > val[1] and mode2

exit = (strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price) and mode2

//Trading
lot = strategy.position_size == 0 ? strategy.equity / close * lev : lot[1]

if up1 or up2
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)

if dn1 or dn2
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
    
if exit
    strategy.close_all()

Más.