There are no overlapping dates because the rate for the 6M deposit is for an investment starting 25/10/2019 and ending 27/04/2020. The rate for the FRA is for an investment starting 27/04/2020 and ending 27/10/2020. That is why you can determine the discount factor (or zero rate) from 25/10/2019 to 27/10/2020, because the return on an investment for these dates has to be the same as the combination of the 6M Deposit and 6x12 FRA.
Here are two possible simple implementations in python that yield the same result to help you figure out where might be the problem.
Using native python:
from datetime import date, timedelta
today = date(2019,10,23)
spot = today + timedelta(days=2)
deposit_maturity = date(2020, 4, 27)
deposit_dcf = (deposit_maturity - spot).days / 360
df1 = 1 / ( 1+ 0.05 * deposit_dcf)
fra_maturity = date(2020, 10, 27)
fra_dcf = (fra_maturity - deposit_maturity).days / 360
df2 = df1 / (1 + 0.052 * fra_dcf)
print(df1, df2)
Output is: 0.974949221394719 0.9498417381171556
Using QuantLib in python:
import QuantLib as ql
today = ql.Date(23,10,2019)
ql.Settings.instance().evaluationDate = today
helpers = []
helpers.append(
ql.DepositRateHelper(ql.QuoteHandle(ql.SimpleQuote(0.05)),
ql.Period(6, ql.Months), 2,
ql.TARGET(), ql.Following, False, ql.Actual360())
)
index = ql.Euribor6M()
helpers.append(
ql.FraRateHelper(ql.QuoteHandle(ql.SimpleQuote(0.052)), 6, index)
)
curve = ql.PiecewiseLogCubicDiscount(2, ql.TARGET(), helpers,
ql.Actual365Fixed())
for dt in curve.dates():
print(dt, curve.discount(dt))
Output is:
October 25th, 2019 1.0
April 27th, 2020 0.9749492213947191
October 27th, 2020 0.9498417381171556