The major problem is not the broker supplying wrong values, but the EA making some crazy calculations. I did a small modification on the EA(MT5 bridge) and now I can get the correct values.

Code
            double dLotFactor = MarketInfo(Asset,MODE_MINLOT); // correction for different lot scale
            double dFactor = pointFactor(Asset); // correction for brokers with 5 digits
            double pipPosition = MarketInfo(Asset,MODE_DIGITS) - 1;
            string quotecur = StringSubstr(Asset,3);
            double price = MarketInfo(Asset,MODE_ASK);
            double pip =  pow(10,-pipPosition);
            double lotamount =  MarketInfo(Asset,MODE_LOTSIZE) * dLotFactor;
            double pipcost = lotamount * pip;
            double leverage = AccountInfoInteger(ACCOUNT_LEVERAGE);
            double margincost = (lotamount * price);
            if(StringLen(Asset) == 6)
              {

               if(StringCompare(quotecur,"USD") != 0)
                 {
                  string symboconvert = "USD" + quotecur;
                  double price2;
                  bool is_custom=false;

                  if(SymbolExist(symboconvert,is_custom))
                    {
                     price2 = MarketInfo("USD" + quotecur,MODE_ASK);
                     is_custom = true;
                    }
                  else
                     if(SymbolExist(quotecur + "USD",is_custom))
                       {
                        price2 = MarketInfo(quotecur + "USD",MODE_ASK);
                        is_custom = true;
                       }
                  if(is_custom)
                    {
                     pipcost = pipcost / price2;
                     margincost = margincost / price2;
                    }

                 }
              }
            margincost = margincost / leverage;
            double rollLong  = MarketInfo(Asset,MODE_SWAPLONG) * pipcost ;
            double rollShort = MarketInfo(Asset,MODE_SWAPSHORT)* pipcost  ;

            /////////

            double LotFactor = MarketInfo(Asset,MODE_MINLOT); // correction for different lot scale

            Factor = pointFactor(Asset); // correction for brokers with 5 digits
            arr[3] = PIP = pip;
            arr[4] = PIPCost = pipcost;
            arr[5] = LotAmount = lotamount;
            if(LotAmount == 0. && arr[0] > 0.)
               Print("Asset ",Asset," Lot ",MarketInfo(Asset,MODE_LOTSIZE)," Min ",LotFactor);
            arr[6] = margincost;
            arr[7] = rollLong;
            arr[8] = rollShort;

            arr[9] = iVolume(Asset,PERIOD_M15,0)/15.;
            ZorroRespond(cmd,arr);
            break;