//+------------------------------------------------------------------+
//|                                                  Money_mgmnt.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

//+------------------------------------------------------------------+
//| defines                                                          |
//+------------------------------------------------------------------+
// #define MacrosHello   "Hello, world!"
// #define MacrosYear    2005

//+------------------------------------------------------------------+
//| DLL imports                                                      |
//+------------------------------------------------------------------+
// #import "user32.dll"
//   int      SendMessageA(int hWnd,int Msg,int wParam,int lParam);

// #import "my_expert.dll"
//   int      ExpertRecalculate(int wParam,int lParam);
// #import

//+------------------------------------------------------------------+
//| EX4 imports                                                      |
//+------------------------------------------------------------------+
// #import "stdlib.ex4"
//   string ErrorDescription(int error_code);
// #import
//+------------------------------------------------------------------+

double Get_Lot_Size(int stopsize, double risk, double balance, bool Strict)
  
   { 
   double lotsize, fulllotcost, riskcost, riskratio,p;
   int lotsteps;
   
   p=1;
   if(Digits ==3 || Digits ==5) p=10;
   
   riskcost = balance* risk* 0.01;
   
   fulllotcost = MarketInfo(Symbol(), MODE_TICKVALUE) * stopsize*p;
   riskratio = riskcost/fulllotcost;
   
   if (riskratio < MarketInfo(Symbol(),MODE_MINLOT) && Strict) return(0);
   
   else if (riskratio < MarketInfo(Symbol(),MODE_MINLOT)) return(MarketInfo(Symbol(),MODE_MINLOT));
   
   else
      {
      lotsteps = (NormalizeDouble((riskratio- MarketInfo(Symbol(),MODE_MINLOT))/MarketInfo(Symbol(),MODE_LOTSTEP),0));
      
      lotsize = MarketInfo(Symbol(),MODE_MINLOT) + lotsteps*MarketInfo(Symbol(),MODE_LOTSTEP);
      
      if(lotsize<riskratio)
         {
         if(lotsize < MarketInfo(Symbol(),MODE_MINLOT)+ MarketInfo(Symbol(),MODE_LOTSTEP)) lotsize = MarketInfo(Symbol(),MODE_MINLOT);
         else lotsize = lotsize - MarketInfo(Symbol(),MODE_LOTSTEP);
         }
      return(lotsize);
      
      }
   }