//双击撤单/平仓 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); } } }
//策略委托: 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); } } }