コード例 #1
0
ファイル: Application.cpp プロジェクト: WeizhongDai/fixfeed
void Application::onMessage( const FIX42::NewOrderSingle& message, const FIX::SessionID& )
{
  FIX::SenderCompID senderCompID;
  FIX::TargetCompID targetCompID;
  FIX::ClOrdID clOrdID;
  FIX::Symbol symbol;
  FIX::Side side;
  FIX::OrdType ordType;
  FIX::Price price;
  FIX::OrderQty orderQty;
  FIX::TimeInForce timeInForce( FIX::TimeInForce_DAY );

  message.getHeader().get( senderCompID );
  message.getHeader().get( targetCompID );
  message.get( clOrdID );
  message.get( symbol );
  message.get( side );
  message.get( ordType );
  if ( ordType == FIX::OrdType_LIMIT )
    message.get( price );
  message.get( orderQty );
  if ( message.isSetField( timeInForce ) )
    message.get( timeInForce );

  try
  {
    if ( timeInForce != FIX::TimeInForce_DAY )
      throw std::logic_error( "Unsupported TIF, use Day" );

    Order order( clOrdID, symbol, senderCompID, targetCompID,
                 convert( side ), convert( ordType ),
                 price, (long)orderQty );

    processOrder( order );
  }
  catch ( std::exception & e )
  {
    rejectOrder( senderCompID, targetCompID, clOrdID, symbol, side, e.what() );
  }
}
コード例 #2
0
void NewOrderRequestMessage::process(OrderBook& orderBook) const {

  LOG4CXX_INFO(logger_, "Handing new order request");

  FIX::SenderCompID senderCompId;
  fixMsg_.getHeader().get(senderCompId);

  FIX::TargetCompID targetCompId;
  fixMsg_.getHeader().get(targetCompId);

  FIX::ClOrdID clOrdId;
  fixMsg_.get(clOrdId);

  FIX::Symbol symbol;
  fixMsg_.get(symbol);

  FIX::Side side;
  fixMsg_.get(side);

  FIX::OrdType orderType;
  fixMsg_.get(orderType);

  FIX::Price price;
  if (orderType == FIX::OrdType_LIMIT)
    fixMsg_.get(price);

  FIX::OrderQty orderQty;
  fixMsg_.get(orderQty);

  FIX::TimeInForce timeInForce(FIX::TimeInForce_DAY);
  if(fixMsg_.isSetField(timeInForce))
    fixMsg_.get(timeInForce);

  // let's do our validations here
  if(!exchange_->getOrderBookManager()->symbolExists(symbol.getString())) {
    LOG4CXX_INFO(logger_, "Symbol " << symbol.getString() << " not found. Rejecting this order.");
    reject("Security not found");
    return;
  }


  shared_ptr<Order> order(new Order(
      exchange_->getIdGenerator()->nextOrderId(),
      clOrdId.getValue(),
      senderCompId.getValue(),
      symbol.getValue(),
      FixTypeConverter::convert(side),
      (long)orderQty,
      price.getValue(),
      FixTypeConverter::convert(orderType),
      FixTypeConverter::convert(timeInForce)));

  // order is accepted, send order confirmation
  LOG4CXX_INFO(logger_, "New order accepted");
  exchange_->getFixEngine()->getFixMessageHandler()->sendOrderResponse(order, Order::ORDER_STATUS_NEW);

  // now match the order
  orderBook.match(order);
  if(order->isOpen()) {
    // order is not completely filled. let's add it to the order book
    orderBook.add(order);
  }
}