NivelesFibonacci

NIVELES FIBONACCI 1.14 — Proyección de niveles Fibonacci personalizados

Este script para MetaTrader 5 permite calcular y dibujar automáticamente niveles de Fibonacci personalizados a partir de dos precios conocidos y sus correspondientes niveles Fibonacci.

La herramienta utiliza una relación matemática lineal entre los dos puntos introducidos para proyectar cualquier nivel Fibonacci que el usuario desee.

¿Cómo funciona?

El usuario debe introducir:

  • Precio del Punto A
  • Nivel Fibonacci asignado al Punto A
  • Precio del Punto B
  • Nivel Fibonacci asignado al Punto B

A partir de estos dos puntos de referencia, el script calcula automáticamente el precio correspondiente a cada nivel Fibonacci indicado en la lista de niveles.

Por ejemplo:

Punto A → 1.16594 = 100% Punto B → 1.16363 = 423.6%

Con estos datos, el script puede calcular y dibujar niveles como:

0%
23.6%
38.2%
50%
61.8%
100%
161.8%
261.8%
423.6%

Los niveles pueden modificarse libremente desde los parámetros de entrada.

Características principales

  • Proyección matemática de niveles Fibonacci personalizados.
  • Permite utilizar cualquier nivel Fibonacci como referencia.
  • Permite trabajar con niveles positivos o negativos.
  • Lista de niveles completamente configurable.
  • Las líneas se dibujan como líneas horizontales en el gráfico.
  • Adaptación automática al número de decimales del símbolo mediante _Digits.
  • Normalización del precio calculado al número de decimales del activo.
  • Tooltip informativo con el nivel Fibonacci y su precio.
  • Las líneas generadas utilizan un prefijo identificativo para facilitar su gestión.
  • Posibilidad de eliminar todas las líneas generadas por el script mediante la opción ACTION_DELETE.
  • Permite configurar color, estilo y grosor de las líneas.
  • No utiliza indicadores externos ni requiere DLL.

Configuración

En Configuración de Precios Conocidos:

InpPriceA InpFiboLevelA InpPriceB InpFiboLevelB

se introducen los dos puntos conocidos.

En Niveles a Dibujar:

InpTargetLevels

se especifican los niveles que se desean representar, separados por ;.

Ejemplo:

0; 23.6; 38.2; 50; 61.8; 100; 161.8; 261.8; 423.6

Gestión de las líneas

El parámetro InpAction permite elegir entre:

ACTION_DRAW
Calcula y dibuja los niveles configurados.

ACTION_DELETE
Elimina las líneas creadas por este script utilizando el prefijo configurado en InpPrefix.

Importante

Este script es una herramienta matemática y gráfica para la proyección de niveles Fibonacci.

No genera señales de compra o venta, no ejecuta operaciones y no constituye por sí mismo un sistema automático de trading.

Los niveles calculados dependen directamente de los dos precios y niveles Fibonacci introducidos por el usuario.

Versión: 1.14
Plataforma: MetaTrader 5
Tipo: Script
Autor: SPC

//+------------------------------------------------------------------+
//|                                          NIVELESFIBONACCI1.1.mq5 |
//|                                                              SPC |
//|                       https://www.mql5.com/es/users/calimero1166 |
//+------------------------------------------------------------------+
#property copyright "SPC"
#property version   "1.14"
#property script_show_inputs

//--- Enumeración para elegir la acción del script
enum ENUM_SCRIPT_ACTION
  {
   ACTION_DRAW = 0,   // Dibujar Niveles
   ACTION_DELETE = 1  // Borrar Líneas Dibujadas
  };

//--- Parámetros de Entrada (Input Parameters)
input group "=== Acción Principal ==="
input ENUM_SCRIPT_ACTION InpAction     = ACTION_DRAW;  // Acción a realizar

input group "=== Configuración de Precios Conocidos ==="
input double          InpPriceA        = 1.16594;      // Precio del Punto A
input double          InpFiboLevelA    = 100.0;        // Nivel Fibo asignado al Punto A (%)
input double          InpPriceB        = 1.16363;      // Precio del Punto B
input double          InpFiboLevelB    = 423.6;        // Nivel Fibo asignado al Punto B (%)

input group "=== Niveles a Dibujar ==="
input string          InpTargetLevels  = "0; 23.6; 38.2; 50; 61.8; 100; 161.8; 261.8; 423.6"; // Niveles Fibo % (Separados por ;)

