
La estrategia predice la tendencia mediante la determinación de las columnas de columnas de columnas significativas de la línea K, y en combinación con las señales de ruptura, emite una señal de negociación. La estrategia filtra las líneas K demasiado pequeñas y solo analiza las columnas de columnas significativas de columnas de columnas para evitar la interferencia de caídas y bajadas demasiado frecuentes, lo que hace que la señal sea más estable y confiable.
El cuerpo de la longitud real de la línea K actual, si es mayor que 3 veces el promedio de los últimos 6 cuerpos de la línea K, se considera un cuerpo de columnas de significado.
Si 3 columnas consecutivas de columnas significativas de columnas son líneas positivas, se considera una señal de múltiples cabezas; si 3 columnas consecutivas de columnas significativas de columnas son líneas negativas, se considera una señal de cabezas vacías.
Al mismo tiempo que se juzga la señal, también se generan señales de negociación adicionales si el precio alcanza un punto alto o bajo antes de la ruptura.
Utiliza la línea media SMA como filtro y abre una posición solo cuando el precio rompe la SMA.
Después de mantener la posición, si el precio vuelve a romper el punto de entrada o la línea media SMA, se cancela la posición.
El uso de filtros de columnas de significado para determinar tendencias puede filtrar la interferencia innecesaria y hacer que la señal sea más clara.
La combinación de señales de tendencia y señales de ruptura mejora la calidad de la señal y reduce las señales falsas.
El filtro de la línea media SMA evita la búsqueda de alzas y bajas. Comprar por debajo del cierre y vender por encima del cierre aumenta la fiabilidad de la señal.
Establezca condiciones de parada de pérdidas para detener la parada de pérdidas a tiempo, lo que ayuda a conservar los fondos.
Esta estrategia es más radical y utiliza señales de juicio de 3 líneas K que pueden confundir una oscilación a corto plazo con una reversión de tendencia.
Los datos de las pruebas son insuficientes y pueden variar según la variedad y el ciclo.
No se ha incorporado el control de posiciones nocturnas en el disco nocturno, existe el riesgo de posiciones nocturnas.
Los parámetros de la columna de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de columnas de col
Se puede probar el efecto de los diferentes parámetros de ciclo para encontrar el ciclo óptimo.
Se puede agregar el stop loss ATR para controlar el riesgo.
Se puede considerar la adición de lógica de control de posición durante la noche.
Esta estrategia utiliza el filtro de la línea de columnas de significado y el juicio de la tendencia, combinado con la formación de señales de negociación de ruptura, para filtrar eficazmente las pequeñas fluctuaciones innecesarias, la señal es más clara y confiable. Sin embargo, debido a que el ciclo de juicio es corto, puede haber un cierto riesgo de error de juicio.
/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-02 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//AlexInc
//2018
// закрытие - вычислить и в течение скольки-то баров его добиваться
// если нет, то по первому противоположному
// по стоп-лоссу в любом случае - стоп вычислить
//@version=2
strategy(title = "AlexInc's Bar v1.2", shorttitle = "AlexInc Bar 1.2", overlay = true, 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")
usemar = input(false, defval = false, title = "Use Martingale")
tryprofitbars = input(6, defval = 6, minval = 1, maxval = 100, title = "Number of candles to take profit anyway")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
useSMAfilter = input(false, defval = true, title = "Use SMA filter")
SMAlimit = input(10, defval = 10, minval = 1, maxval = 30, title = "SMA filter limit")
bodysizeMlt = input(3, defval = 3, minval = 1, maxval = 10, title = "Body Size Multiplier")
meanfulbardiv = input(3, title = "Meanful Bar size Divider")
showarr = input(false, defval = false, title = "Show Arrows")
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")
//SMA #
index = 0
index := barstate.isfirst ==true ? 0 : nz(index[1])+1
buyindex = 0
buyindex := barstate.isfirst ==true ? 0 : buyindex[1]
sellindex = 0
sellindex := barstate.isfirst ==true ? 0 : sellindex[1]
//predictprofit = barstate.isfirst ==true ? 0 : predictprofit[1]
smafilter = sma(close, SMAlimit)
//Body
body = abs(close - open)
range = abs(high - low)
abody = sma(body, 6)
max3 = 0
if body >= body[1] and body >= body[2]
max3 := body
else
if body[1] >= body and body[1] >= body[2]
max3 := body[1]
else
if body[2] >= body and body[2] >= body[1]
max3 := body[2]
prevmax3 = 0
prevmax3 := nz(max3[1])
bar = close > open ? 1 : close < open ? -1 : 0
firstbullishopen = 0
firstbullishopen := bar == 1 and bar[1] != 1 ? open : nz(firstbullishopen[1])
firstbearishopen = 0
firstbearishopen := bar == -1 and bar[1] != -1 ? open : nz(firstbearishopen[1])
meanfulbar = body > abody / meanfulbardiv
meanfulbearish = 0
meanfulbearish := nz(meanfulbearish[1])
meanfulbullish = 0
meanfulbullish := nz(meanfulbullish[1])
if meanfulbar
if bar == 1
meanfulbullish := 1 + meanfulbullish
meanfulbearish := 0
else
if bar == -1
meanfulbearish := 1 + meanfulbearish
meanfulbullish := 0
plot(min(low, high)-10, style=circles, color = meanfulbar ? yellow:black, linewidth=3)
//Signals
up1 = (meanfulbearish >= 3) and (close < firstbullishopen or 1) and (strategy.position_size == 0 or close < strategy.position_avg_price) and body > abody / 5 and (useSMAfilter == false or close < smafilter)
if up1 == true
predictprofit = sma(body, 3)
up2 = sma(bar, 1) == -1 and body > prevmax3 * bodysizeMlt and (strategy.position_size == 0 or close < strategy.position_avg_price) and body > abody / 5 and (useSMAfilter == false or close < smafilter)
if up2 == true
predictprofit = body * 0.5
plot(min(low, high), style=circles, color = up1?blue:up2?green:gray, linewidth=3)
dn1 = (meanfulbullish >= 3) and (close > firstbearishopen or 1) and (strategy.position_size == 0 or close > strategy.position_avg_price) and body > abody / 5 and (useSMAfilter==false or close > smafilter)
if dn1 ==true
predictprofit = sma(body, 3)
dn2 = sma(bar, 1) == 1 and body > prevmax3 * bodysizeMlt and (strategy.position_size == 0 or close > strategy.position_avg_price) and body > abody / 5 and (useSMAfilter==false or close > smafilter)
if dn2 ==true
predictprofit = body * 0.5
plot(max(low, high), style=circles, color = dn1?blue:dn2?green:gray, linewidth=3)
exit = (((strategy.position_size > 0 and bar == 1 ) or (strategy.position_size < 0 and bar == -1)) and body > abody / 2 )
// or index >= buyindex (or sellindex) + tryprofitbars
//Arrows
col = exit ? black : up1 or dn1 ? blue : up2 or dn2 ? red : na
needup = up1 or up2
needdn = dn1 or dn2
needexitup = exit and strategy.position_size < 0
needexitdn = exit and strategy.position_size > 0
plotarrow(showarr and needup ? 1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needdn ? -1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needexitup ? 1 : na, colorup = black, colordown = black, transp = 0)
plotarrow(showarr and needexitdn ? -1 : na, colorup = black, colordown = black, transp = 0)
//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]
if up1 or up2
if strategy.position_size < 0
strategy.close_all()
buyindex = index
sellindex = index
if strategy.position_size == 0
buyindex = index
strategy.entry("Long", strategy.long, needlong == false ? 0 : lot )
if dn1 or dn2
if strategy.position_size > 0
strategy.close_all()
buyindex = index
sellindex = index
if strategy.position_size == 0
sellindex = index
strategy.entry("Short", strategy.short, needshort == false ? 0 : lot )
if exit
strategy.close_all()