Ejemplo n.º 1
0
 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;
 }
Ejemplo n.º 2
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 );
            //}
        }