AlgoWizard: Contadores y fórmulas avanzadas para condiciones multi-vela

Cómo construir fórmulas matemáticas con variables, convertir pips a precio correctamente y usar contadores para implementar condiciones que no tienen que cumplirse en la misma vela.

Las variables dejan de ser simples contenedores en cuanto se combinan con fórmulas y se usan para memorizar el estado del mercado entre barras. Es el terreno donde AlgoWizard deja de parecerse a un editor de casillas y empieza a comportarse como un lenguaje de programación en toda regla.

Tabla de contenidos

Fórmulas matemáticas con variables

AlgoWizard ofrece un conjunto de funciones matemáticas combinables con variables e indicadores para construir fórmulas complejas.

OperaciónDescripciónEjemplo de uso
Plus (+)Suma dos valores.EMA(14) + 10 pips
Minus (-)Resta dos valores.EMA(14) - 10 pips
Multiply (*)Multiplica dos valores.ATR(14) * 1.5
Divide (/)Divide dos valores.Precio / 2
Sin / CosFunciones trigonométricas.Análisis cíclico
Get ValueObtiene el valor de un indicador.RSI(14) en barra -1

El flujo recomendado es colocar primero el operador matemático, que divide automáticamente el espacio en dos ramas —izquierda y derecha—, rellenar cada rama con su valor (indicador, variable o número) y anidar operadores adicionales si la fórmula lo requiere.

El error más frecuente: sumar pips como si fueran precio

Sumar o restar un número directamente al precio de un indicador se interpreta como unidades de precio, no como pips, y el error puede ser enorme dependiendo del activo.

ATENCIÓN

Si la EMA de XAUUSD (oro) está en 2.000 dólares y le sumas 20 directamente, el resultado será 2.020 dólares, no 2.000 más 20 pips. Para el oro, 20 pips equivalen aproximadamente a 0,20 dólares. La diferencia entre ambos resultados puede desvirtuar por completo la estrategia.

La función correcta para esta conversión es Convert Pips to Price, disponible en Functions dentro del editor (con su inversa, Convert Price to Pips). Toma el número de pips indicado y lo convierte al valor de precio equivalente para el activo y timeframe con el que se está trabajando, de forma que la suma o resta es correcta independientemente del instrumento.

 

FórmulaResultado
variable 'precio' = EMA(14) + convert_pips_to_price(10)Correcta: suma 10 pips reales al valor de la EMA.
variable 'precio' = EMA(14) + 10Incorrecta: suma 10 unidades de precio, no 10 pips.

CLAVE PRÁCTICA

En lugar de escribir el número de pips fijo dentro de la función de conversión, guárdalo en una variable independiente (por ejemplo 'pips', tipo Double). Esto permite modificar el valor desde el panel del robot en MetaTrader sin recompilar, optimizarlo durante el backtesting y reutilizarlo en varias partes de la estrategia.

El orden de ejecución determina cuándo se actualiza cada variable

AlgoWizard ejecuta la lógica de izquierda a derecha entre pestañas y, dentro de cada pestaña, de arriba abajo. Este flujo se repite en cada apertura de nueva barra, y es lo que garantiza que cualquier variable calculada en la pestaña de Cálculos esté disponible y actualizada cuando el programa llegue a evaluar las condiciones de entrada.

OrdenPestañaQué ocurre
1Calculations (Cálculos)Se actualizan todas las variables y fórmulas en cada nueva barra.
2Trade SignalSe evalúan las condiciones de entrada/salida usando los valores ya actualizados.
3Long Entry / Short EntrySe ejecutan las órdenes si se cumplen las condiciones.
4Long Exit / Short ExitSe gestionan los cierres de posición.

Contadores: memoria de estado entre distintas barras

Los contadores son variables de tipo Integer que actúan como memoria del mercado entre barras, y permiten construir condiciones que no tienen que cumplirse en la misma vela. Imagina una entrada que requiere que el RSI(14) caiga por debajo de 30 y que, algunas velas después, el precio cruce al alza la EMA(14): con una entrada estándar ambas condiciones deberían coincidir en la misma barra; con un contador, la primera condición queda memorizada hasta que se cumple la segunda.