input group "=== Estilo de las Líneas Horizontales ==="
input color           InpLineColor     = clrOrange;    // Color de las líneas
input ENUM_LINE_STYLE InpLineStyle     = STYLE_SOLID;  // Estilo de línea
input int             InpLineWidth     = 3;            // Grosor de línea
input string          InpPrefix        = "FiboCustom_";// Prefijo para identificar las líneas

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   // 1. Si la acción elegida es BORRAR, ejecutamos la función de limpieza y salimos
   if(InpAction == ACTION_DELETE)
     {
      DeleteFiboLines(InpPrefix);
      ChartRedraw(0);
      Print("NIVELESFIBONACCI1.1 (v1.14): Se han eliminado todas las líneas con prefijo '", InpPrefix, "'.");
      return;
     }

   // 2. Validación para evitar división por cero en modo DIBUJAR
   if(InpFiboLevelA == InpFiboLevelB)
     {
      Print("Error: Los niveles Fibo A y B no pueden ser idénticos.");
      return;
     }

   // 3. Procesar el texto de niveles personalizados introducido por el usuario
   double targetLevels[];
   ushort u_sep = StringGetCharacter(";", 0);
   string rawLevels[];
   int totalSplit = StringSplit(InpTargetLevels, u_sep, rawLevels);

   if(totalSplit <= 0)
     {
      Print("Error: No se han especificado niveles válidos en InpTargetLevels.");
      return;
     }

   ArrayResize(targetLevels, totalSplit);
   int validCount = 0;

   for(int i = 0; i < totalSplit; i++)
     {
      string trimmed = rawLevels[i];
      StringTrimLeft(trimmed);
      StringTrimRight(trimmed);

      if(StringLen(trimmed) > 0)
        {
         // Validación para omitir valores que no sean numéricos (ej. "abc")
         double val = StringToDouble(trimmed);
         if(val == 0.0 && trimmed != "0" && trimmed != "0.0" && trimmed != "0,0")
           {
            Print("Aviso: El nivel '", trimmed, "' no es un número válido y será ignorado.");
            continue;
           }

         targetLevels[validCount] = val;
         validCount++;
        }
     }

   if(validCount == 0)
     {
      Print("Error: No se pudieron interpretar los niveles de Fibonacci especificados.");
      return;
     }

   // 4. Cálculo de la variación de precio por cada 1% de Fibonacci
   double pricePerUnit = (InpPriceB - InpPriceA) / (InpFiboLevelB - InpFiboLevelA);

   // 5. Proyección y trazado directo adaptado a los decimales del activo (_Digits)
   for(int i = 0; i < validCount; i++)
     {
      double currentPct = targetLevels[i];
      double rawPrice = InpPriceA + (pricePerUnit * (currentPct - InpFiboLevelA));
      
      // Normalización del precio al número exacto de decimales del símbolo actual
      double targetPrice = NormalizeDouble(rawPrice, _Digits);

      string objName = InpPrefix + DoubleToString(currentPct, 1);

      // Eliminar el objeto previo si existía para actualizar el trazo
      ObjectDelete(0, objName);

      if(ObjectCreate(0, objName, OBJ_HLINE, 0, 0, targetPrice))
        {
         ObjectSetInteger(0, objName, OBJPROP_COLOR, InpLineColor);
         ObjectSetInteger(0, objName, OBJPROP_STYLE, InpLineStyle);
         ObjectSetInteger(0, objName, OBJPROP_WIDTH, InpLineWidth);
         ObjectSetInteger(0, objName, OBJPROP_SELECTABLE, true);
         ObjectSetInteger(0, objName, OBJPROP_SELECTED, false);

         // Formato dinámico del valor visual con los decimales automáticos del activo (_Digits)
         string tooltip = StringFormat("Fibo %.1f%% : %.*f", currentPct, _Digits, targetPrice);
         ObjectSetString(0, objName, OBJPROP_TOOLTIP, tooltip);
        }
     }

   ChartRedraw(0);
   Print("NIVELESFIBONACCI1.1 (v1.14): Proyección completada con ", validCount, " niveles válidos.");
  }

//+------------------------------------------------------------------+
//| Función auxiliar para borrar objetos por prefijo                 |
//+------------------------------------------------------------------+
void DeleteFiboLines(string prefix)
  {
   int totalObjects = ObjectsTotal(0, -1, -1);
   
   // Recorremos los objetos en orden inverso para evitar desajustes de índice al eliminar
   for(int i = totalObjects - 1; i >= 0; i--)
     {
      string objName = ObjectName(0, i, -1);
      if(StringFind(objName, prefix) == 0)
        {
         ObjectDelete(0, objName);
        }
     }
  }
//+------------------------------------------------------------------+
More from author
TendenciaPrecioFecha
Sergio Piqueras Cuevas
AutoFindBestTrendLine — Detector Automático de Líneas de Tendencia Descripción general: AutoFindBestTrendLine es una utilidad para MetaTrader 5 que analiza el historial del gráfico y detecta automáticamente la mejor línea de tendencia posible, ya sea de máximos (resistencias), mínimos (soportes) o ambos. El script identifica los dos puntos más relevantes y dibuja una línea óptima basada en el número de toques reales sobre el precio. Ventajas principales: Detección automática de líneas de tendenc
FREE
Nivelesfibonacci2
Sergio Piqueras Cuevas
NIVELESFIBONACCI2.12 — Órdenes Pendientes sobre Niveles Fibonacci Personalizados Este script para MetaTrader 5 permite colocar automáticamente órdenes pendientes de compra o venta utilizando como referencia los niveles Fibonacci horizontales previamente dibujados en el gráfico. El script está diseñado para funcionar conjuntamente con NIVELESFIBONACCI1.1 , aunque puede utilizar cualquier conjunto de líneas horizontales que siga la misma estructura de nombres mediante el prefijo configurado. La pr
FREE
Filter:
No reviews
Reply to review