private void Reset() { exposure = PositionExposure.FLAT; open_pos = open_prc = closed_pos = closed_val = buy_qty = buy_val = sell_qty = sell_val = buy_avg = sell_avg = open_pl = closed_pl = total_pl = notional_pl = 0.0; }
private void Update(Fill fill) { //if( log.IsDebugEnabled ) //{ // log.Info( "PRE_UPDATE" ); // log.Info( " buy_qty: " + buy_qty ); // log.Info( " buy_val: " + buy_val ); // log.Info( " sel_qty: " + sell_qty ); // log.Info( " sel_val: " + sell_val ); // log.Info( " open_pos: " + open_pos ); // log.Info( " open_prc: " + open_prc ); // log.Info( " closed_pos: " + closed_pos ); // log.Info( " closed_val: " + closed_val ); //} if (Fill.SideCode.BUY == fill.Side) { buy_qty += fill.Quantity; buy_val += fill.Quantity * fill.Price; } else { sell_qty += fill.Quantity; sell_val += fill.Quantity * fill.Price; } if (buy_qty == sell_qty) { exposure = PositionExposure.FLAT; closed_pos += buy_qty; closed_val += sell_val - buy_val; open_pos = open_prc = buy_qty = buy_val = sell_qty = sell_val = 0.0; } else if (buy_qty > sell_qty) { exposure = PositionExposure.LONG; if (buy_val > 0 && buy_qty > 0) { buy_avg = buy_val / buy_qty; } buy_qty -= sell_qty; buy_val = buy_qty * buy_avg; open_pos = buy_qty; open_prc = buy_avg; closed_pos += sell_qty; closed_val += sell_val - (sell_qty * buy_avg); sell_qty = sell_val = 0.0; } else { exposure = PositionExposure.SHORT; if (sell_val > 0 && sell_qty > 0) { sell_avg = sell_val / sell_qty; } sell_qty -= buy_qty; sell_val = sell_qty * sell_avg; open_pos = sell_qty; open_prc = sell_avg; closed_pos += buy_qty; closed_val += (buy_qty * sell_avg) - buy_val; buy_qty = buy_val = 0.0; } //if( log.IsDebugEnabled ) //{ // log.Info( "POST_UPDATE" ); // log.Info( " buy_qty: " + buy_qty ); // log.Info( " buy_val: " + buy_val ); // log.Info( " sel_qty: " + sell_qty ); // log.Info( " sel_val: " + sell_val ); // log.Info( " open_pos: " + open_pos ); // log.Info( " open_prc: " + open_prc ); // log.Info( " closed_pos: " + closed_pos ); // log.Info( " closed_val: " + closed_val ); //} }