Think step by step to get better result and give me completed code
Create me an Expert Advisor based on mt4 with my indicator logic in this EA you will include next steps
1.Push Notifications(When EA Open trade and when he close it)
2.Trading hours(Only from 7am until 8pm UTC+2)
3.Use Global variables to access user custom lot size(default lot size for only first trade will be 0.11 lots) - (If you have questions about this ask me
4.Convert my alerts signals into signals for EA so for example i got a signal “BUY / TP: / SL:”(you entry based on signal and put automatically stop loss and take profit), you entry at market conditions or opposite SELL
5.Make a simple logic so if EA is in trade no setups will appear
Take my code and take the action
indicator:
#property indicator_chart_window
#property indicator_buffers    0

//User Parameters
extern double GoldenZoneLevel = 0.618; // The Golden Zone Fibonacci level
double lastGoldZonePrice = 0.0;
datetime lastAlertTime = 0;
bool priceWasAboveZone = false;
bool priceWasBelowZone = false;
extern color  fiboColor           = clrBlack;
extern color  GoldenFiboColor     = clrBlack;
extern double fiboWidth           = 0;
extern double fiboStyle           = 0;
extern color  unretracedZoneColor = clrHoneydew;
extern bool   showUnretracedZone  = false;
extern bool   enableAlert         = true; // New parameter to enable/disable alerts

//Forex-Station button template start41; copy and paste
extern string             button_note1          = "------------------------------";
extern int                btn_Subwindow         = 0;                               // What window to put the button on. If <0, the button will use the same sub-window as the indicator.
extern ENUM_BASE_CORNER   btn_corner            = CORNER_LEFT_UPPER;               // button corner on chart for anchoring
extern string             btn_text              = "ON / OFF";                          // a button name
extern string             btn_Font              = "Arial";                         // button font name
extern int                btn_FontSize          = 12;                               // button font size               
extern color              btn_text_ON_color     = clrWhite;                         // ON color when the button is turned on
extern color              btn_text_OFF_color    = clrBlack;                          // OFF color when the button is turned off
extern color              btn_background_color  = clrDimGray;                      // background color of the button
extern color              btn_border_color      = clrBlack;                        // border color the button
extern int                button_x              = 20;                              // x coordinate of the button     
extern int                button_y              = 25;                              // y coordinate of the button     
extern int                btn_Width             = 80;                              // button width
extern int                btn_Height            = 20;                              // button height
extern string             UniqueButtonID        = "AutoFibo";                      // Unique ID for each button        
extern string             button_note2          = "------------------------------";

bool show_data, recalc=false;
string IndicatorObjPrefix, buttonId;
//Forex-Station button template end41; copy and paste

string headerString = "AutoFibo_";
bool alertTriggered = false; // Flag to prevent repeated alerts on the same bar

//+------------------------------------------------------------------------------------------------------------------+
//Forex-Station button template start42; copy and paste
int OnInit()
{
   IndicatorDigits(Digits);
   IndicatorObjPrefix = "_" + btn_text + "_";
   
   // The leading "_" gives buttonId a *unique* prefix. Furthermore, prepending the swin is usually unique unless >2+ of THIS indy are displayed in the SAME sub-window. (But, if >2 used, be sure to shift the buttonId position)
   buttonId = "_" + IndicatorObjPrefix + UniqueButtonID + "_BT_";
   if (ObjectFind(buttonId)<0) 
      createButton(buttonId, btn_text, btn_Width, btn_Height, btn_Font, btn_FontSize, btn_background_color, btn_border_color, btn_text_ON_color);
   ObjectSetInteger(0, buttonId, OBJPROP_YDISTANCE, button_y);
   ObjectSetInteger(0, buttonId, OBJPROP_XDISTANCE, button_x);

   init2();

   show_data = ObjectGetInteger(0, buttonId, OBJPROP_STATE);
   
   if (show_data) ObjectSetInteger(0,buttonId,OBJPROP_COLOR,btn_text_ON_color); 
   else ObjectSetInteger(0,buttonId,OBJPROP_COLOR,btn_text_OFF_color);
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------------------------------------------------------+
void createButton(string buttonID,string buttonText,int width2,int height,string font,int fontSize,color bgColor,color borderColor,color txtColor)
{
      ObjectDelete    (0,buttonID);
      ObjectCreate    (0,buttonID,OBJ_BUTTON,btn_Subwindow,0,0);
      ObjectSetInteger(0,buttonID,OBJPROP_COLOR,txtColor);
      ObjectSetInteger(0,buttonID,OBJPROP_BGCOLOR,bgColor);
      ObjectSetInteger(0,buttonID,OBJPROP_BORDER_COLOR,borderColor);
      ObjectSetInteger(0,buttonID,OBJPROP_BORDER_TYPE,BORDER_RAISED);
      ObjectSetInteger(0,buttonID,OBJPROP_XSIZE,width2);
      ObjectSetInteger(0,buttonID,OBJPROP_YSIZE,height);
      ObjectSetString (0,buttonID,OBJPROP_FONT,font);
      ObjectSetString (0,buttonID,OBJPROP_TEXT,buttonText);
      ObjectSetInteger(0,buttonID,OBJPROP_FONTSIZE,fontSize);
      ObjectSetInteger(0,buttonID,OBJPROP_SELECTABLE,0);
      ObjectSetInteger(0,buttonID,OBJPROP_CORNER,btn_corner);
      ObjectSetInteger(0,buttonID,OBJPROP_HIDDEN,1);
      ObjectSetInteger(0,buttonID,OBJPROP_XDISTANCE,9999);
      ObjectSetInteger(0,buttonID,OBJPROP_YDISTANCE,9999);
      // Upon creation, set the initial state to "true" which is "on", so one will see the indicator by default
      ObjectSetInteger(0, buttonId, OBJPROP_STATE, true);
}
//+------------------------------------------------------------------------------------------------------------------+
void OnDeinit(const int reason) 
{
   // If just changing a TF', the button need not be deleted, therefore the 'OBJPROP_STATE' is also preserved.
   if(reason != REASON_CHARTCHANGE) ObjectDelete(buttonId);
   deinit2();
}
//+------------------------------------------------------------------------------------------------------------------+
void OnChartEvent(const int id, //don't change anything here
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
   // If another indy on the same chart has enabled events for create/delete/mouse-move, just skip this events up front because they aren't
   //    needed, AND in the worst case, this indy might cause MT4 to hang!!  Skipping the events seems to help, along with other (major) changes to the code below.
   if(id==CHARTEVENT_OBJECT_CREATE || id==CHARTEVENT_OBJECT_DELETE) return; // This appears to make this indy compatible with other programs that enabled CHART_EVENT_OBJECT_CREATE and/or CHART_EVENT_OBJECT_DELETE
   if(id==CHARTEVENT_MOUSE_MOVE    || id==CHARTEVENT_MOUSE_WHEEL)   return; // If this, or another program, enabled mouse-events, these are not needed below, so skip it unless actually needed. 

   if (id==CHARTEVENT_OBJECT_CLICK && sparam == buttonId)
   {
      show_data = ObjectGetInteger(0, buttonId, OBJPROP_STATE);
      
      if (show_data)
      {
         ObjectSetInteger(0,buttonId,OBJPROP_COLOR,btn_text_ON_color); 
         // Is it a problem to call 'start()' ??  Possibly it makes no difference, but now calling "mystart()" instead of "start()"; and "start()" simply runs "mystart()", so should be same as before.
         recalc=true;
         mystart();
      }
      else
      {
         ObjectSetInteger(0,buttonId,OBJPROP_COLOR,btn_text_OFF_color);
         deinit2();
      }
   }
}
//Forex-Station button template end42; copy and paste
//+------------------------------------------------------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init2() {
   IndicatorBuffers(0); 
   return(0);
}
//+------------------------------------------------------------------------------------------------------------------+
int deinit2() {
   deleteObjects();
   Comment( "" ); 
   return(0);
}
//+------------------------------------------------------------------------------------------------------------------+
//+------------------------------------------------------------------------------------------------------------------+
int start() {return(mystart()); }
//+------------------------------------------------------------------------------------------------------------------+
int mystart()
  {
   int counted_bars=IndicatorCounted();
   if (show_data)
      {
        if(recalc) 
        {
           // If a button goes from off-to-on, everything must be recalculated. The 'recalc' variable is used as a trigger to do this.
           counted_bars = 0;
           recalc=false;
        }
       deleteObjects();
       createFibo();
       checkGoldZoneAlert(); // Check for Gold Zone touch and trigger alert
      } //if (show_data)  
   return(0);
}
//+------------------------------------------------------------------------------------------------------------------+
void deleteObjects() {
   for ( int i = ObjectsTotal() - 1;  i >= 0;  i-- ) {
      string name = ObjectName( i );
      if ( StringSubstr( name, 0, StringLen( headerString ) ) == headerString )
         ObjectDelete( name );
   }
}
//+------------------------------------------------------------------------------------------------------------------+
void createFibo() {
   int bar = WindowFirstVisibleBar();
   
   int shiftLowest  = iLowest( NULL, 0, MODE_LOW, bar - 1, 1 );
   int shiftHighest = iHighest( NULL, 0, MODE_HIGH, bar - 1, 1 );
   
   bool   isDownTrend = shiftHighest > shiftLowest;
   string GoldenFibo= headerString + "1", fiboObjectId1 = headerString + "2";
   string fiboObjectHigh = headerString + "High";
   string fiboObjectLow = headerString + "Low";
   string unretracedZoneObject = headerString + "UnretracedZone";
   int shiftMostRetraced;
  
   if ( isDownTrend == true ) {     
            ObjectCreate( fiboObjectId1, OBJ_FIBO,0, Time[shiftHighest], High[shiftHighest], Time[shiftLowest], Low[shiftLowest] );    
      ObjectSet( fiboObjectId1, OBJPROP_LEVELWIDTH, fiboWidth );
      ObjectSet( fiboObjectId1, OBJPROP_LEVELSTYLE, fiboStyle );

      ObjectCreate( GoldenFibo, OBJ_FIBO,0, Time[shiftHighest], High[shiftHighest], Time[shiftLowest], Low[shiftLowest] );    
      ObjectSet( GoldenFibo, OBJPROP_LEVELWIDTH, fiboWidth );
      ObjectSet( GoldenFibo, OBJPROP_LEVELSTYLE, fiboStyle );

      if ( showUnretracedZone == true ) {
         if ( shiftLowest > 0 ) {
            shiftMostRetraced = iHighest( NULL, 0, MODE_HIGH, shiftLowest - 1, 0 );
            ObjectCreate( unretracedZoneObject, OBJ_RECTANGLE, 0, Time[shiftMostRetraced], High[shiftHighest], Time[0], High[shiftMostRetraced] );      
            ObjectSet( unretracedZoneObject, OBJPROP_COLOR, unretracedZoneColor );     
         } 
      }  
   }
   
   else {
     ObjectCreate( fiboObjectId1, OBJ_FIBO, 0, Time[shiftLowest], Low[shiftLowest], Time[shiftHighest], High[shiftHighest] );   
     ObjectSet( fiboObjectId1, OBJPROP_LEVELWIDTH, fiboWidth );
     ObjectSet( fiboObjectId1, OBJPROP_LEVELSTYLE, fiboStyle );

     ObjectCreate( GoldenFibo, OBJ_FIBO, 0, Time[shiftLowest], Low[shiftLowest], Time[shiftHighest], High[shiftHighest] );   
     ObjectSet( GoldenFibo, OBJPROP_LEVELWIDTH, fiboWidth );
     ObjectSet( GoldenFibo, OBJPROP_LEVELSTYLE, fiboStyle );


        if( showUnretracedZone == true ) {
          if ( shiftHighest > 0 ) {
            shiftMostRetraced = iLowest( NULL, 0, MODE_LOW, shiftHighest - 1, 0 );
            ObjectCreate( unretracedZoneObject, OBJ_RECTANGLE, 0, Time[shiftMostRetraced], Low[shiftLowest], Time[0], Low[shiftMostRetraced] );      
            ObjectSet( unretracedZoneObject, OBJPROP_COLOR, unretracedZoneColor );
          }
        }
   }
   ObjectSet( GoldenFibo, OBJPROP_LEVELCOLOR, GoldenFiboColor );
   ObjectSet( GoldenFibo, OBJPROP_LEVELSTYLE, fiboStyle );
   ObjectSet( GoldenFibo, OBJPROP_LEVELWIDTH, fiboWidth );
   ObjectSet( GoldenFibo, OBJPROP_FIBOLEVELS,2 );

   ObjectSet( GoldenFibo, OBJPROP_FIRSTLEVEL + 0, 0.382 );
   ObjectSetFiboDescription( GoldenFibo, 0, "(0.382) -  $%$" );
   
   ObjectSet( GoldenFibo, OBJPROP_FIRSTLEVEL + 1, 0.618 );
   ObjectSetFiboDescription( GoldenFibo, 1, "(0.618) -  $%$" );
//---
   ObjectSet( fiboObjectId1, OBJPROP_LEVELCOLOR, fiboColor );
   ObjectSet( fiboObjectId1, OBJPROP_LEVELSTYLE, fiboStyle );
   ObjectSet( fiboObjectId1, OBJPROP_LEVELWIDTH, fiboWidth );
   ObjectSet( fiboObjectId1, OBJPROP_FIBOLEVELS,2 );
   
   ObjectSet( fiboObjectId1, OBJPROP_FIRSTLEVEL + 0, 0.00 );
   ObjectSetFiboDescription( fiboObjectId1, 0, "(0) -  $%$" );
  
   ObjectSet( fiboObjectId1, OBJPROP_FIRSTLEVEL + 1, 1.00 );
   ObjectSetFiboDescription( fiboObjectId1, 1, "(1) -  $%$" );  
}
//+------------------------------------------------------------------------------------------------------------------+

void checkGoldZoneAlert() {
    if (!enableAlert) return;  // Exit if alerts are disabled

    string GoldenFibo = headerString + "1";
    
    // Get the start and end prices of the Fibonacci object
    double fiboStart = ObjectGet(GoldenFibo, OBJPROP_PRICE1);
    double fiboEnd = ObjectGet(GoldenFibo, OBJPROP_PRICE2);
    
    double currentGoldZonePrice;
    double targetPrice; // 38.2 level for take profit
    
    // Determine trend and calculate Golden Zone price and target price
    bool isUptrend = (fiboStart < fiboEnd);
    
    if (isUptrend) {
        currentGoldZonePrice = fiboStart + (fiboEnd - fiboStart) * (1 - GoldenZoneLevel);
        targetPrice = fiboStart + (fiboEnd - fiboStart) * (1 - 0.382); // 38.2 level for take profit
    } else {
        currentGoldZonePrice = fiboEnd + (fiboStart - fiboEnd) * GoldenZoneLevel;
        targetPrice = fiboEnd + (fiboStart - fiboEnd) * 0.382; // 38.2 level for take profit
    }
    
    // Current price
    double currentPrice = Close[1];
    
    // Declare candleLow and candleHigh
    double candleLow = Low[1];  // Previous candle's low
    double candleHigh = High[1];  // Previous candle's high
    
    // If Golden Zone price has changed significantly
    // Track price position relative to Golden Zone
    bool isAboveZone = (currentPrice > currentGoldZonePrice);
    bool isBelowZone = (currentPrice < currentGoldZonePrice);
    
    // Detect crossings and generate trade signals (check only once per bar)
    if (Time[0] != lastAlertTime) {  
        double stopLoss = 200 * Point; // Example: 20 pips stop loss
        
        if (isUptrend) {
            // In uptrend, we look for buying opportunities when price pulls back to 0.618
            if ((candleLow < currentGoldZonePrice && currentPrice < currentGoldZonePrice) ||  // Wick below + body close below
                (candleLow < currentGoldZonePrice && currentPrice > currentGoldZonePrice)) {  // Wick below + body close above
                string buySignal = "Buy Signal Detected:\n";
                buySignal += "Stop Loss: " + DoubleToString(currentGoldZonePrice - stopLoss, Digits) + "\n";
                buySignal += "Take Profit: " + DoubleToString(targetPrice, Digits);
                Alert(buySignal);  // Single alert with all information for BUY setup
                lastAlertTime = Time[0];  // Update alert time to avoid multiple alerts in the same bar
            }
        } else {
            // In downtrend, we look for selling opportunities when price rallies to 0.618
            if ((candleHigh > currentGoldZonePrice && currentPrice < currentGoldZonePrice) || // Wick above + body close below
                (candleHigh > currentGoldZonePrice && currentPrice > currentGoldZonePrice)) { // Wick above + body close above
                string sellSignal = "Sell Signal Detected:\n";
                sellSignal += "Stop Loss: " + DoubleToString(currentGoldZonePrice + stopLoss, Digits) + "\n";
                sellSignal += "Take Profit: " + DoubleToString(targetPrice, Digits);
                Alert(sellSignal);  // Single alert with all information for SELL setup
                lastAlertTime = Time[0];  // Update alert time
            }
        }
    }
    
    // Update tracking variables to keep track of the price relative to the Golden Zone
    priceWasAboveZone = isAboveZone;
    priceWasBelowZone = isBelowZone;
}

//+------------------------------------------------------------------------------------------------------------------+