Creando Senales Accionables
Una buena senal de trading es accionable . Le dice al trader:
Donde entrar
Donde colocar el stop loss
Donde tomar ganancias
Siempre incluye Entrada, Stop Loss y al menos un Take Profit en tus senales.
Estructura de Senal
Senal de COMPRA Completa
{
"points" : [
{
"time" : 1765540800 ,
"type" : "low" ,
"price" : 1.1725 ,
"label" : "COMPRA" ,
"color" : "#3b82f6" ,
"shape" : "arrowUp" ,
"size" : 2
},
{
"time" : 1765540800 ,
"type" : "low" ,
"price" : 1.1695 ,
"label" : "SL" ,
"color" : "#ef4444" ,
"shape" : "square" ,
"size" : 1
},
{
"time" : 1765540800 ,
"type" : "high" ,
"price" : 1.1755 ,
"label" : "TP1" ,
"color" : "#22c55e" ,
"shape" : "circle" ,
"size" : 1
},
{
"time" : 1765540800 ,
"type" : "high" ,
"price" : 1.1785 ,
"label" : "TP2" ,
"color" : "#22c55e" ,
"shape" : "circle" ,
"size" : 1
},
{
"time" : 1765540800 ,
"type" : "high" ,
"price" : 1.1815 ,
"label" : "TP3" ,
"color" : "#22c55e" ,
"shape" : "circle" ,
"size" : 1
}
],
"metadata" : {
"tipo_senal" : "COMPRA" ,
"entrada" : 1.1725 ,
"sl" : 1.1695 ,
"tp1" : 1.1755 ,
"tp2" : 1.1785 ,
"tp3" : 1.1815 ,
"riesgo_pips" : 30 ,
"riesgo_beneficio" : "1:3"
}
}
Gestion de Riesgo
Calcular Riesgo/Beneficio
def calcular_riesgo_beneficio ( entrada , stop_loss , take_profit ):
"""Calcular ratio riesgo/beneficio."""
riesgo = abs (entrada - stop_loss)
beneficio = abs (take_profit - entrada)
return beneficio / riesgo if riesgo > 0 else 0
# Ejemplo
entrada = 1.1725
sl = 1.1695
tp = 1.1815
rb = calcular_riesgo_beneficio(entrada, sl, tp)
print ( f "Riesgo/Beneficio: 1: { rb :.1f} " ) # Salida: Riesgo/Beneficio: 1:3.0
Requisitos Minimos de R:B
Calidad de Senal R:B Minimo Estandar 1:1 Buena 1:2 Excelente 1:3+
Senales con R:B menor a 1:1 generalmente no valen la pena. Considera filtrarlas.
Jerarquia Visual
Recomendaciones de Tamano
Elemento Tamano Por Que Entrada 2 Mas importante - llama la atencion Stop Loss 1 Secundario - siempre visible Take Profits 1 Secundario - muestra objetivos
Consistencia de Colores
Siempre usa colores consistentes:
Elemento Color Hex Entrada COMPRA Azul #3b82f6Entrada VENTA Naranja #f97316Stop Loss Rojo #ef4444Take Profit Verde #22c55eNeutral/Info Amarillo #eab308
Mejores Practicas de Labels
HACER
Usa labels cortos: COMPRA, VENTA, TP1, SL
Se consistente entre senales
Incluye numeros de nivel para TPs: TP1, TP2, TP3
NO HACER
Evita labels largos: Entrada de Compra Aqui en Soporte
No uses caracteres especiales que puedan no renderizar
No mezcles convenciones de nombres
Alineacion de Tiempo
Siempre usa el valor time del endpoint /bars. Nunca calcules timestamps manualmente.
# CORRECTO
barras = obtener_barras( "EURUSD" , 60 )
tiempo_senal = barras.iloc[ - 1 ][ "time" ] # Usar time de la API
# INCORRECTO
tiempo_senal = int (datetime.now().timestamp()) # Puede no alinearse con barras
Multiples Senales en la Misma Barra
Puedes colocar multiples puntos en la misma barra usando el mismo valor de time:
puntos = [
{ "time" : tiempo_barra, "type" : "low" , "price" : entrada, "label" : "COMPRA" , ... },
{ "time" : tiempo_barra, "type" : "low" , "price" : sl, "label" : "SL" , ... },
{ "time" : tiempo_barra, "type" : "high" , "price" : tp1, "label" : "TP1" , ... },
]
Incluye metadata para trackear rendimiento de senales:
metadata = {
# Detalles de senal
"tipo_senal" : "COMPRA" ,
"precio_entrada" : 1.1725 ,
"stop_loss" : 1.1695 ,
"take_profits" : [ 1.1755 , 1.1785 , 1.1815 ],
# Metricas de riesgo
"riesgo_pips" : 30 ,
"ganancia_pips" : 90 ,
"riesgo_beneficio" : "1:3" ,
# Info de estrategia
"estrategia" : "ICT Order Block" ,
"timeframe" : "H1" ,
"factores_confluencia" : [ "OB" , "FVG" , "Tendencia HTF" ],
# Confianza
"confianza" : "alta" , # baja, media, alta
# Timestamp
"generado_en" : datetime.utcnow().isoformat()
}
Filtrar Senales de Baja Calidad
Antes de enviar, filtra senales debiles:
def es_senal_calidad ( entrada , sl , tp , rb_minimo = 1.5 ):
"""Verificar si la senal cumple criterios de calidad."""
rb = calcular_riesgo_beneficio(entrada, sl, tp)
return rb >= rb_minimo
# Filtrar senales
senales_calidad = [
s for s in todas_senales
if es_senal_calidad(s[ "entrada" ], s[ "sl" ], s[ "tp" ])
]
Frecuencia de Actualizacion
Timeframe Actualizacion Recomendada M1 Cada 1 minuto M5 Cada 5 minutos M15 Cada 15 minutos H1 Cada hora H4 Cada 4 horas D1 Una vez al dia
No actualices demasiado frecuentemente - desperdicia llamadas API y puede causar parpadeo visual.
Checklist
Antes de desplegar tu indicador:
Verificar alineacion de tiempo
Las senales aparecen en las velas correctas
Verificar jerarquia visual
La entrada es prominente, TPs/SL son secundarios
Validar ratios R:B
Todas las senales cumplen requisitos minimos de R:B
Probar en multiples timeframes
El indicador funciona en H1, H4, D1
Agregar manejo de errores
Maneja errores de API graciosamente
Incluir metadata
Trackea rendimiento de senales
Siguientes Pasos
Integracion Continua Configura actualizaciones automaticas de senales
SDK Python Referencia completa de Python