Requesting code review
# Morningstar Sector Codes
# 101 Basic Materials, 102 Consumer Cyclical, 103 Financial Services, 104 Real Estate, 205 Consumer Defensive, 206 Healthcare, 207 Utilities, 308 COmmunication Services, 309 Energy, 310 Industrials, 311 Technology
def perform_sector_neutral_hedge(context):
context.sector_etfs = {
101: sid(19654), # XLB Materials SPDR Fund
102: sid(19662), # XLY Consumer Discrectionary SPDR Fund
103: sid(19656), # XLF Financial SPDR Fund
104: symbol('VNQ'), # real estate?
205: sid(19659), #consumer defensive # XLP Consumer Staples SPDR Fund?
206: sid(19661), # XLV Health Care SPRD Fund
207: sid(19660), # XLU Utilities SPRD Fund
308: symbol('IYZ'), #communication services
309: sid(19655), # XLE Energy SPDR Fund
310: sid(19657), # XLI Industrial SPDR Fund
311: sid(19658) # XLK Technology SPDR Fund
}
target_short = dict.fromkeys(context.sector_etfs.keys(),0)
for purchase_record in context.purchase_history:
if purchase_record['stock'] in context.portfolio.positions:
position = purchase_record['stock']
target_short[purchase_record['sector']] = target_short[purchase_record['sector']] + context.portfolio.positions[position].cost_basis * context.portfolio.positions[position].amount
for sector in target_short:
sector_etf = context.sector_etfs[sector]
cancel_order(sector_etf)
if sector_etf not in get_open_orders():
order_target_value(sector_etf, -1 * target_short[sector])