Exemplo n.º 1
0
        //双击撤单/平仓
        private void dataGridView_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex < 0 || e.RowIndex < 0)
            {
                return;
            }

            var rgv = (DataGridView)sender;
            var row = rgv.CurrentRow;

            if (row == null)
            {
                return;
            }

            if (rgv == this.dataGridViewOrder)
            {
                if (MessageBox.Show(this, "确认撤单操作(Y/N)", "确认", MessageBoxButtons.YesNo) == DialogResult.No)
                {
                    return;
                }

                OrderField of = (OrderField)row.DataBoundItem;
                if (of.Status == OrderStatus.Normal || of.Status == OrderStatus.Partial)
                {
                    _t.ReqOrderAction(of.OrderID);
                }
            }
            else if (rgv == this.dataGridViewPosition)
            {
                if (MessageBox.Show(this, "确认快速平仓操作(Y/N)", "确认", MessageBoxButtons.YesNo) == DialogResult.No)
                {
                    return;
                }

                PositionField pf    = (PositionField)row.DataBoundItem;
                var           dir   = pf.Direction == DirectionType.Buy ? DirectionType.Sell : DirectionType.Buy;
                var           price = dir == DirectionType.Buy ? _q.DicTick[pf.InstrumentID].AskPrice : _q.DicTick[pf.InstrumentID].BidPrice;
                var           lots  = pf.Position;
                if (_t.DicInstrumentField[pf.InstrumentID].ExchangeID == Exchange.SHFE && pf.TdPosition > 0)
                {
                    _t.ReqOrderInsert(pf.InstrumentID, dir, OffsetType.CloseToday, price, pf.TdPosition, 0);
                    lots -= pf.TdPosition;
                }
                if (lots > 0)
                {
                    close(pf, price, lots);
                }
            }
        }
Exemplo n.º 2
0
        //策略委托:
        void stra_OnRtnOrder(OrderItem pOrderItem, Data pData, Strategy pStrategy)
        {
            //实际委托
            if (pStrategy.EnableOrder)
            {
                LogInfo($"{pStrategy.Name,-8}{pOrderItem.Date,20}{pData.InstrumentOrder,8}{pOrderItem.Dir,4}{pOrderItem.Offset,6}{pOrderItem.Price,12:F2}{pOrderItem.Lots,4}{pOrderItem.Remark}");
                var price = pOrderItem.Price;

                //处理映射合约的价格
                if (pData.Instrument != pData.InstrumentOrder)
                {
                    price = pOrderItem.Dir == Direction.Buy ? _q.DicTick[pData.InstrumentOrder].AskPrice : _q.DicTick[pData.InstrumentOrder].AskPrice;
                }

                //处理上期所平今操作
                if (pOrderItem.Offset == Offset.Close)
                {
                    int lots = pOrderItem.Lots;
                    _t.ClosePosi(pData.InstrumentOrder, pOrderItem.Dir == Direction.Buy ? DirectionType.Sell : DirectionType.Buy, price, pOrderItem.Lots, int.Parse(pStrategy.Name) * 100);
                }
                else
                {
                    _t.ReqOrderInsert(pData.InstrumentOrder, pOrderItem.Dir == Direction.Buy ? DirectionType.Buy : DirectionType.Sell, OffsetType.Open, price, pOrderItem.Lots, pCustom: int.Parse(pStrategy.Name) * 100);
                }
            }
        }