void _acctVm_OnPositionDetailReturn(trade.PositionDetailInfo posiDetail)
            {
                PositionDetailItem posiItem = new PositionDetailItem();

                posiItem.Symbol            = posiDetail.InstrumentID;
                posiItem.TradeID           = posiDetail.TradeID;
                posiItem.HedgeFlag         = GetHedgeText(posiDetail.HedgeFlag);
                posiItem.Direction         = GetDirection(posiDetail.Direction);
                posiItem.OpenDate          = GetDate(posiDetail.OpenDate);
                posiItem.Volume            = posiDetail.Volume;
                posiItem.IsOpen            = posiItem.Volume > 0;
                posiItem.OpenPrice         = posiDetail.OpenPrice;
                posiItem.TradingDay        = GetDate(posiDetail.TradingDay);
                posiItem.ExchangeID        = posiDetail.ExchangeID;
                posiItem.CloseProfit       = posiDetail.CloseProfitByDate;
                posiItem.PositionProfit    = posiDetail.PositionProfitByDate;
                posiItem.Margin            = posiDetail.Margin;
                posiItem.MarginRateByMoney = posiDetail.MarginRateByMoney;
                posiItem.CloseVolume       = posiDetail.CloseVolume;
                posiItem.CloseAmount       = posiDetail.CloseAmount;

                posiItem.CloseDirection = posiDetail.Direction == trade.TradeDirectionType.BUY ?
                                          trade.TradeDirectionType.SELL : trade.TradeDirectionType.BUY;
                //posiItem.OffsetFlag = GetOffsetFlag(posiItem.Symbol, posiItem.OpenDate, posiItem.TradingDay);

                _positionDetailItems.Add(posiItem);

                UpdateTime = DateTime.Now;
            }
            private bool OnFilterPosition(object item)
            {
                PositionDetailItem posi = item as PositionDetailItem;

                if (posi != null)
                {
                    return(IncludingClosed || posi.Volume > 0);
                }

                return(false);
            }
        private void ClosePosition_Handler(object sender, RoutedEventArgs e)
        {
            Button btnClose = sender as Button;

            if (btnClose != null)
            {
                PositionDetailItem item   = btnClose.Tag as PositionDetailItem;
                string             symbol = item.Symbol;
                int  longshort            = GetDirection(item.Direction);
                int  quantity             = item.Volume - item.CloseVolume;
                bool closeYesterday       = item.OpenDate < item.TradingDay;
                Win32Invoke.Gateway.ForceClose(symbol, longshort, quantity, closeYesterday);
            }
        }
            private void OnCloseOrder(PositionDetailItem positionItem)
            {
                if (_acctVm != null)
                {
                    if (positionItem.Volume > 0)
                    {
                        SynchronizationContext syncCtx = SynchronizationContext.Current;

                        positionItem.IsClosing = true;

                        _acctVm.ManualCloseOrder(positionItem.Symbol, positionItem.CloseDirection,
                                                 positionItem.OpenDate, positionItem.Volume,
                                                 (b, err) =>
                        {
                            syncCtx.Send(o =>
                            {
                                positionItem.IsClosing = false;
                                if (b)
                                {
                                    positionItem.CloseVolume = positionItem.Volume;
                                    positionItem.Volume      = 0;
                                    positionItem.IsOpen      = false;
                                    PositionDetailItems.Refresh();
                                }
                                else
                                {
                                    System.Windows.MessageBox.Show(
                                        System.Windows.Application.Current.MainWindow,
                                        err, "平仓时发生错误",
                                        System.Windows.MessageBoxButton.OK,
                                        System.Windows.MessageBoxImage.Error);
                                }
                            }, null);
                        });
                    }
                }
            }