Como dibujar un rectangulo con un Fibo

 

Hola!

                Necesito ayuda, soy novato y quiero crear un panel (indicador, no EA) con un boton que al presionarlo me permita dibujar un fibo igual que la funcion Fibo del MT4 pero con la peculiaridad de que al mismo tiempo entre el Nivel Fibo (Label) 61.8 y el Nivel Fibo (Label) 80.9 me dibuje un rectangulo relleno, mi principal problema no son los botones del panel es obtener las coordenadas del punto inicial ( Nivel Fibo (Label) 61.8 ) y punto final ( Nivel Fibo (Label) 80.9 ) para la creacion del rectangulo, ¿Puede alguien ayudarme?


Muchas gracias

 
xyon126:

  • Por lo general, las personas que no pueden codificar no reciben ayuda gratuita en este foro, aunque podría suceder si tiene suerte. Sea paciente.
  • Si muestra sus intentos y describe su problema con claridad, lo más probable es que reciba una respuesta de la comunidad.
  • Si no quiere aprender a codificar, eso no es un problema. Puede mirar la sección CodeBase si ya existe algo gratuito, o en el Market para productos de pago (también a veces gratis).
  • Por último, también tiene la opción de contratar un programador en la sección Freelance.

Buena suerte.

 

Hola Miguel!

                   No se si darte las gracias o darte un consejo, me demuestras con tu respuesta muy poco artruismo y el porque este foro español da vergüenza si lo comparamos con los mismos foros de otro idioma, los españoles somos tan creidos que damos asco, te voy a responder a tus preguntas:


  • Por lo general, las personas que no pueden codificar no reciben ayuda gratuita en este foro, aunque podría suceder si tiene suerte. Sea paciente.
Soy muy paciente, sobre todo en este foro ya que poca ayuda a dia de hoy he recibido, si yo como Ingeniero mecanico y profesor de CATIA V4 y CATIA V5 por toda europa en especial en Alemania hubiese actuado con los mismos pensamientos actualmente no habrian tantos Ingenieros dominando esos soft, por suerte no he pensado jamas asi y despues de mis clases perdi sin agradecimiento alguno en España muchas horas y puñaladas, todo lo contrario que fuera de España (Alemania, Rumania, Hungria, Francia, Suiza y Austria)  donde hoy dia ya jubilado recibo muestras de mis alumnos de esos paises (ninguno de España) gratitud y felicitaciones, nos deberia de dar vergüenza a todos, damos asco, somos tercer mundistas por eso fuera de España incluso en Portugal dicen que Europa empieza a partir de los Pirineos y razon tienen.
  • Si muestra sus intentos y describe su problema con claridad, lo más probable es que reciba una respuesta de la comunidad.
Referente a los intentos, siempre comentemos el error de hablar antes de pensar y mirar, para tu información mira este link y fecha. https://www.mql5.com/es/forum/368205#comment_22087788
  • Si no quiere aprender a codificar, eso no es un problema. Puede mirar la sección CodeBase si ya existe algo gratuito, o en el Market para productos de pago (también a veces gratis).
Sobre aprender, me parece que debes de tener TDA, o algo similar, mas bien DCL o tambien para los super cultos "Deficiencia de Comprension Lectora" púes veo que no has leido o entendido lo ultimo por mi escrito, " mi principal problema no son los botones del panel es obtener las coordenadas del punto inicial ( Nivel Fibo (Label) 61.8 ) y punto final ( Nivel Fibo (Label) 80.9 ) para la creacion del rectangulo, ¿Puede alguien ayudarme? "  pues aqui indico que esa parte de codigo no he encontrado informacion para seguir.
  • Por último, también tiene la opción de contratar un programador en la sección Freelance.

Aqui posibleblemente lo que esperas es que te pida un presupuesto para hacermelo, puedes estar seguro que a ti con tu ayuda serias el ultimo, incluso gratis.


