c – Como eu crio um loop que permita cancelar a ordem anterior quando passar de um certo valor?

Boa noite. A seguinte linguagem é MQL5. Estou a criar um robô para o MetaTrader 5. Eu criei depois de muitas horas o código que aparecer a seguir. Eu na altura fiz os comentários em inglês tal e qual como no tutorial pois o vídeo estava em inglês. O meu objetivo é fazer com que uma ordem BUY seja criada sempre que o valor de RSI(Relative Strenght Index) passe a ser maior que 70, e mal passe a ser menor que 70, que crie uma ordem SELL, deletando a ordem anterior. Como a estratégia vai sempre responder aos valores de RSI, ela não precisa de Stop Loss ou Take Profit. Tem algumas coisas que não sei o que fazem ou se realmente são necessárias. Eu gostava de saber o que fiz errado.
Obrigado a quem poder ajudar.

//+------------------------------------------------------------------+
//|                                                     RSIrobot.mq5 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Include                                                          |
//+------------------------------------------------------------------+
#include <ExpertExpert.mqh>
//--- available signals
#include <ExpertSignalSignalRSI.mqh>
//--- available trailing
#include <ExpertTrailingTrailingNone.mqh>
//--- available money management
#include <ExpertMoneyMoneyFixedLot.mqh>
//+------------------------------------------------------------------+
//| Inputs                                                           |
//+------------------------------------------------------------------+
//--- inputs for expert
input string             Expert_Title         ="RSIrobot";  // Document name
ulong                    Expert_MagicNumber   =18801;       //
bool                     Expert_EveryTick     =false;       //
//--- inputs for main signal
input int                Signal_ThresholdOpen =10;          // Signal threshold value to open    (0...100)
input int                Signal_ThresholdClose=10;          // Signal threshold value to close (0...100)
input double             Signal_PriceLevel    =0.0;         // Price level to execute a deal
input double             Signal_StopLevel     =50.0;        // Stop Loss level (in points)
input double             Signal_TakeLevel     =50.0;        // Take Profit level (in points)
input int                Signal_Expiration    =4;           // Expiration of pending orders (in bars)
input int                Signal_RSI_PeriodRSI =14;          // Relative Strength Index(14,...) M1     Period of calculation
input ENUM_APPLIED_PRICE Signal_RSI_Applied   =PRICE_CLOSE; // Relative Strength Index(14,...) M1 Prices series
input double             Signal_RSI_Weight    =1.0;         // Relative Strength Index(14,...) M1   Weight (0...1.0)
//--- inputs for money
input double             Money_FixLot_Percent =100.0;       // Percent
input double             Money_FixLot_Lots    =0.05;        // Fixed volume
//+------------------------------------------------------------------+
//| Global expert object                                             |
//+------------------------------------------------------------------+
CExpert ExtExpert;
//+------------------------------------------------------------------+
//| Initialization function of the expert                            |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Initializing expert
if(!ExtExpert.Init(Symbol(),PERIOD_M1,Expert_EveryTick,Expert_MagicNumber))
  {
   //--- failed
   printf(__FUNCTION__+": error initializing expert");
   ExtExpert.Deinit();
   return(INIT_FAILED);
  }
//--- Creating signal
CExpertSignal *signal=new CExpertSignal;
if(signal==NULL)
  {
   //--- failed
   printf(__FUNCTION__+": error creating signal");
   ExtExpert.Deinit();
   return(INIT_FAILED);
  }
//---
ExtExpert.InitSignal(signal);
signal.ThresholdOpen(Signal_ThresholdOpen);
signal.ThresholdClose(Signal_ThresholdClose);
signal.PriceLevel(Signal_PriceLevel);
signal.StopLevel(Signal_StopLevel);
signal.TakeLevel(Signal_TakeLevel);
signal.Expiration(Signal_Expiration);
//--- Creating filter CSignalRSI
CSignalRSI *filter0=new CSignalRSI;
if(filter0==NULL)
  {
   //--- failed
   printf(__FUNCTION__+": error creating filter0");
   ExtExpert.Deinit();
   return(INIT_FAILED);
  }
signal.AddFilter(filter0);
//--- Set filter parameters
filter0.Period(PERIOD_M1);
filter0.PeriodRSI(Signal_RSI_PeriodRSI);
filter0.Applied(Signal_RSI_Applied);
filter0.Weight(Signal_RSI_Weight);
//--- Creation of trailing object
CTrailingNone *trailing=new CTrailingNone;
if(trailing==NULL)
  {
   //--- failed
   printf(__FUNCTION__+": error creating trailing");
   ExtExpert.Deinit();
   return(INIT_FAILED);
  }
//--- Add trailing to expert (will be deleted automatically))
if(!ExtExpert.InitTrailing(trailing))
  {
   //--- failed
   printf(__FUNCTION__+": error initializing trailing");
   ExtExpert.Deinit();
   return(INIT_FAILED);
  }
 //--- Set trailing parameters
 //--- Creation of money object
CMoneyFixedLot *money=new CMoneyFixedLot;
if(money==NULL)
  {
   //--- failed
   printf(__FUNCTION__+": error creating money");
   ExtExpert.Deinit();
   return(INIT_FAILED);
  }
//--- Add money to expert (will be deleted automatically))
if(!ExtExpert.InitMoney(money))
  {
   //--- failed
   printf(__FUNCTION__+": error initializing money");
   ExtExpert.Deinit();
   return(INIT_FAILED);
  }
//--- Set money parameters
money.Percent(Money_FixLot_Percent);
money.Lots(Money_FixLot_Lots);
//--- Check all trading objects parameters
if(!ExtExpert.ValidationSettings())
  {
   //--- failed
   ExtExpert.Deinit();
   return(INIT_FAILED);
  }
//--- Tuning of all necessary indicators
if(!ExtExpert.InitIndicators())
  {
   //--- failed
   printf(__FUNCTION__+": error initializing indicators");
   ExtExpert.Deinit();
   return(INIT_FAILED);
  }
//--- ok
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Deinitialization function of the expert                          |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ExtExpert.Deinit();
  }
//+------------------------------------------------------------------+
//| "Tick" event handler function                                    |
//+------------------------------------------------------------------+
void OnTick()
  {
   ExtExpert.OnTick();
  }
//+------------------------------------------------------------------+
//| "Trade" event handler function                                   |
//+------------------------------------------------------------------+
void OnTrade()
 {
  ExtExpert.OnTrade();
 }
//+------------------------------------------------------------------+
//| "Timer" event handler function                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
  ExtExpert.OnTimer();
  }
//+------------------------------------------------------------------+