Hello @msherif4u, welcome to the forums 
The .mark_line(points=True)
is actually in Vega-lite equivalent to layering a lines chart .mark_line()
and a points chart .mark_point()
. By decomposing your problem into 2 different charts you have total control on the data to display with lines and with points, like in the following :
df = pd.DataFrame({
'date': pd.date_range(start='2020-01-01', end='2020-01-31'),
'OLS': [random.randint(0, 1) for x in range(31)],
'OLS2': [random.randint(0, 10) for x in range(31)],
'OLS3_nopoint': [random.randint(0, 100) for x in range(31)]
}).melt(id_vars='date', var_name="OLS", value_name="value")
lines = alt.Chart(df).mark_line().encode(
x="date:T",
y="value:Q",
color='OLS:N'
)
points = alt.Chart(df[df["OLS"]!="OLS3_nopoint"]).mark_point(filled=True, opacity=1).encode(
x="date:T",
y="value:Q",
color='OLS:N'
)
st.altair_chart(lines + points, use_container_width=True)

It should also be possible to add a column on your dataframe and use this column as an opacity channel to your points chart, I prefer that solution because you build a base graph with your x, y, color encodings, add a line over and a points controlled by opacity encoding only
df = pd.DataFrame({
'date': pd.date_range(start='2020-01-01', end='2020-01-31'),
'OLS': [random.randint(0, 1) for x in range(31)],
'OLS2': [random.randint(0, 10) for x in range(31)],
'OLS3_nopoint': [random.randint(0, 100) for x in range(31)]
}).melt(id_vars='date', var_name="OLS", value_name="value")
df['opacity'] = 0
df.loc[df['OLS']!="OLS3_nopoint", 'opacity'] = 1
base = alt.Chart(df).encode(
x="date:T",
y="value:Q",
color='OLS:N'
)
lines = base.mark_line()
points = base.mark_point(filled=True).encode(
opacity=alt.Opacity("opacity:N", legend=None)
)
st.altair_chart(lines + points, use_container_width=True)
Hope that helps,
Fanilo