Does this make sense for a drawdown minimiser, and also is there a way I can improve the lots sizing thing to take on less risk in a drawdown?

 
void maxloss(){

 int total = PositionsTotal();
 int orderType = (int)PositionGetInteger(POSITION_TYPE) ;
double equity = AccountInfoDouble(ACCOUNT_EQUITY);
double Lossdifference = balance - equity;
NormalizeDouble(Lossdifference,_Digits);

  if(equity > equitymax){equitymax = equity;}

double drawdownperc = (equitymax-equity) / equitymax * 100;

if(GlobalVariableCheck(GV_DRAWDONW)){
   isdrawdown = true;
   double gv_drawdown = GlobalVariableGet("GV_DRAWDOWN");
   if(gv_drawdown > equitymax){
   equitymax = gv_drawdown;
   
   }
}
int bars = iBars(_Symbol,PERIOD_D1);
static int barstotal = bars;
if(barstotal != bars){
   Print(__FUNCTION__," > New cycle, drawdown reset...");
   equitymax = equity;
   isdrawdown = false;
   GlobalVariableDel(GV_DRAWDONW);
}
Comment("\nDrawdown: ",DoubleToString(drawdownperc,2));


   
for(int i = PositionsTotal()-1; i >= 0; i--){
   ulong posTicket = PositionGetTicket(i);
   if(isdrawdown || drawdownperc >= maxrisktotalperc){
   isdrawdown = true;
   GlobalVariableSet(GV_DRAWDONW,equitymax);
   trade.PositionClose(posTicket);

}
}

for(int i = OrdersTotal()-1; i >= 0; i--){
   ulong posTicket = OrderGetTicket(i);
   if(isdrawdown || drawdownperc >= maxrisktotalperc){
   isdrawdown = true;
   GlobalVariableSet(GV_DRAWDONW,equitymax);
   trade.OrderDelete(posTicket);

}
   }
//put at start of OnTick for other Eas
if(GlobalVariableCheck(GV_DRAWDONW)){
   isdrawdown = true;
   reallots = reallots * 0.5;//this is my lots value, halving it when it goes into drawdown
   double gv_drawdown = GlobalVariableGet("GV_DRAWDOWN");
   if(gv_drawdown > equitymax){equitymax = gv_drawdown;}
}





}