
La estrategia determina la dirección de la tendencia del mercado mediante el cálculo de dos promedios móviles indexados (EMA) de dos períodos diferentes, en combinación con la determinación de la dirección de la tendencia y la detección de oportunidades de sobreventa y sobreventa derivadas de la auto-adaptación de Brin, para realizar operaciones de seguimiento de tendencias.
Calcular el 200 ciclo y el 30 ciclo de EMA, 200 EMA mayor que 30 EMA juzgar como la tendencia de la línea larga hacia arriba, de lo contrario juzgar como la tendencia de la línea larga hacia abajo.
Después de determinar la dirección de la tendencia, se calcula el SMA de la banda de Brin con una línea de base, una línea de arriba y una línea de abajo. La línea de base utiliza un período configurable (por ejemplo, 8 períodos), y la banda de ancho de banda utiliza un múltiplo configurable de la diferencia extrema entre los precios más altos y más bajos del mismo período (por ejemplo, 1.3 y 1.1).
Cuando la línea es larga hacia arriba, se considera como un punto de compra cuando el precio se desvía de abajo hacia arriba; cuando la línea es larga hacia abajo, se considera como un punto de venta cuando el precio se desvía de arriba hacia abajo.
Para filtrar falsas rupturas, compruebe si la variación de la línea K anterior en el momento de la ruptura es menor que el valor configurable (por ejemplo, 3%), y compruebe si la distancia entre la banda de Brin y la baja es mayor que la distancia configurable requerida (por ejemplo, 2,2%).
Después de la apertura de la posición, se puede configurar un stop loss (por ejemplo, 3%) y un stop loss (por ejemplo, 10%) para bloquear los beneficios.
Los EMAs dobles juzgan la tendencia principal y evitan abrir posiciones sin orden cuando la tendencia principal no está clara.
El punto de apertura de la banda de Brin se ajusta automáticamente según la tendencia y se ajusta el parámetro de ancho de banda para bloquear aún más la tendencia.
La tasa de variación y el mecanismo de comprobación de la banda ancha mínima filtraron con eficacia las brechas falsas.
El parón de pérdidas está configurado de manera razonable y el riesgo de bloqueo de ganancias es controlado.
La doble EMA no puede determinar con precisión el punto de inflexión y puede haber perdido la oportunidad de cambiar la tendencia.
La configuración incorrecta de los parámetros de la banda de Bryn puede causar una señal falsa.
Los paradores fijos no se adaptan a las fluctuaciones del mercado.
En combinación con otros indicadores para determinar la tendencia, se determina el punto de conversión de la tendencia principal.
El método de ajuste dinámico de los parámetros de la banda de Bryn.
Configuración de la pérdida de un solo parón condicionado y ajuste de la línea de pérdida según las condiciones específicas.
Esta estrategia utiliza el método de seguimiento de la tendencia de seguimiento de la tendencia de seguimiento de la tendencia de seguimiento de la tendencia de seguimiento de la tendencia. La ventaja de la estrategia reside en la configuración razonable de las condiciones de apertura y parada, que pueden bloquear efectivamente la tendencia de ganancias.
/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
//////////////////////////////////////////////////////////////////////
// Component Code Start
testStartYear = input(2019, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testStopYear = input(2039, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)
testPeriod() =>
time >= testPeriodStart and time <= testPeriodStop ? true : false
// Component Code Stop
strategy("Custom Band Strategy", overlay=true)
source = close //종가 기준
//추세 조건 설정
emaLong = ema(source, input(200, minval=0))
emaShort = ema(source, input(30, minval=0))
trend = if emaShort>=emaLong
1
else
-1
plot(emaLong, color=red, transp=0)
plot(emaShort, color=blue, transp=0)
//BB 계산(default 14/3.2)
length = input(8, minval=1)
basis = sma(source, length)
plot(basis, color=green, transp=0)
max=highest(abs(source-basis), length)
factor1 = input(1.3, minval=0.5)
factor2 = input(1.1, minval=0.5)
upper = if trend==1
basis + max*factor1
else
basis + max*factor2
lower = if trend==-1
basis - max*factor1
else
basis - max*factor2
plot1 = plot(upper)
plot2 = plot(lower)
fill(plot1, plot2, transp=80, color=green)
//밴드 이탈 후 재진입 조건 설정
cross_over = (low<=lower and close>=lower) or crossover(close,lower)
cross_under = (high>=upper and close<=upper) or crossunder(close,upper)
//변동율 계산
maxCandle=highest(abs(open-close), length)
roc = abs(open-close)/open*100
changerate = input(3, minval=0.0)
//수익률 계산
value = abs(strategy.position_size)*strategy.position_avg_price
roe = strategy.openprofit/value * 100
expRoeL = (upper-lower)/lower*100
expRoeS = (upper-lower)/upper*100
exp = input(2.2, minval=0.0)
target = input(10, minval=0.0)
stop = input(-3, minval=-10.0)
strategy.close_all(when=roc>=changerate and testPeriod())
strategy.close_all(when=roe>=target and testPeriod())
strategy.close_all(when=roe<=stop and testPeriod())
plotchar(crossover(close,lower) and crossunder(close,upper),color=blue, transp=0, text="cross")
plotchar(roc>=changerate,color=red, transp=0, text="roc")
plotchar(roe>=target,color=blue, transp=0, text="target")
plotchar(roe<=stop,color=green, transp=0, text="stop")
minroe = input(2, minval=0.0)
strategy.close_all(when=cross_under and roe>minroe and testPeriod())
strategy.entry("BBandLE", strategy.long, stop=source, oca_name="BollingerBands", comment="BBandLE", when=(cross_over) and trend==1 and roc<changerate and expRoeL>exp and source>emaLong and strategy.position_size==0 and testPeriod()) //trend==1 and
//else
strategy.close_all(when=cross_over and roe>minroe and testPeriod())
strategy.entry("BBandSE", strategy.short, stop=source, oca_name="BollingerBands", comment="BBandSE", when=(cross_under) and trend==-1 and roc<changerate and expRoeS>exp and source<emaLong and strategy.position_size==0 and testPeriod()) //trend==-1 and