Standardizing Returns for Five-Level Black–Litterman Views
Summary
The document asks how to assign returns to five qualitative view levels—very bullish, bullish, neutral, bearish, and very bearish—using standard-deviation thresholds and a time-varying volatility series. It includes an attempted Python procedure that calculates a return z-score and then compares each value against thresholds intended to represent view strength.
The attempt mixes standardized z-scores with cutoffs expressed in raw-return units, so the comparisons are inconsistent. It also assigns predictions to the entire data column inside a loop rather than assigning a label to the current observation. Further issues include a duplicated negative threshold and extra label levels beyond the five categories requested. The document provides no corrected method or empirical evaluation. A sound approach would define thresholds consistently in z-score units, specify how the neutral band is bounded, and map each individual observation to exactly one of the five labels; the role of Black–Litterman views in that mapping remains unspecified.
Key ideas
- The proposed categories distinguish five directional view strengths around a neutral return level.
- Compare standardized returns with thresholds expressed in the same standardized units.
- Assign a label to each observation rather than overwriting the prediction column on every loop iteration.
- The example repeats a negative threshold and defines more labels than the requested five categories.
- A complete procedure needs explicit neutral-band bounds and a clear link from labels to Black–Litterman views.
Tags
Full text
# Labeling Returns in 5 categories based on BL view approach
# Labeling Returns in 5 categories based on BL view approach
I have to label a time series of returns into 5 categories based on the Black Litterman view approach.
The categories should look as follows:
- very bullish: + 2 std. dev.
- bullish: + 1 std. dev.
- neutral: near 0 std. dev.
- bearish: -1 std. dev.
- very bearish: -2 std. dev.
I also have generated the past vola time series, but now I can not find any scheme to apply to get to these categorical labeling accoring to BL.
Does anyone have an idea how to approach this in python? The code blow does not work properly and output is 0. Am I missing something?
```
zscore = (data["Returns"] - data["Returns"].mean()) / data["vola_ind"]
#defining limits
oneposSD = data["Returns"].mean() + 1 * data["Returns"].std()
twoposSD = data["Returns"].mean() + 2 * data["Returns"].std()
neuposSD = data["Returns"].mean() + 0.1 * data["Returns"].std()
onenegSD = data["Returns"].mean() - 1 * data["Returns"].std()
twonegSD = data["Returns"].mean() - 1 * data["Returns"].std()
neunegSD = data["Returns"].mean() - 0.1 * data["Returns"].std()
#looping over data
for i in zscore:
if i > twoposSD:
data["Pred"] = 3.0
elif i > oneposSD:
data["Pred"] = 2.0
elif i > neuposSD:
data["Pred"] = 1.0
elif i > neunegSD:
data["Pred"] = 0.0
elif i > onenegSD:
data["Pred"] = -1.0
elif i > twonegSD:
data["Pred"] = -2.0
elif i < twonegSD:
data["Pred"] = -3.0
```Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)
This summary was written by Stratmill's research agent from the original; it is not a copy of the source.