Un consejo Miguel, antes de postear elimina tu soberbia no es muy util, yo estoy jubilado pero tu lo tienes muy crudo en un futuro como no cambies de pensamientos y actuaciones y mas si todos los de tu edad pensais igual, a este paso España se ira a la Mier..... gracias a vosotros y vuestros pensamientos, pero tengo la esperanza de que todos no son iguales y hay alguno con mas valor y no pensar solo en si mismo, para eso ya tenemos a los politicos, dedicate a la politica que son iguales a ti.

    Copiar y pegar rectangulo.
    Copiar y pegar rectangulo.
    • 2021.04.28
    • www.mql5.com
    Buenos dias! Necesito ayuda para un Indicador. ¿Como podria crear un rectangulo relleno y copiarlo y moverlo a otra posicion...
     

    Hola!


                         Como comentaba en mi anterior post mi problema es poder obtener las cordenadas del Fibo y el otro problema el poder generar el Fibo con dos clics de raton despues de presionar el boton adecuado y no automaticamente como me sale actualmente, el otro problema es que habiendo un Fibo al querer crear otro me lo dibuja encima del anterior y me borra el Fibo, cuando en realidad lo que necesito es que se queden ambos o los seis posibles con sus rectangulos correspondientes y en un momento dado poder borrar los fibos pero dejando los rectangulos, a continuación os paso el codigo generado hasta el momento; el boton de "Limpiar Chart" borra todo lo existente en el Chat escepto los botones; aqui esta el codigo:


    CODIGO ACTUAL:

    //+------------------------------------------------------------------+
    //|                                           MHS_Panel-Fibos_v0.mq4 |
    //|                                     Copyright Septiembre, 2021,  |
    //|                                             © ® Code Nr.: 202198 |
    //+------------------------------------------------------------------+
    #property copyright ""
    #property link      ""
    #property description "Panel de Fibos"
    #property version     "0"
    #property strict
    //+------------------------------------------------------------------+
    //| Custom indicator initialization function                         |
    //+------------------------------------------------------------------+
    //--- input parameters of the script
    input string          InpName="FiboLevels";      // Nombre del objeto
    input int             InpDate1=70;               // Fecha del 1er punto,%
    input int             InpPrice1=45;              // Precio del 1er punto,%
    input int             InpDate2=90;               // Fecha del 2º punto,%
    input int             InpPrice2=85;              // Precio del 2º punto,%
    input color           InpColor=clrRed;           // Color del objeto
    input ENUM_LINE_STYLE InpStyle=STYLE_DASHDOTDOT; // Estilo de línea
    input int             InpWidth=1;                // Grueso de línea
    input bool            InpBack=false;             // Objeto de fondo
    input bool            InpSelection=true;         // Resaltar para mover
    input bool            InpRayRight=false;         // Continuación del objeto a la derecha
    input bool            InpHidden=true;            // Oculto en la lista de objetos
    input long            InpZOrder=0;               // Prioridad para el clic del mouse
    input color           clr = clrBlack;            // Color del objeto
    
    //+------------------------------------------------------------------+
    //| Constantes FIBO                                                  |
    //+------------------------------------------------------------------+
    extern double FiboLevel1=0.000;
    extern double FiboLevel2=0.382;
    extern double FiboLevel3=0.618;
    extern double FiboLevel4=1.000;
    extern double FiboLevel5=1.382;
    extern double FiboLevel6=1.618;
    extern double FiboLevel7=0.809;
    
    extern color  Fibo1Color= clrBlack;
    extern color  levelColor= clrBlack;
    extern color Zcolor;
    
    double fiboPrice1;
    double fiboPrice2;
          
    double fiboPriceDiff;
    string fiboValue0;
    string fiboValue38;
    string fiboValue61;
    string fiboValue80;
    string fiboValue100;
    string fiboValue138;
    string fiboValue161;
    string fiboValue19;
    string fiboValue119;
    
      
    string MPrefix="FI";
    
    //+------------------------------------------------------------------+
    //| Custom indicator initialization function                         |
    //+------------------------------------------------------------------+
    int OnInit()
      {
    //--- indicator buffers mapping
    //+-----------------------------------------------------------------+
    //+--- Boton Limpiar chart de objetos "Limpiar Chart"
    
       CrearBoton("Boton", 1730, 22, 135, 16,  clrBlack,  clrChartreuse, clrBlack,"ORBITRON",9,"Limpiar Chart");
       
    //+-----------------------------------------------------------------+     
    //+--- Boton dibujar "Fibo Orange"
    
       CrearBoton("Boton1", 1730, 39, 44, 16,  clrBlack,  clrOrange, clrBlack,"ORBITRON BOLD",9,"Fibo");
       
    //+-----------------------------------------------------------------+     
    //+--- Boton dibujar "Fibo Red"
    
       CrearBoton("Boton2", 1775, 39, 45, 16,  clrWhite,  clrCrimson, clrBlack,"ORBITRON BOLD",9,"Fibo");
       
    //+-----------------------------------------------------------------+     
    //+--- Boton dibujar "Fibo Gold"
    
       CrearBoton("Boton3", 1821, 39, 44, 16,  clrBlack,  clrGold, clrBlack,"ORBITRON BOLD",9,"Fibo");
    
    //+-----------------------------------------------------------------+     
    //+--- Boton dibujar "Fibo Blue"
    
       CrearBoton("Boton4", 1730, 56, 44, 16,  clrWhite,  clrBlue, clrBlack,"ORBITRON BOLD",9,"Fibo");
       
    //+-----------------------------------------------------------------+     
    //+--- Boton dibujar "Fibo Green"
    
       CrearBoton("Boton5", 1775, 56, 45, 16,  clrWhite,  clrGreen, clrBlack,"ORBITRON BOLD",9,"Fibo");
       
    //+-----------------------------------------------------------------+     
    //+--- Boton dibujar "Fibo White"
    
       CrearBoton("Boton6", 1821, 56, 44, 16,  clrBlack,  clrWhiteSmoke, clrBlack,"ORBITRON BOLD",9,"Fibo");
          
    //+-----------------------------------------------------------------+    
    
       return(INIT_SUCCEEDED);
      }
      //+------------------------------------------------------------------+
    //| Expert deinitialization function                                 |
    //+------------------------------------------------------------------+
    void OnDeinit(const int reason)
      {
    //---
       ObjectDelete("Boton");     //+--- Boton Limpiar chart de objetos "Limpiar Chart" 
       ObjectDelete("Boton1");    //+--- Boton1 Fibo de color naranja. "Fibo Orange" 
       ObjectDelete("Boton2");    //+--- Boton1 Fibo de color rojo. "Fibo Red"   
       ObjectDelete("Boton3");    //+--- Boton1 Fibo de color oro. "Fibo Gold"   
       ObjectDelete("Boton4");    //+--- Boton1 Fibo de color azul. "Fibo Blue"   
       ObjectDelete("Boton5");    //+--- Boton1 Fibo de color verde. "Fibo Green"   
       ObjectDelete("Boton6");    //+--- Boton1 Fibo de color blanco. "Fibo White"
       
       ObjectDelete("WorkZone");  //+--- Zona Fibo de color naranja. "Fibo orange"
       ObjectDelete("WorkZone1"); //+--- Zona Fibo de color rojo. "Fibo Red"
       ObjectDelete("WorkZone2"); //+--- Zona Fibo de color oro. "Fibo Gold"
       ObjectDelete("WorkZone3"); //+--- Zona Fibo de color azul. "Fibo Blue"
       ObjectDelete("WorkZone4"); //+--- Zona Fibo de color verde. "Fibo Green"
       ObjectDelete("WorkZone5"); //+--- Zona Fibo de color color blanco. "Fibo White"   
        
      } 
    //+------------------------------------------------------------------+
    //| Custom indicator iteration function                              |
    //+------------------------------------------------------------------+
    int OnCalculate(const int rates_total,
                    const int prev_calculated,
                    const datetime &time[],
                    const double &open[],
                    const double &high[],
                    const double &low[],
                    const double &close[],
                    const long &tick_volume[],
                    const long &volume[],
                    const int &spread[])
      {
    //---
       
    //--- return value of prev_calculated for next call
       return(rates_total);
      }
    //+------------------------------------------------------------------+
    //+------------------------------------------------------------------+
    //| ChartEvent function                                              |
    //+------------------------------------------------------------------+
    void OnChartEvent(const int id,
                      const long &lparam,
                      const double &dparam,
                      const string &sparam)
    //------------------------------------------------------
    {
       string clickedChartObject=sparam;
    //------------------------------------------------------
    
    //ID Boton
       if(clickedChartObject=="Boton")//+--- Boton  "Limpiar Chart"
         {
          ObjectsDeleteAll();
             CrearBoton("Boton", 1730, 22, 135, 16,  clrBlack,  clrChartreuse, clrBlack,"ORBITRON",9,"Limpiar Chart");
             CrearBoton("Boton1", 1730, 39, 44, 16,  clrBlack,  clrOrange, clrBlack,"ORBITRON BOLD",9,"Fibo");
             CrearBoton("Boton2", 1775, 39, 45, 16,  clrWhite,  clrCrimson, clrBlack,"ORBITRON BOLD",9,"Fibo");
             CrearBoton("Boton3", 1821, 39, 44, 16,  clrBlack,  clrGold, clrBlack,"ORBITRON BOLD",9,"Fibo");
             CrearBoton("Boton4", 1730, 56, 44, 16,  clrWhite,  clrBlue, clrBlack,"ORBITRON BOLD",9,"Fibo");
             CrearBoton("Boton5", 1775, 56, 45, 16,  clrWhite,  clrGreen, clrBlack,"ORBITRON BOLD",9,"Fibo");
             CrearBoton("Boton6", 1821, 56, 44, 16,  clrBlack,  clrWhiteSmoke, clrBlack,"ORBITRON BOLD",9,"Fibo");        
         }   
    //------------------------------------------------------
    //ID Boton1
       if(clickedChartObject=="Boton1")//+--- Boton  "Fibo Orange"
         {
         levelColor = clrTomato;
         Zcolor = clrPeachPuff;
         CreateFibo();
             CrearBoton("Boton1", 1730, 39, 44, 16,  clrBlack,  clrOrange, clrBlack,"ORBITRON BOLD",9,"Fibo");
       
         }
    //------------------------------------------------------ 
    //------------------------------------------------------
    //ID Boton2
       if(clickedChartObject=="Boton2")//+--- Boton  "Fibo Red"
         {
         levelColor = clrCrimson;
         CreateFibo();
             CrearBoton("Boton2", 1775, 39, 45, 16,  clrWhite,  clrCrimson, clrBlack,"ORBITRON BOLD",9,"Fibo");
         }
    //------------------------------------------------------ 
    //------------------------------------------------------
    //ID Boton3
       if(clickedChartObject=="Boton3")//+--- Boton  "Fibo Gold"
         {
         levelColor = clrGold;
         CreateFibo();
             CrearBoton("Boton3", 1821, 39, 44, 16,  clrBlack,  clrGold, clrBlack,"ORBITRON BOLD",9,"Fibo");
         }
    //------------------------------------------------------ 
    //------------------------------------------------------
    //ID Boton4
       if(clickedChartObject=="Boton4")//+--- Boton "Fibo Blue"
         {
         levelColor = clrBlue;
         CreateFibo();
             CrearBoton("Boton4", 1730, 56, 44, 16,  clrWhite,  clrBlue, clrBlack,"ORBITRON BOLD",9,"Fibo");
         }
    //------------------------------------------------------ 
    //------------------------------------------------------
    //ID Boton5
       if(clickedChartObject=="Boton5")//+--- Boton "Fibo Green"
         {
         levelColor = clrGreen;
         CreateFibo();
             CrearBoton("Boton5", 1775, 56, 45, 16,  clrWhite,  clrGreen, clrBlack,"ORBITRON BOLD",9,"Fibo");
         }
    //------------------------------------------------------ 
    //------------------------------------------------------
    //ID Boton6
       if(clickedChartObject=="Boton6")//+--- Boton  "Fibo White"
         {
         levelColor = clrWhiteSmoke;
         CreateFibo();
             CrearBoton("Boton6", 1821, 56, 44, 16,  clrBlack,  clrWhiteSmoke, clrBlack,"ORBITRON BOLD",9,"Fibo");
         }
    //------------------------------------------------------
    
     }
    //===================================================================//
    
    //+------------------------------------------------------------------+
    //|  Crear retroceso de Fibonacci                                    |
    //+------------------------------------------------------------------+
    
    void CreateFibo()
      {
    // --- comprobamos la corrección de los parámetros de entrada 
         int fibHigh = iHighest(Symbol(),Period(),MODE_HIGH,WindowFirstVisibleBar()-1,1);
         int fibLow  = iLowest(Symbol(),Period(),MODE_LOW,WindowFirstVisibleBar()-1,1);
         
         datetime highTime = Time[fibHigh];
         datetime lowTime  = Time[fibLow];
         
          if(fibHigh>fibLow){
          WindowRedraw();
          ObjectCreate(MPrefix+"FIBO_LAB",OBJ_FIBO,0,highTime,High[fibHigh],lowTime,Low[fibLow]);
          //levelColor = clrBlack;
          }
          else{
          WindowRedraw();
          ObjectCreate(MPrefix+"FIBO_LAB",OBJ_FIBO,0,lowTime,Low[fibLow],highTime,High[fibHigh]);
          levelColor = Fibo1Color;
          }
          fiboPrice1=ObjectGet(MPrefix+"FIBO_LAB",OBJPROP_PRICE1);
          fiboPrice2=ObjectGet(MPrefix+"FIBO_LAB",OBJPROP_PRICE2);
          
          fiboPriceDiff = fiboPrice2-fiboPrice1;
          fiboValue0 = DoubleToStr(fiboPrice2-fiboPriceDiff*FiboLevel1,Digits);
          fiboValue38 = DoubleToStr(fiboPrice2-fiboPriceDiff*FiboLevel2,Digits);
          fiboValue61 = DoubleToStr(fiboPrice2-fiboPriceDiff*FiboLevel3,Digits);
          fiboValue100 = DoubleToStr(fiboPrice2-fiboPriceDiff*FiboLevel4,Digits);
          fiboValue138 = DoubleToStr(fiboPrice2-fiboPriceDiff*FiboLevel5,Digits);
          fiboValue161 = DoubleToStr(fiboPrice2-fiboPriceDiff*FiboLevel6,Digits);     
          fiboValue80 = DoubleToStr(fiboPrice2-fiboPriceDiff*FiboLevel7,Digits);
          
         ObjectSet(MPrefix+"FIBO_LAB",OBJPROP_FIBOLEVELS,7);
         ObjectSet(MPrefix+"FIBO_LAB",OBJPROP_FIRSTLEVEL+0,FiboLevel1);
         ObjectSet(MPrefix+"FIBO_LAB",OBJPROP_FIRSTLEVEL+1,FiboLevel2);
         ObjectSet(MPrefix+"FIBO_LAB",OBJPROP_FIRSTLEVEL+2,FiboLevel3);
         ObjectSet(MPrefix+"FIBO_LAB",OBJPROP_FIRSTLEVEL+3,FiboLevel4);
         ObjectSet(MPrefix+"FIBO_LAB",OBJPROP_FIRSTLEVEL+4,FiboLevel5);
         ObjectSet(MPrefix+"FIBO_LAB",OBJPROP_FIRSTLEVEL+5,FiboLevel6);
         ObjectSet(MPrefix+"FIBO_LAB",OBJPROP_FIRSTLEVEL+6,FiboLevel7);     
              
         ObjectSet(MPrefix+"FIBO_LAB",OBJPROP_LEVELCOLOR,levelColor);
         ObjectSet(MPrefix+"FIBO_LAB",OBJPROP_LEVELWIDTH,1);
         ObjectSet(MPrefix+"FIBO_LAB",OBJPROP_LEVELSTYLE,STYLE_SOLID);
         
         
         ObjectSetFiboDescription( MPrefix+"FIBO_LAB", 0,fiboValue0+" --> "+DoubleToStr(FiboLevel1*100,1)+"%"); 
         ObjectSetFiboDescription( MPrefix+"FIBO_LAB", 1,fiboValue38+" --> "+DoubleToStr(FiboLevel2*100,1)+"%"); 
         ObjectSetFiboDescription( MPrefix+"FIBO_LAB", 2,fiboValue61+" --> "+DoubleToStr(FiboLevel3*100,1)+"%");
         ObjectSetFiboDescription( MPrefix+"FIBO_LAB", 6,"Limite Zona");  
         ObjectSetFiboDescription( MPrefix+"FIBO_LAB", 3,fiboValue100+" --> "+DoubleToStr(FiboLevel4*100,1)+"%");
         ObjectSetFiboDescription( MPrefix+"FIBO_LAB", 4,fiboValue138+" --> "+DoubleToStr(FiboLevel5*100,1)+"%");
         ObjectSetFiboDescription( MPrefix+"FIBO_LAB", 5,fiboValue161+" --> "+DoubleToStr(FiboLevel6*100,1)+"%");
          
         
         ObjectSetInteger(0,MPrefix+"FIBO_LAB",OBJPROP_SELECTED,True);
         {
          return;
         }
    //---
      }
      
    //===================================================================//
    //+------------------------------------------------------------------+
    //| Función para crear botones                                       |
    //+------------------------------------------------------------------+
      
    void CrearBoton(string NrBoton,int Xdistance, int Ydistance, int Xsize, int Ysize, color TextColor, color ObjBGColor, color ObjBorderColor, string ObjFont,int ButtonFontSize, string ObjText)
      {
    //------------------------------------------------------
       if(ObjectFind(0,NrBoton)==-1)
         {
          ObjectCreate(0,NrBoton,OBJ_BUTTON,0,0,0);
          ObjectSetInteger(0,NrBoton,OBJPROP_XDISTANCE,Xdistance);
          ObjectSetInteger(0,NrBoton,OBJPROP_YDISTANCE,Ydistance);
          ObjectSetInteger(0,NrBoton,OBJPROP_XSIZE,Xsize);
          ObjectSetInteger(0,NrBoton,OBJPROP_YSIZE,Ysize);
          ObjectSetInteger(0,NrBoton,OBJPROP_COLOR,TextColor);
          ObjectSetInteger(0,NrBoton,OBJPROP_BGCOLOR,ObjBGColor);
          ObjectSetInteger(0,NrBoton,OBJPROP_BORDER_COLOR,ObjBorderColor);
          ObjectSetString(0,NrBoton,OBJPROP_FONT,ObjFont);
          ObjectSetInteger(0,NrBoton,OBJPROP_FONTSIZE,ButtonFontSize);
          ObjectSetString(0,NrBoton,OBJPROP_TEXT,ObjText);
         }
    //---
      }
    //+------------------------------------------------------------------------------------------------------+  
    
    //========================================================================================================================//

    como veis la mayoria de comentarios estan en Español y no en ingles como exige MQL para colgarlo en el Market o en el Code base, esta asi ya que no creo que sea de interes para su uso pues es para mi sistema de Trading muy particular pero que continuamente necesito utilizar el Fibo y generar Zonas de trabajo.

    Un saludo y 1000 gracias por adelantado.

     
    xyon126 #:

    • Por lo general, las personas que no pueden codificar no reciben ayuda gratuita en este foro, aunque podría suceder si tiene suerte. Sea paciente.
    • Si muestra sus intentos y describe su problema con claridad, lo más probable es que reciba una respuesta de la comunidad.
    • Si no quiere aprender a codificar, eso no es un problema. Puede mirar la sección CodeBase si ya existe algo gratuito, o en el Market para productos de pago (también a veces gratis).
    • Por último, también tiene la opción de contratar un programador en la sección Freelance.

    Buena suerte.

    https://www.mql5.com/es/forum/205039
    Reglas del foro y recomendaciones
    Reglas del foro y recomendaciones
    • 2017.06.22
    • www.mql5.com
    Reglas del foro y recomendaciones Cada idioma cuenta con su respectivo foro, y es por ello que está prohibido comunicarse en otro lenguaje que no...
     

    Hola Manuel:


      Me dio curiosidad tu problema, ya que tengo un problema muy similar y me dio una idea de como aproximarme a una solución codificando una posible solución que espero te sirva.

      Te anexo el código donde dibujo un rectángulo dentro del fibo entre los parámetros 23.6 y 38.2 (Similar a lo que necesitas), lo otro que es similar es que al borrar el fibo también borro el rectángulo (lo puedes modificar a tu conveniencia). No uso botones, lo que hago es poner el indicador y cuando se detecta que se crea, modifica, borra un fibo le dibuja el rectángulo.

      Muchas gracias, porque con esto me acerqué a lo que quiero hacer.


      Cualquier duda, espero poder ayudarte...

    Código:

    //+------------------------------------------------------------------+
    //|                                              FibonacciEvents.mq4 |
    //|                    Copyright 2024, Adrian Hernandez Castellanos. |
    //|                                                http://grplca.com |
    //+------------------------------------------------------------------+
    #property copyright "Copyright 2024, Adrian Hernandez Castellanos.";
    #property link      "http://grplca.com";
    #property version   "1.00";
    #property strict;
    #property script_show_inputs;
    #property description "Fibonacci Events Test";
    #property indicator_chart_window;
    #property indicator_buffers 0;
    #property indicator_plots   0;
    //#property icon "icon"; //TBD in next versión

    #include <stdlib.mqh>
    //#include <CommonLib.mqh>

    string prefix = "RctFib";


    //Modify from https://docs.mql4.com/constants/namedconstants/uninit
    string getUninitReasonText(int reasonCode, string file =__FILE__)
    {
      string textCL = "";
      switch(reasonCode)
      {
        case REASON_PROGRAM://0
          textCL = "Program finished correctly.";
          break;
        case REASON_REMOVE://1
          textCL = "Program "+file+" has been deleted from chart.";
          break;
        case REASON_RECOMPILE://2
          textCL = "Program "+file+" has been recompiled.";
          break;
        case REASON_CHARTCHANGE://3
          textCL = "Symbol or timeframe has been changed.";
          break;
        case REASON_CHARTCLOSE://4
          textCL = "Chart has been closed.";
          break;
        case REASON_PARAMETERS://5
          textCL = "Input parameters have been changed by a user.";
          break;
        case REASON_ACCOUNT://6
          textCL = "Another account has been activated or reconnection to the trade server has occurred due to changes in the account settings.";
          break;
        case REASON_TEMPLATE://7
          textCL = "A new template has been applied.";
          break;
        case REASON_INITFAILED://8
          textCL = "Initialization failed.";
          break;
        case REASON_CLOSE://9
          textCL = "Terminal has been closed.";
          break;
        default:
          textCL = "Another reason";
      }//switch(reasonCode)
      return textCL;
    }//string getUninitReasonText(int reasonCode, string file =__FILE__)

    //Función que crea el rectangulo
    void createRectangulo(string sparam)
    {
      double cero = 0.0;
      double cien = 1.0;
      cien =  ObjectGet(sparam, OBJPROP_PRICE1);
      cero =  ObjectGet(sparam, OBJPROP_PRICE2);
      datetime timeCien = (datetime)ObjectGet(sparam, OBJPROP_TIME1);
      datetime timeCero = (datetime)ObjectGet(sparam, OBJPROP_TIME2);
     
      int err = 0;
      datetime now = TimeCurrent();
      datetime timeAux;
      timeAux = timeCero<timeCien?timeCero:timeCien;
      timeCien = now>timeCero?now>timeCien?now:timeCien>timeCero?timeCien:timeCero:timeCero;
      timeCero = timeAux;
      ObjectDelete(prefix+sparam);
      bool res = ObjectCreate(prefix+sparam,OBJ_RECTANGLE,0,timeCero,cero+(cien-cero)*.236,timeCien,cero+(cien-cero)*.382);
      if(!res)
      {
          err = GetLastError();
          Print(__LINE__,": Error: can't create Rectangle +! code #: ",err," - ",ErrorDescription(err));
          return;
      }//if(!res)
      res = ObjectSetInteger(0,prefix+sparam,OBJPROP_COLOR,C'172,255,172');
      if(!res)
      {
          err = GetLastError();
          Print(__LINE__,": Error: can't change Rectangle - colors levels! code #: ",err," - ",ErrorDescription(err));
          return;
      }//if(!res)
      res = ObjectSet(prefix+sparam,OBJPROP_BACK,true);
      if(!res)
      {
        err = GetLastError();
        Print(__FILE__," [",__LINE__,"]: Info: can't update background \""+prefix+sparam+"\". code error: #",err," - ",ErrorDescription(err));
      }//if(!res)
      res = ObjectSetInteger(0,prefix+sparam,OBJPROP_HIDDEN,true);
      if(!res)
      {
        err = GetLastError();
        Print(__FILE__," [",__LINE__,"]: Info: can't update hidden of \""+prefix+sparam+"\". code error: #",err," - ",ErrorDescription(err));
      }//if(!res)
    }//void createRectangulo(string sparam)



    //+------------------------------------------------------------------+
    //| Custom indicator initialization function                         |
    //+------------------------------------------------------------------+
    int OnInit()
    {
    //--- indicator buffers mapping
       ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,False);
       ChartSetInteger(0,CHART_EVENT_OBJECT_CREATE,True);
       ChartSetInteger(0,CHART_EVENT_OBJECT_DELETE,True);
    //---
       return(INIT_SUCCEEDED);
    }//int OnInit(void)

    void OnDeinit(const int reason)
    {
      Print("Deinitilized:",__FILE__," Reason: ",getUninitReasonText(reason,__FILE__));
      ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,False);
      ChartSetInteger(0,CHART_EVENT_OBJECT_CREATE,False);
      ChartSetInteger(0,CHART_EVENT_OBJECT_DELETE,False);
    }//void OnDeinit(const int reason)



    //+------------------------------------------------------------------+
    //| Custom indicator iteration function                              |
    //+------------------------------------------------------------------+
    int OnCalculate(const int rates_total,
                    const int prev_calculated,
                    const datetime &time[],
                    const double &open[],
                    const double &high[],
                    const double &low[],
                    const double &close[],
                    const long &tick_volume[],
                    const long &volume[],
                    const int &spread[])
    {
    //---
       
    //--- return value of prev_calculated for next call
       return(rates_total);
    }//int OnCalculate(...)

    //+------------------------------------------------------------------+
    //| ChartEvent function                                              |
    //+------------------------------------------------------------------+
    void OnChartEvent(const int id,
                      const long &lparam,
                      const double &dparam,
                      const string &sparam)
    {
    //---
      switch(id)
      {
        case CHARTEVENT_OBJECT_CREATE:
        {
          Print("Graphical object created (if CHART_EVENT_OBJECT_CREATE=true is set for the chart)");
          Print("sparam:",sparam, " Name of the created graphical object"); //Name of the created graphical object
          int window = ObjectFind(sparam);
          Print("subwindow: ",window);
          if(window == 0)
            if(ObjectType(sparam)==OBJ_FIBO)
              createRectangulo(sparam);
        }//case CHARTEVENT_OBJECT_CREATE:
        break;
        case CHARTEVENT_OBJECT_CHANGE:
        {
          Print("Graphical object property changed via the properties dialog");
          Print("sparam:",sparam, " Name of the modified graphical object"); //Name of the modified graphical object
          int window = ObjectFind(sparam);
          if(window == 0)
          {
            for(int i=0;i<ObjectsTotal((long)0);i++)
            {
              string name = ObjectName(i);
              if(ObjectType(name) == OBJ_RECTANGLE)
                if(StringFind(name,prefix)==0)
                {
                  string aux = StringSubstr(name,StringLen(prefix));
                  if(ObjectFind(aux) == -1)
                    ObjectDelete(name);
                }//if(StringFind(name,prefix)==0)
            }//for(int i=0;i<ObjectsTotal((long)0);i++)
            if(ObjectType(sparam)==OBJ_FIBO)
              createRectangulo(sparam);
          }//if(window == 0)
        }//case CHARTEVENT_OBJECT_CHANGE:
        break;
        case CHARTEVENT_OBJECT_DELETE:
        {
          Print("Graphical object deleted (if CHART_EVENT_OBJECT_DELETE=true is set for the chart)");
          Print("sparam:",sparam, " Name of the deleted graphical objec"); //Name of the deleted graphical object
          int window = ObjectFind(sparam);
          if(window == 0)
            if(ObjectType(sparam)==OBJ_FIBO)
              Print("Fibonnacci ",sparam," deleted!"); //nunca llega
          window = ObjectFind(prefix+sparam);
          Print("subwindow: ",window);
          if(window == 0)
            if(ObjectType(prefix+sparam)==OBJ_RECTANGLE)
              ObjectDelete(prefix+sparam);
        }//case CHARTEVENT_OBJECT_DELETE:
        break;
        case CHARTEVENT_OBJECT_DRAG:
        {
          Print("Drag and drop of a graphical object");
          Print("sparam:",sparam, " Name of the moved graphical object"); //Name of the moved graphical object
          int window = ObjectFind(sparam);
          if(window == 0)
            if(ObjectType(sparam)==OBJ_FIBO)
              createRectangulo(sparam);
        }//case CHARTEVENT_OBJECT_DRAG:
        break;
      }//switch(id)
    }//void OnChartEvent(...)
    //+-----------------------------------CHASM-----------------------------------+


    Razón de la queja: