Asymptotes
with the lines through the mid-points of the sides of the triangle ABC as asymptotes.
Are you certain about this? My own experiments suggest otherwise:

The green line should be the locus you're after. I drew it as a polygon of 7581 of computed data points, using adaptive refinement, so the straight lines visible in the picture should be fairly good approximations of the asymptotes.
As you can see, they do not pass through the midpoints as you claimed. At first I though this a problem with your assumption. But because the curve approaches each asymptote from the same side, insufficient data points will not result in much change to the slope of the connecting line, but may well result in a large shift in position. So at some later point I supposed that the image simply had too few data points to show the correct asymptotes. Back then it was only 256 points. Now with this adaptive refinement in place I'm back to my original interpretation: it seems like your assumption is incorrect, particularly since the number of data points has no effect on the position of these asymptotes.
Looking closer, one can see that these asymptotes apparently intersect the edges of the triangle in a ratio of 1:4 (portion : whole edge, so one portion : other portion will be 1:3). I could reproduce this observation for various positions of $A,B,C$.
How to compute
Here is how the code behind the above image works at the moment. You can turn this into some generic formula which expresses the locus as a function of a single parameter, thus obtaining a parametrized version of your curve. All of the computation below is done using projective geometry, i.e. in $\mathbb R\mathrm P^2$.
Choose $D$ as a point at infinity in an arbitrary direction. This is where your single parameter comes in. If you want $D$ to pass through every point of the line at infinity, assign coordinates $(\cos\alpha,\sin\alpha,0)^T$ for all $\alpha\in[0,\pi)$.
Form two degenerate conics passing through these four points. You obtain such degenerate conics as the matrix product of two lines, and you obtain such lines as the cross product of two points on them. So you might compute e.g.
$$E_1 = (A\times B)\cdot(C\times D)^T\\
E_2 = (A\times C)\cdot(B\times D)^T$$
Symmetrize these matrices as $F_1 = E_1 + E_1^T$ and $F_2 = E_2 + E_2^T$.
Find $\mu$ such that $P = F_1 + \mu F_2$ is a parabola. You can check this by looking at the determinant of the upper left $2\times2$ submatrix. This will yield a quadratic equation in $\mu$. But for reasons I don't yet fully understand, the two solutions will always coincide, so this way you can obtain the matrix of the parabola through $A,B,C,D$.
To obtain the vertex of the parabola, you first compute the point at infinity which lies orthogonal to $D$, i.e. the point $H = (D_2, -D_1, 0)^T$. The tangent to the parabola at its apex will pass through $H$.
Compute the polar line of point $H$ with respect to the parabola $P$. This is the line $L = P\cdot H$. It will intersect $P$ in two points: $D$ and the apex.
Form the matrix $M$ from the line $L$ like this:
$$M = \begin{pmatrix}
0 & -L_3 & L_2 \\
L_3 & 0 & -L_1 \\
-L_2 & L_1 & 0
\end{pmatrix}$$
Multiplication of a vector with $M$ has the same effect as a cross product of $L$ with that vector.
Compute $N = M^T\cdot P\cdot N$. This is the rank 2 matrix of a degenerate dual conic. Its components are the two points of intersection we are looking for.
Find $\tau$ such that $Q = N + \tau M$ has rank 1. To do so, you have to ensure that all $2\times 2$ submatrices of $Q$ have determinant $0$. But looking at any single one which leads to a full quadratic equation will be enough to obtain the solution. The two solutions of the quadratic equation in $\tau$ will differ only by their sign, so it does not matter which one you choose.
Choose any non-zero row and any non-zero column of $Q$ as representants of your point of intersection. One of them will be (a multiple of) $D$ and therefore have a $0$ in its last component. The other will be the apex you are looking for. If you want to, you can dehomogenize that point.
Symbolic computation
You can code all of the above in a computer algebra system and obtain a closed formula with $\alpha$ as a parameter in the end. Here is some sage code to perform the above computation symbolically:
var('ax ay bx by cx cy dx dy mu tau')
A = vector([ax, ay, 1])
B = vector([bx, by, 1])
C = vector([cx, cy, 1])
D = vector([dx, dy, 0])
E1 = A.cross_product(B).column() * C.cross_product(D).row()
E2 = A.cross_product(C).column() * B.cross_product(D).row()
F1 = E1 + E1.transpose()
F2 = E2 + E2.transpose()
mus = solve((F1 + mu*F2).submatrix(0, 0, 2, 2).det(), mu)
assert(len(mus) == 1)
mu1 = mus[0].rhs()
P = mu1.denominator()*F1 + mu1.numerator()*F2
H = vector([D[1], -D[0], 0])
L = P*H
M = Matrix([
[0, -L[2], L[1]],
[L[2], 0, -L[0]],
[-L[1], L[0], 0]])
N = M.transpose()*P*M
taus = solve((N + tau*M).submatrix(0, 0, 2, 2).det(), tau)
assert((taus[0].rhs() + taus[1].rhs()).is_zero())
Q = N + taus[0].rhs()*M
assert(Q[2,2].is_zero())
assert(Q[1,2].is_zero() or Q[2,1].is_zero())
R = Q.row(1) if Q[2,1].is_zero() else Q.column(1)
S = vector([R[0]/R[2], R[1]/R[2]])
var('alpha', domain='real')
T = S.subs(dy=sin(alpha), dx=cos(alpha)).simplify_full()
The letters were chosen such that they agree with the explanation above. The point $R$ is the point of intersection which is different from $D$. $S$ is its dehomogenized form, and $T$ replaces the original homogenous coordinates of $D$ by trigonometric functions of a single parameter.
Some of the case distinctions mentioned in the original description, those avoiding some zeros, won't make a lot of sense on the symbolic level. So you might find situations where a given formula will be undefined although an alternate and otherwise equivalent formulation would work well. A good simplify might avoid some of these cases, but so far my final result still is several hundred lines long, which is not what I'd call simple. Too long to paste here.
Some more experiments
Here is another interesting configuration for your three points $A,B,C$:

That shape of the curve looks pretty complicated. In particular it is apparently no mistake that the curve may cross its own asymptotes. It also may have inflection points, which wasn't apparent from the original configuration.