I'll reiterate [my recommendation][1] of [MyOpenMath][2]. To your points:

1. It understands TeX (a simplified version, using *\` math \`* instead of *\$ math \$*)
2. It sllows the use of parameters in some way to randomize numbers for each student
3. It allows these parameters within the TeX code.
4. It can be integrated into Blackboard (that's how I've been using it) using an LTI link. ([video][3])

Here are some problems I wrote, each with two randomized versions I got by clicking "New Version":

**Problem #1**. [Same problem coding, initiated by random "seed" numbers. This problem took 6 lines of code to write, and you can get pretty specific with how you want students to enter their answers. I left it totally open to accept decimals, fractions or expressions, provided they are equivalent to the correct answer.]

[![enter image description here][4]][4]

[![enter image description here][5]][5]

**Problem #2**. [Again, same problem coding, initiated by random "seed" numbers. Note that you can randomize function names and randomly order the presentation of the problem.]

[![enter image description here][6]][6]

[![enter image description here][7]][7]


**Problem #3**. [Same problem coding, initiated by random "seed" numbers. For the answers involving expressions, you can enter any algebraic expression equivalent to the correct answer (e.g. x(3x-1/x) or 3x^2-1+sin(0). It has built-in graphing capabilities that can accept random elements. Again, you can specify how the answer must look, such as being factored, etc. This particular problem was "scaffolded" so a student must get the first part correct before moving on to the next part. Each part can have hints, etc.]

[![enter image description here][8]][8]

[![enter image description here][9]][9]

The math is almost TeX, just with slightly simplified commands (MOM was coded in php). For example, one can type \`frac(3)(4)\` or just \`3/4\` to get $\frac{3}{4}$. Or for integrals, you can type \`int_5^(3x) g(t)dt\` to get $\int_5^{3x} g(t)dt$. [Notice the use of ( ) instead of { }, as well as the lack of \ characters.]

Anyway -- I hope this helps. This program has really saved me these past few terms.



**[Edit] In case you wanted to see the code for that first problem:**

\$anstypes="calculated,numfunc"

\$answerformat\[1]="equation"

\$a,\$b,\$c,\$d=nonzerodiffrands(-6,6,4)

\$func=makexxpretty("\$a x + \$b")

\$answer[0]=\$a*\$c + \$b

\$answer\[1]="x=(\$d-\$b)/\$a"


**Then the problem text looks like:**

Suppose \`f(x)=\$func`.

Evaluate \`f(\$c)\`.

Answer: \$answerbox[0]

Solve the equation \`f(x) = \$d\`. [Remember to give your answer in the form "x = ..."]

Answer: \$answerbox\[1]


  [1]: https://matheducators.stackexchange.com/a/18399/470
  [2]: https://www.myopenmath.com/info/aboutus.php
  [3]: https://www.youtube.com/watch?v=HHxT2Aewj9k
  [4]: https://i.sstatic.net/mQF5F.png
  [5]: https://i.sstatic.net/rX7pg.png
  [6]: https://i.sstatic.net/HblTR.png
  [7]: https://i.sstatic.net/gK4U3.png
  [8]: https://i.sstatic.net/OTzKB.png
  [9]: https://i.sstatic.net/jRKeL.png