@ Disposición; ¿Podría ayudarme a convertir el código de Tradestation siguiente en MT4? Inserted Code Choppy Market Index Function Esta función devuelve un valor de 0 a 100. Un valor menor denota una mayor indecisión en el mercado (choppiness), mientras que un valor más alto denota un mercado de tendencia. La entrada única es la cantidad de publicaciones que miramos hacia atrás. Entradas: periodLength (Numérico); Vars: num (0), denom (1); if (periodLengthlt; gt; 0) then begin denom = Highest (High, periodLength) - Lowest (Low, periodLength); Lowest (Low, periodLength); num = Cerrar # 91; periodLength-1Number93; -- Cerca; num = AbsValue (num); ChoppyMarketIndex = 0.0; if (denomlt; gt; 0) luego ChoppyMarketIndex = numdemon * 100; fin; ¿Notaste que esta función estaba compuesta de diferentes propósitos (bloques de construcción)? Calculamos el denom (denominador) empleando las funciones Highest y Lowest. Calculamos el número (numerador) utilizando las funciones AbsValue (devuelve el valor absoluto de un número). El único fragmento de código desconcertante en esta función es probablemente: Código insertado Close # 91; periodLength-1 # 93; - Cerrar podría estar preguntando por qué restamos 1 en el período Largo. Esta es una excelente pregunta. Si incorporas el precio de cierre a algún cálculo, entonces el precio final de 30 días será referenciado por Cerrar [29]. Tenga en cuenta que Close [1] es el precio de cierre de ayer, no el de hoy. Como necesitamos que nuestro índice fluya entre 0 y 100 positivos, eliminamos el signo negativo de un movimiento hacia abajo en el mercado. Solo estamos interesados en las distancias que son absolutas. Esto es lo que se me ocurrió, pero no estoy seguro de que esté codificado correctamente: Código insertado dual ChoppyMarketIndex (int periodLength) double num = 0; double denom = 0 if (periodLength! = 0) denom = High # 91; iHighest (Symbol (), PERIOD_D1, MODE_HIGH, periodLength, 0) # 93; - Low # 91; iLowest (Symbol (), PERIOD_D1, MODE_LOW, periodLength, 0) Number93 ;; num = Cerrar # 91; periodLength-1 # 93; - Cierre # 91; 1 # 93 ;; num = MathAbs (num);/denom = MathAbs (denom); if (denom! = 0) return (NormalizeDouble (numdenom * 100,0)); Gracias de antemano,