PasoAcción
1Crear una variable Integer, por ejemplo 'contador_1', con valor inicial 0.
2En Calculations, añadir una regla IF: SI RSI(14) < 30 ENTONCES contador_1 = 1. El contador se queda en 1 aunque el RSI vuelva a subir.
3En Long Entry, añadir la condición contador_1 > 0 combinada con el cruce alcista de la EMA(14).
4Justo después de ejecutar la orden en Long Entry, resetear el contador a 0 (paso obligatorio).

ATENCIÓN

Resetear el contador tras la entrada es un paso crítico. Si no se hace, el contador se queda permanentemente en 1 y la condición del RSI queda activa para siempre, ignorando futuras lecturas reales del indicador.

Contador de operaciones acumuladas

Además de los contadores de estado (0 o 1), se pueden crear contadores que lleven la cuenta acumulada de operaciones ejecutadas, incrementando su valor en 1 cada vez que se abre una posición (contador_2 = contador_2 + 1 dentro de Long Entry, justo después de la orden). Para verificarlo, basta con añadir la variable al módulo Debug/Backtesting y comprobar que su valor asciende de forma consistente con cada nueva operación.

Entre los usos avanzados de este tipo de contador están limitar el número máximo de operaciones abiertas simultáneamente, ejecutar una acción especial cada N operaciones, implementar lógica de martingala o anti-martingala contando rachas, o registrar por separado el número de operaciones ganadoras y perdedoras.

Tabla resumen: tipos de variables y sus usos

TipoValoresUso principal
IntegerNúmeros enterosContadores, número de operaciones
DoubleNúmeros decimalesPrecios, pips, indicadores
BooleanTrue / FalseFlags de estado on/off
StringTextoComentarios de orden

Buenas prácticas y errores frecuentes

Buena prácticaRazón
Resetear siempre los contadores tras usarlosSi no se resetean, la condición queda activa permanentemente.
Usar convert_pips_to_price() para sumas/restas de pipsSumar un número fijo al precio no equivale a sumar pips.
Colocar los cálculos antes que las condiciones de entradaAlgoWizard ejecuta de arriba a abajo; el cálculo debe preceder al uso.
Parametrizar los pips como variable DoublePermite optimizarlos en backtesting y modificarlos desde MT4.

NOTA

Las variables no se reinician solas entre barras salvo que se les asigne un nuevo valor. Esta persistencia es precisamente lo que hace posibles los contadores, pero también puede causar errores difíciles de detectar si no se gestiona con cuidado.

Preguntas frecuentes (FAQs)

¿Por qué el resultado de mi fórmula de pips no coincide con lo esperado?

Casi siempre porque se sumó un número directamente al precio de un indicador en lugar de convertirlo primero con convert_pips_to_price(). El error es más visible en activos con precios altos, como el oro o los índices.

¿Se puede exigir que dos condiciones se cumplan en velas distintas?

Sí, mediante un contador: una regla en Calculations memoriza que la primera condición se cumplió, y esa memoria se usa como condición adicional en la entrada, junto a la segunda condición evaluada en tiempo real.

¿Qué pasa si olvido resetear un contador de estado?

El contador se queda en 1 de forma permanente y la condición que memorizaba queda activa para siempre, desconectada de las lecturas reales del indicador que la originó.

¿Cómo verifico que una variable toma el valor correcto durante el backtest?

Activando el módulo Debug (DBA) y añadiendo esa variable a la monitorización; los resultados del backtest incluirán una pestaña con su valor histórico vela a vela.

Sigue leyendo el contenido de esta serie

WikiSQX - AlgoWizard > Contadores y fórmulas avanzadas para condiciones multi-vela

Buscar en la wikiSQX:

Seguir a Quantified Models:

Base de conocimiento:

Índice de esta entrada: