I don't have a complete system for you to refer to, but I can give you a few pointers on how to accomplish what you want.
To go long or short, simply call OpenPosition(). There is an argument which specifies the position type (long or short).
To reverse your position, you need to close the currently open position and open another position in the opposite direction. You can get a list of open positions by calling PositionManager.GetOpenPositions(). You can pass in a specific symbol to only get the open positions for that symbol. You can call ClosePosition() to close the positions, and then OpenPosition() to open a position in the opposite direction.
You can call PositionManager.SetProfitTarget() and PositionManager.SetStopLoss() to set the profit targets and stop losses. You can do this when a position is opened in an OrderFilled event handler, or at any other time. You could also call it in the NewSymbolBar() method to modify the profit target or stop loss.
For additional exits, you can call ClosePosition() any time according to your own logic. For example if you want to close your open positions before the close of the market, you could check the PriceDateTime of the bar in the NewBar() method, and if it 3:30 or later (for example), you could close all your current positions. If you want to send a non-market order, you can use PositionManager.RemoveFromPosition().
I would handle initiating entry only after a certain percentage of the day the same way. If the bar PriceDateTime is before a certain time, then don't make any trades.
Pyramiding can be handled with the PositionManager.AddToPosition() and PositionManager.RemoveFromPosition() methods.
As far as books go, you may want to look at "CLR Via C#" by Jeffrey Richter. It is an excellent book, but it is targeted more towards people who already know the basics of C#, and covers a lot of the advanced stuff and what happens "under the covers." So I'm not sure if that's really what you're looking for.