Volume Check and Adjust

 

Article URL : https://www.mql5.com/en/articles/2555#invalid_lot


I am getting Error 131



To resolve this, I am trying something like Volume Error Handling. It update value automatically.


   Buy_Lot_Size = MathMax(SymbolInfoDouble(buy_random_symbol, SYMBOL_VOLUME_MIN), MathMin(Buy_Lot_Size, SymbolInfoDouble(buy_random_symbol, SYMBOL_VOLUME_MAX)));
   Sell_Lot_Size = MathMax(SymbolInfoDouble(sell_random_symbol, SYMBOL_VOLUME_MIN), MathMin(Sell_Lot_Size, SymbolInfoDouble(sell_random_symbol, SYMBOL_VOLUME_MAX)));


or


   Buy_Lot_Size = MathMax(MarketInfo(buy_random_symbol, MODE_MINLOT), MathMin(Buy_Lot_Size, MarketInfo(buy_random_symbol, MODE_MAXLOT)));
   Sell_Lot_Size = MathMax(MarketInfo(sell_random_symbol, MODE_MINLOT), MathMin(Sell_Lot_Size, MarketInfo(sell_random_symbol, MODE_MAXLOT)));


Instead of


//+------------------------------------------------------------------+
//| Check the correctness of the order volume                        |
//+------------------------------------------------------------------+
bool CheckVolumeValue(double volume,string &description)
  {
//--- minimal allowed volume for trade operations
   double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
   if(volume<min_volume)
     {
      description=StringFormat("Volume is less than the minimal allowed SYMBOL_VOLUME_MIN=%.2f",min_volume);
      return(false);
     }

//--- maximal allowed volume of trade operations
   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
   if(volume>max_volume)
     {
      description=StringFormat("Volume is greater than the maximal allowed SYMBOL_VOLUME_MAX=%.2f",max_volume);
      return(false);
     }

//--- get minimal step of volume changing
   double volume_step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);

   int ratio=(int)MathRound(volume/volume_step);
   if(MathAbs(ratio*volume_step-volume)>0.0000001)
     {
      description=StringFormat("Volume is not a multiple of the minimal step SYMBOL_VOLUME_STEP=%.2f, the closest correct volume is %.2f",
                               volume_step,ratio*volume_step);
      return(false);
     }
   description="Correct volume value";
   return(true);
  }



But my both of the code is not working. What wrong with my code. it does exact same and even better than article URL. it also adjust the Volume size after comparison.

The checks a trading robot must pass before publication in the Market
The checks a trading robot must pass before publication in the Market
  • www.mql5.com
Before any product is published in the Market, it must undergo compulsory preliminary checks in order to ensure a uniform quality standard. This article considers the most frequent errors made by developers in their technical indicators and trading robots. An also shows how to self-test a product before sending it to the Market.
 
anuj71:

What you are raising has already been answered hundreds of times in the forum:

https://www.mql5.com/en/search#!keyword=error%20131