
Se trata de una estrategia de seguimiento de tendencias diseñada en base a indicadores de la tabla de equilibrio de primera vista. La estrategia utiliza las líneas de conversión, las líneas de referencia y la forma de la nube de la tabla de equilibrio de primera vista, establece condiciones de entrada muy estrictas y cierra los pedidos con un simple método de stop loss.
La estrategia utiliza la línea de conversión de la tabla de equilibrio, la línea de referencia, la línea frontal A, la línea frontal B y la relación entre el precio en sí para determinar la dirección y la fuerza de la tendencia. Los criterios específicos de evaluación son los siguientes:
Cuando todas las condiciones anteriores se cumplen simultáneamente, se genera una señal de compra; cuando todas las condiciones se invierten, se genera una señal de venta.
La estrategia también establece la línea A delantera como la línea de parada. Cuando el precio se rompe la línea de parada, se elimina la posición correspondiente.
Esta es una estrategia muy estricta en términos de condiciones, por lo que es eficaz para evitar la interferencia de señales falsas y así bloquear la oportunidad de una gran tendencia. Al mismo tiempo, la estrategia utiliza varios indicadores para juzgar la tendencia, evitando el riesgo sistemático de que un solo indicador se equivoque.
Esta estrategia es adecuada para la tenencia de líneas largas, que puede reducir la frecuencia de las transacciones y ayudar a reducir los costos de las transacciones y el impacto de los puntos de deslizamiento.
La estrategia tiene un límite de pérdidas más flexible, el horizonte A. Esto puede generar un riesgo más alto de pérdidas individuales. Se puede considerar el endurecimiento del límite de pérdidas o el uso de indicadores auxiliares para controlar el riesgo.
Además, hay menos señales de estrategia y es posible que se pierdan algunas oportunidades de corto plazo. Si se persigue una mayor frecuencia de operaciones, se puede considerar reducir la rigidez de algunas de las condiciones de entrada.
Se puede considerar un equilibrio relajado en las condiciones de entrada, reduciendo el umbral de entrada para obtener más señales; o elevar el estándar para eliminar más ruido y bloquear señales menos refinadas.
El modo de detener el daño se puede optimizar, probando métodos como el detener el daño automático o el detener el daño remoto para controlar el daño individual.
Se puede probar el efecto de diferentes parámetros en los resultados para encontrar la combinación óptima de parámetros. También se puede agregar otros indicadores para calificar y lograr una gestión de pedidos más precisa.
Esta es una estrategia de seguimiento de tendencias muy rigurosa. Utiliza varios indicadores de la tabla de equilibrio para determinar la dirección y la intensidad de la tendencia a simple vista y evitar falsas señales. Al mismo tiempo, utiliza un método de detención relajado para bloquear la tendencia de la línea larga.
/*backtest
start: 2024-01-10 00:00:00
end: 2024-01-17 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy(title="BadaBing Ichimoku", shorttitle="BadaBing", overlay=true)
atr_period = input(title="ATR Period", defval=20)
conversion_period = input(title="Conversion Line Period", defval=9, minval=1)
base_period = input(title="Base Line Period", defval=26, minval=1)
span_b_period = input(title="Span B Period", defval=52, minval=1)
displacement = input(title="Displacement", defval=26, minval=1)
min_current_cloud_atr = input(title="Min Current Cloud ATR", type=float, defval=1.0)
min_future_cloud_atr = input(title="Min Future Cloud ATR", type=float, defval=0)
check_base_line_above_cloud = input(title="Check Base Line above Cloud?", type=bool, defval=true)
check_conversion_line_above_base_line = input(title="Check Conversion Line above Base Line?", type=bool, defval=true)
check_price_above_conversion_line = input(title="Check Price above Conversion Line?", type=bool, defval=true)
check_span_a_point_up = input(title="Check Current Span A is pointing Up?", type=bool, defval=false)
check_span_b_point_up = input(title="Check Current Span B is pointing Up?", type=bool, defval=false)
check_future_span_a_point_up = input(title="Check Future Span A is pointing Up?", type=bool, defval=true)
check_future_span_b_point_up = input(title="Check Future Span B is pointing Up?", type=bool, defval=true)
check_base_line_point_up = input(title="Check Base Line is Pointing Up?", type=bool, defval=true)
check_conversion_line_point_up = input(title="Check Conversion Line is Pointing Up?", type=bool, defval=true)
bullish_color = #ccff99
bearish_color = #ff704d
span_a_color = #0000cc
span_b_color = #000066
conversion_color = #ff99ff
base_color = #4da6ff
bull_signal_color = #228b22
bear_signal_color = #990000
donchian(len) => avg(lowest(len), highest(len))
bchange(series) => series and not series[1]
conversion_line = donchian(conversion_period)
base_line = donchian(base_period)
future_span_a = avg(conversion_line, base_line)
future_span_b = donchian(span_b_period)
span_a = future_span_a[displacement]
span_b = future_span_b[displacement]
current_atr = atr(atr_period)
min_cloud_width = min_current_cloud_atr * current_atr
current_cloud_long_flag = span_a > (span_b + min_cloud_width)
current_cloud_short_flag = span_a < (span_b - min_cloud_width)
future_cloud_long_flag = future_span_a > (future_span_b + min_cloud_width)
future_cloud_short_flag = future_span_a < (future_span_b - min_cloud_width)
base_line_long_flag = check_base_line_above_cloud ? (base_line > span_a) : true
base_line_short_flag = check_base_line_above_cloud ? (base_line < span_a) : true
conversion_line_long_flag = check_conversion_line_above_base_line ? (conversion_line > base_line) : true
conversion_line_short_flag = check_conversion_line_above_base_line ? (conversion_line < base_line) : true
price_long_flag = check_price_above_conversion_line ? (close > conversion_line) : true
price_short_flag = check_price_above_conversion_line ? (close < conversion_line) : true
span_a_point_long_flag = check_span_a_point_up ? (span_a > span_a[1]) : true
span_a_point_short_flag = check_span_a_point_up ? (span_a < span_a[1]) : true
span_b_point_long_flag = check_span_b_point_up ? (span_b > span_b[1]) : true
span_b_point_short_flag = check_span_b_point_up ? (span_b < span_b[1]) : true
future_span_a_point_long_flag = check_future_span_a_point_up ? (future_span_a > future_span_a[1]) : true
future_span_a_point_short_flag = check_future_span_a_point_up ? (future_span_a < future_span_a[1]) : true
future_span_b_point_long_flag = check_future_span_b_point_up ? (future_span_b > future_span_b[1]) : true
future_span_b_point_short_flag = check_future_span_b_point_up ? (future_span_b < future_span_b[1]) : true
base_line_point_long_flag = check_base_line_point_up ? (base_line > base_line[1]) : true
base_line_point_short_flag = check_base_line_point_up ? (base_line < base_line[1]) : true
conversion_line_point_long_flag = check_conversion_line_point_up ? (conversion_line > conversion_line[1]) : true
conversion_line_point_short_flag = check_conversion_line_point_up ? (conversion_line < conversion_line[1]) : true
bada_long = bchange(current_cloud_long_flag)
or bchange(future_cloud_long_flag)
or bchange(base_line_long_flag)
or bchange(conversion_line_long_flag)
or bchange(price_long_flag)
or bchange(span_a_point_long_flag)
or bchange(span_b_point_long_flag)
or bchange(future_span_a_point_long_flag)
or bchange(future_span_b_point_long_flag)
or bchange(base_line_point_long_flag)
or bchange(conversion_line_point_long_flag)
bada_short = bchange(current_cloud_short_flag)
or bchange(future_cloud_short_flag)
or bchange(base_line_short_flag)
or bchange(conversion_line_short_flag)
or bchange(price_short_flag)
or bchange(span_a_point_short_flag)
or bchange(span_b_point_short_flag)
or bchange(future_span_a_point_short_flag)
or bchange(future_span_b_point_short_flag)
or bchange(base_line_point_short_flag)
or bchange(conversion_line_point_short_flag)
bada_color = bada_long ? bull_signal_color : bear_signal_color
plotshape(bada_long or bada_short, title="bada",
style=shape.circle,
location=location.belowbar,
color=bada_color,
transp=50)
bing_long = current_cloud_long_flag
and future_cloud_long_flag
and base_line_long_flag
and conversion_line_long_flag
and price_long_flag
and span_a_point_long_flag
and span_b_point_long_flag
and future_span_a_point_long_flag
and future_span_b_point_long_flag
and base_line_point_long_flag
and conversion_line_point_long_flag
bing_short = current_cloud_short_flag
and future_cloud_short_flag
and base_line_short_flag
and conversion_line_short_flag
and price_short_flag
and span_a_point_short_flag
and span_b_point_short_flag
and future_span_a_point_short_flag
and future_span_b_point_short_flag
and base_line_point_short_flag
and conversion_line_point_short_flag
bing_color = bing_long ? bull_signal_color : bear_signal_color
plotshape(bchange(bing_long or bing_short), title="bing",
style=shape.diamond,
location=location.abovebar,
color=bing_color,
transp=0)
c = plot(conversion_line, color=conversion_color, title="Conversion Line", linewidth=2)
b = plot(base_line, color=base_color, title="Base Line", linewidth=2)
p1 = plot(future_span_a, offset = displacement, color=span_a_color, title="Span A", linewidth=3)
p2 = plot(future_span_b, offset = displacement, color=red, title="Span B", linewidth=3)
fill(p1, p2, color = future_span_a > future_span_b ? bullish_color : bearish_color, transp = 60)
strategy.entry("long", true, 1, when=bing_long)
strategy.exit("stop", "long", stop=span_a)
strategy.close("long", when=close < base_line)
strategy.entry("short", false, 1, when=bing_short)
strategy.exit("stop", "short", stop=span_a)
strategy.close("short", when=close > base_line)