コード例 #1
0
ファイル: MarketOrder.cs プロジェクト: johnmensen/TradeSharp
 public MarketOrder(int id, string ticker, Instrument instrument, int volume, int side,
     OrderPricing orderPricing, string accountGroupCode)
 {
     AccountGroupCode = accountGroupCode;
     brokerOrder = new BrokerOrder
     {
         Id = id,
         Ticker = ticker,
         Instrument = instrument,
         Volume = volume,
         Side = side,
         OrderPricing = orderPricing
     };
 }
コード例 #2
0
ファイル: MarketOrder.cs プロジェクト: johnmensen/TradeSharp
 public MarketOrder(int id, string ticker, Instrument instrument, int volume, int side,
     OrderPricing orderPricing, decimal? requestedPrice, decimal? enabledAbsoluteSlippage,
     string accountGroupCode)
 {
     AccountGroupCode = accountGroupCode;
     brokerOrder = new BrokerOrder
                       {
                           Id = id,
                           Ticker = ticker,
                           Instrument = instrument,
                           Volume = volume,
                           Side = side,
                           OrderPricing = orderPricing,
                           RequestedPrice = requestedPrice,
                           Slippage = enabledAbsoluteSlippage
                       };
 }
コード例 #3
0
ファイル: MarketOrder.cs プロジェクト: johnmensen/TradeSharp
 public MarketOrder(BrokerOrder brokerOrder)
 {
     this.brokerOrder = brokerOrder;
 }
コード例 #4
0
 public void SaveProviderMessage(BrokerOrder msg)
 {
     using (var ctx = DatabaseContext.Instance.Make())
     {
         var brokOrder = LinqToEntity.UndecorateBrokerOrder(msg);
         ctx.BROKER_ORDER.Add(brokOrder);
         ctx.SaveChanges();
     }
 }
コード例 #5
0
ファイル: FixDealer.cs プロジェクト: johnmensen/TradeSharp
        /// <summary>
        /// отдельный класс читает очередь сообщений от провайдеров
        /// каждый FIX-дилер получает сообщения своей группы        
        /// </summary>        
        public void ProcessExecutionReport(BrokerResponse response, BrokerOrder request)
        {
            Logger.InfoFormat("Запрос ({0}), ответ ({1})", request, response);
            requestWatchdog.OnRequestProcessed(response.RequestId);
            // сообщить клиенту об отказе обработать ордер
            // вынимаем ордер из базы
            MarketOrder order;
            int orderId;
            if (request.ClosingPositionID != null && request.ClosingPositionID > 0)
                orderId = (int)request.ClosingPositionID;
            else
            {
                orderId = request.RequestId;
                Logger.InfoFormat("Запрос GetMarketOrder orderId={0} requestId={1}", orderId, request.RequestId);
            }
            Logger.InfoFormat("Запрос GetMarketOrder accountId={0}, orderId={1}", request.AccountID, orderId);
            var res = ServerInterface.GetMarketOrder(orderId, out order);
            if (res == false)
            {
                errorStorage.AddMessage(new ErrorMessage(DateTime.Now, ErrorMessageType.ОтказСервера,
                        string.Format("Дилер {0}: не найдена позиция ID={0} для обработка запроса [{1}]-[счет {2}, пара {3}]",
                        request.RequestId, request.Id, request.AccountID, request.Instrument), null));
                ServerInterface.NotifyClientOnOrderRejected(order, "не найден ордер");
                return;
            }

            if (response.Status == OrderStatus.Отклонен)
            {
                var rejectReasonStr = string.IsNullOrEmpty(response.RejectReasonString)
                                          ? (response.RejectReason ?? OrderRejectReason.None).ToString()
                                          : response.RejectReasonString;
                ServerInterface.NotifyClientOnOrderRejected(order, rejectReasonStr);
                errorStorage.AddMessage(new ErrorMessage(DateTime.Now, ErrorMessageType.ОтказСервера,
                        string.Format("Дилер {0}: отказ сервера [{1}] на запрос [{2}]-[счет {3}, пара {4}]",
                        DealerCode, rejectReasonStr, request.Id, request.AccountID, request.Instrument), null));
                return;
            }
            if (!response.Price.HasValue)
            {
                errorStorage.AddMessage(new ErrorMessage(DateTime.Now, ErrorMessageType.ОтказСервера,
                        string.Format("Дилер {0}: отказ сервера [нет цены] на запрос [{1}]-[счет {2}, пара {3}]",
                        DealerCode, request.Id, request.AccountID, request.Instrument), null));
                ServerInterface.NotifyClientOnOrderRejected(order, "Нет цены");
                return;
            }
            var deltaMarkup = request.MarkupAbs * order.Side;

            // закрытие позиции - ордер обработан
            if (request.ClosingPositionID.HasValue)
            {
                var reason = exitReasonByOrderId.ReceiveValue(order.ID);
                // закрыть ордер немедленно
                ServerInterface.CloseOrder(order.ID, response.Price.Value - (decimal)deltaMarkup, reason);
                return;
            }

            // открытие позы - обработано
            order.TimeEnter = response.ValueDate;
            order.PriceEnter = (float)response.Price.Value + deltaMarkup;
            order.State = PositionState.Opened;
            ServerInterface.ModifyMarketOrder(order);
        }
コード例 #6
0
 public static BROKER_ORDER UndecorateBrokerOrder(BrokerOrder ord)
 {
     var order = new BROKER_ORDER
     {
         RequestID = ord.RequestId,
         ID = ord.Id,
         Ticker = ord.Ticker,
         Instrument = (int)ord.Instrument,
         Volume = ord.Volume,
         Side = ord.Side,
         OrderPricing = (int)ord.OrderPricing,
         RequestedPrice = ord.RequestedPrice,
         Slippage = ord.Slippage,
         Dealer = ord.DealerCode,
         AccountID = ord.AccountID,
         ClosingPositionID = ord.ClosingPositionID,
         TimeCreated = ord.TimeCreated,
         Magic = ord.Magic,
         Comment = ord.Comment,
         ExpertComment = ord.ExpertComment,
         Markup = ord.MarkupAbs
     };
     return order;
 }