'problem With repeating Orders and let the Limited order move with the price in MQL5

am Trying To Code an EA has This Jobs dealing with Boom 1000 index

Set Limited Order (Buy \ Sell) and The Orders moving with the price in that way: if the price goes down the buy stop will follow each candle for waiting for the bullish candle, and the same thing for the sell order

I have this problem: the orders repeating if I close the EA or I changed the frame "I have a problem with deinitialization"

I have no idea how can I let the order move with each candle "adjust the order

the code I have used:

//+------------------------------------------------------------------+
//|                                    EABoom1000Scalper.mq5         |
//|                                    Copyright 2022, OshGroup ltd. |
//|                                    https://oshgrp.com/ar         |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, OshGroup ltd."
#property link      "https://oshgrp.com/ar"
#property version   "1.01"

#property description "Note:The EA Work with Buy and Sell\n"

#property description "If You Dont Need TP Or SL just let it 0 "

#property description "Try Version N10 Will destroy after 7 days"

//+-----------------Include--------------------------------+
#include <Trade/Trade.mqh>
#include <Expert\Expert.mqh>
#include <Expert\Signal\SignalMA.mqh>
#include <Expert\Trailing\TrailingParabolicSAR.mqh>
#include <Expert\Money\MoneySizeOptimized.mqh>
//+-----------------------Enumoration------------------------------+
enum TradeAutoOption{
       Yes=0,
       No=1

};
enum Trade_Type{

BUY=0, SELL=1
}
;
enum SYMBOL_ASK_O{

Boom_Index_1000=0, Crash_Index_1000=1, Boom_Index_500=2, Crash_Index_500=3

};
//+--------------------input parameters-----------------------+
input  group              "Setting"
input  string             Inp_Expert_Title                      ="ScalperExpert";
input  group             "Trade Type"
input  Trade_Type         Ordder_Type                           =BUY; 
 
input group              "Order_Details"
                         
input  double             LOT_SIZE                              =1.00;
input  double             Buy_AT                                =00000.0000;
input  double             Sell_AT                               =00000.0000; 
input  double             Tralling_InPoint                      =2000; 

input  double             Take_Profit_At                         =0.0;
input  double             Stop_LOSE                             =0.0;

input group             "Auto Trading"
input TradeAutoOption    Trade_Auto                             =No;
input SYMBOL_ASK_O       SYMBOL                                 =Boom_Index_1000;
//--- input parameters

//+------------------------------------------------------------------+
//| Global expert object                                             |
//+------------------------------------------------------------------+
CExpert ExtExpert;
CTrade  Trade;
//+------------------------------------------------------------------+
//| Global expert object                                             |
//+------------------------------------------------------------------+

//+-----------------------Function-----------------------------------+

void Start_Buy(double LOT_SIZE1 ,double  Buy_From1 ,double Stop_LOSE1, double Take_Profit_At2){
 
  
  double  Ask = NormalizeDouble(SymbolInfoDouble(_Symbol, SYMBOL_ASK),_Digits);
   
  if(Ask < Buy_From1){ 
  Trade.BuyStop(LOT_SIZE1 ,Buy_From1,_Symbol,Stop_LOSE1,Take_Profit_At,ORDER_TIME_GTC, NULL , "Buying Started...\n ");
}


else if (Ask > Buy_From1)
{

Trade.BuyLimit(LOT_SIZE1 ,Buy_From1,_Symbol,Stop_LOSE1,Take_Profit_At,ORDER_TIME_GTC, NULL , "Buying Started...\n ");
}

else 
{

   
      string comment=StringFormat("\n\nError %d Is the Current Price"  , Buy_From1 ); 
                               
      ChartSetString(0,CHART_COMMENT,comment); 

}
  
};//function



void Start_Sell(double LOT_SIZE2 , double Sell_From2 , double Stop_LOSE2 , double Take_Profit_At2)
{
 
 double  Bid= NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);

 if(Bid > Sell_From2 )
 
  { 
   
         Trade.SellStop(LOT_SIZE2 , Sell_From2 ,_Symbol,Stop_LOSE2 , Take_Profit_At2 , ORDER_TIME_GTC , "SEll Started...\n"); 
  
  }
  else if (Bid < Sell_From2)
  {
         Trade.SellLimit(LOT_SIZE2 , Sell_From2 ,_Symbol,Stop_LOSE2 , Take_Profit_At2 , ORDER_TIME_GTC , "SEll Started...\n");
   
  }
  
  else 
 {
   
        
      string comment=StringFormat("\n\nError %d Is the Current Price"  , Sell_From2 ); 
                               
      ChartSetString(0,CHART_COMMENT,comment); 
   
 
 } 


};

   void Chek_Typ(int  Ordder_Type){
   
   
   if(Ordder_Type  == BUY)
   
   {
  
     
   Start_Buy(LOT_SIZE ,Buy_AT , Stop_LOSE , Take_Profit_At);
     
     
   }
 
   else 
   
  { 
   Start_Sell(LOT_SIZE , Sell_AT , Stop_LOSE , Take_Profit_At); 
  }
  
  
   
   
   };
   
   
   void SetVAlueOneTheChart(){
      double ID = 1; 
      string comment=StringFormat("The Expert Working... %d" , ID ); 
                               
      ChartSetString(0,CHART_COMMENT,comment); 
         
   
   };
   
   
    
   
   
   
   
   

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+                  
int OnInit(void)
  {
//-----------------------Initializing expert--------------------------------
   

   //SetVAlueOneTheChart();
   Comment("The Expert Working....");
   
   Chek_Typ(Ordder_Type);
   
   
   return(INIT_SUCCEEDED);
  }
  


//+------------------------------------------------------------------+
//| Function-event handler "tick"                                    |
//+------------------------------------------------------------------+
void OnTick(void)
  {
   
   
  }
//+------------------------------------------------------------------+
//| Function-event handler "trade"                                   |
//+------------------------------------------------------------------+
void OnTrade(void)
  {
  
  
  
  }
//+------------------------------------------------------------------+
//| Deinitialization function of the expert                          |
//+------------------------------------------------------------------+
  void OnDeinit(const int reason )
  {
   if()
   
 Trade_Type         Ordder_Type                           =BUY; 
  double             LOT_SIZE                              =1.00;
  double             Buy_AT                                =00000.0000;
  double             Sell_AT                               =00000.0000; 
  double             Tralling_InPoint                      =2000; 

  double             Take_Profit_At                         =0.0;
  double             Stop_LOSE                             =0.0;
   
   ExtExpert.Deinit();
   
   Print("The deinitialization occured_Error Number Is" , reason);
  }
 


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source