Decouple indicators and graphing logic. Make GraphViewController which is ABC for PGVC. It takes most of the graphing logic out of PGVC and the bounds info out of GraphView. PGVC can now focus on interaction. Something that corresponds to GraphObject protocol knows how to draw itself on a graph based on a given function. It basically is a function mapping. All GraphObjects being drawn have the same input function (raw price).