In the method below all the portfolio values at each time interval are calculated. Then they are aggregated in each time period and the period return is calculated. Finally the period returns are compounded and annualised.
For example, the portfolio return between periods x5 and x6 is
(a11 + a23 + a34)/(a1 + a22 + a33) - 1 = 0.903 %
where a1 is the starting value of asset 1 and a11 is the value of asset 1 after one time period. If the actual values were known this would give a better result, but given the limited information they are calculated.
Compounding the period returns is the same as taking the time-weighted return.

s1 = {2017, 6, 7};
e1 = {2017, 12, 4};
s2 = {2015, 9, 2};
e2 = {2017, 11, 1};
s3 = {2015, 2, 25};
e3 = {2017, 7, 3};
s4 = {2015, 2, 20};
e4 = {2017, 6, 2};
d1 = QuantityMagnitude@DateDifference[s1, e1, "Day"];
d2 = QuantityMagnitude@DateDifference[s2, e2, "Day"];
d3 = QuantityMagnitude@DateDifference[s3, e3, "Day"];
d4 = QuantityMagnitude@DateDifference[s4, e4, "Day"];
a1 = 4606.75;
v1 = 4529 + 27.48;
a2 = 3500;
v2 = 5827 + 56;
a3 = 2900;
v3 = 3998 + 72;
a4 = 2900;
v4 = 3566;
r1 = (v1/a1)^(1/d1) - 1.0
r2 = (v2/a2)^(1/d2) - 1.0
r3 = (v3/a3)^(1/d3) - 1.0
r4 = (v4/a4)^(1/d4) - 1.0
-0.0000609549
0.000656731
0.000394644
0.000248211
The above are the daily rates of return for the four assets.
x1 = {2015, 2, 20};
x2 = {2015, 2, 25};
x3 = {2015, 9, 2};
x4 = {2017, 6, 2};
x5 = {2017, 6, 7};
x6 = {2017, 7, 3};
x7 = {2017, 11, 1};
x8 = {2017, 12, 4};
k1 = QuantityMagnitude@DateDifference[x1, x2, "Day"];
k2 = QuantityMagnitude@DateDifference[x2, x3, "Day"];
k3 = QuantityMagnitude@DateDifference[x3, x4, "Day"];
k4 = QuantityMagnitude@DateDifference[x4, x5, "Day"];
k5 = QuantityMagnitude@DateDifference[x5, x6, "Day"];
k6 = QuantityMagnitude@DateDifference[x6, x7, "Day"];
k7 = QuantityMagnitude@DateDifference[x7, x8, "Day"];
a41 = a4 (1 + r4)^k1;
a42 = a41 (1 + r4)^k2;
a43 = a42 (1 + r4)^k3
3566.
The calculated value of asset 4 after three period is the same as the final value v4 above.
a31 = a3 (1 + r3)^k2;
a32 = a31 (1 + r3)^k3;
a33 = a32 (1 + r3)^k4;
a34 = a33 (1 + r3)^k5
4070.
a21 = a2 (1 + r2)^k3;
a22 = a21 (1 + r2)^k4;
a23 = a22 (1 + r2)^k5;
a24 = a23 (1 + r2)^k6
5883.
a11 = a1 (1 + r1)^k5;
a12 = a11 (1 + r1)^k6;
a13 = a12 (1 + r1)^k7
4556.48
z1 = a41/a4;
z2 = (a31 + a42)/(a3 + a41);
z3 = (a21 + a32 + a43)/(a2 + a31 + a42);
z4 = (a22 + a33)/(a21 + a32);
z5 = (a11 + a23 + a34)/(a1 + a22 + a33);
z6 = (a12 + a24)/(a11 + a23);
z7 = a13/a12;
k = QuantityMagnitude@DateDifference[x1, x8, "Day"];
(z1*z2*z3*z4*z5*z6*z7)^(365/k) - 1
0.154885
So the portfolio return is 15.49% per annum.