OnixS C++ ICE Binary Order Entry Handler 1.1.1
API Documentation
Loading...
Searching...
No Matches
TradingClient Class Reference

Public Member Functions

 TradingClient (const Settings &settings)
void connectBus ()
void requestBgwCredentials ()
void requestInstruments ()
void listInstruments ()
void lookupInstruments ()
void connectBgw ()
void traderLogon ()
void traderLogout ()
void sendOrder ()
void cancelOrder ()
void replaceOrder ()
void sendOrderCross ()
void sendMassCancel ()
void showOrders ()
void showActiveOrders ()
void sendQuote ()
void sendQuoteCancelRequest ()
void sendMassQuote ()
void createStrategy ()
void createFlex ()

Detailed Description

Definition at line 45 of file TradingClient.h.

Constructor & Destructor Documentation

◆ TradingClient()

TradingClient ( const Settings & settings)
explicit

Initializes the client with the given settings.

Definition at line 468 of file TradingClient.cpp.

469 : settings_(settings)
470 , sessionSettings_(fillSessionSettings(settings_))
471 , newOrderRequest_(initNewOrder(settings))
472 , securityDefinitionRequest_(initSecurityDefinitionRequest(settings))
473 , cancelRequest_(initOrderCancelRequest(settings))
474 , replaceRequest_(initOrderReplaceRequest(settings))
475 , newOrderCrossRequest_(initNewOrderCrossRequest(settings))
476 , orderMassCancelRequest_(initOrderMassCancelRequest(settings))
477 , quoteRequest_(initQuoteRequest(settings))
478 , quoteCancelRequest_(initQuoteCancelRequest(settings))
479 , massQuoteRequest_(initMassQuoteRequest(settings))
480{
481}

Member Function Documentation

◆ cancelOrder()

void cancelOrder ( )

Sends a cancel request for a specific order.

Definition at line 1063 of file TradingClient.cpp.

1064{
1065 checkConnected(bgwSession_, "BGW");
1066
1067 const auto ordersInBook = orderBook_.getEntries(activeOrder);
1068
1069 if (ordersInBook.empty())
1070 {
1071 Screen::warning("No active orders found");
1072 return;
1073 }
1074
1075 ListViewer::outputItems(ordersInBook, print);
1076
1077 Screen::out("Enter the index of the order to be canceled");
1078
1079 const auto orderIndex = Screen::getInput<size_t>();
1080 const Order& order = *ordersInBook.at(orderIndex - 1);
1081
1082 cancelRequest_->
1083 clOrdId(IdGenerator::newId())
1084 .origClOrdId(order.cIOrdId_)
1085 .symbol(order.securityId_)
1086 .side(order.side_)
1087 ;
1088
1089 TradingClient::send(bgwSession_, cancelRequest_);
1090}

◆ connectBgw()

void connectBgw ( )

Establishes a BGW session using previously obtained credentials.

Definition at line 575 of file TradingClient.cpp.

576{
577 if(!bgwCredentials_)
578 throw std::runtime_error("BGW credentials must be obtained first");
579
580 auto settings = sessionSettings_;
581
582 if(!bgwSession_)
583 bgwSession_.reset(new Session(SessionType::BGW, settings, this));
584
585 bgwSession_->connect(bgwCredentials_.host(), bgwCredentials_.port(), bgwCredentials_.ipSessionToken());
586}

◆ connectBus()

void connectBus ( )

Commands.

Establishes a BUS session (network/control plane).

Definition at line 493 of file TradingClient.cpp.

494{
495 auto settings = sessionSettings_;
496
497 if(!busSession_)
498 busSession_.reset(new Session(SessionType::BUS, settings, this));
499
500 busSession_->connect(settings_.get("Host"), settings_.get<Port>("Port"));
501}

◆ createFlex()

void createFlex ( )

Creates a flexible instrument (flex).

Definition at line 928 of file TradingClient.cpp.

929{
930 checkConnected(bgwSession_, "BGW");
931
932 MessageHolder<SecurityDefinitionRequest_CreateFlex> msg;
933 msg->securityRequestType(SecurityRequestTypeEnum::CreateFlexOption);
934 msg->securityReqId(static_cast<Int32>(IdGenerator::newId()));
935
936 const auto marketTypeId = queryNumeric("MarketTypeId", Default::MarketTypeId);
937 const auto type = queryEnum("SecurityType", {SecurityTypeEnum::OPT, SecurityTypeEnum::FUT, SecurityTypeEnum::MLEG}, SecurityTypeEnum::OPT);
938
939 using OptionalDate = decltype(std::declval<const SecurityDefinitionRequest_CreateFlex&>().maturityDate());
940 const auto maturityDate = queryOptionalTimestamp<OptionalDate>("MaturityDate");
941
942 using OptionalProductId = decltype(std::declval<const SecurityDefinitionRequest_CreateFlex&>().productId());
943 const auto productId = queryOptionalNumeric<OptionalProductId>("ProductId");
944
945 using OptionalSymbol = decltype(std::declval<const SecurityDefinitionRequest_CreateFlex&>().symbol());
946 const auto symbol = queryOptionalNumeric<OptionalSymbol>("Symbol");
947
948 using OptionalPrice = decltype(std::declval<const SecurityDefinitionRequest_CreateFlex&>().strikePrice());
949 const auto price = queryOptionalDecimal<OptionalPrice>("StrikePrice");
950
951 msg->securityType(type);
952 msg->marketTypeId(marketTypeId);
953 msg->productId(productId.raw());
954 msg->symbol(symbol.raw());
955 msg->strikePrice(price.raw());
956
957 if(maturityDate)
958 msg->maturityDate(*maturityDate);
959 else
960 msg->maturityDate(nullOpt);
961
962 TradingClient::send(bgwSession_, msg);
963}

◆ createStrategy()

void createStrategy ( )

Creates a strategy.

Definition at line 866 of file TradingClient.cpp.

867{
868 checkConnected(bgwSession_, "BGW");
869
870 constexpr size_t CreateStrategyMaxLegsCount = 5;
871
872 MessageHolder<
873 SecurityDefinitionRequest_CreateStrategy,
874 getMaxMessageSize<SecurityDefinitionRequest_CreateStrategy>(CreateStrategyMaxLegsCount)> msg;
875
876 msg->marketTypeId(queryNumeric("MarketTypeId", Default::MarketTypeId));
877 msg->securityReqId(static_cast<Int32>(IdGenerator::newId() & 0xFFFFFFFFull));
878 msg->securityRequestType(SecurityRequestTypeEnum::CreateStrategy);
879 msg->securityType(SecurityTypeEnum::MLEG);
880
881 using OptionalDate = decltype(std::declval<const SecurityDefinitionRequest_CreateStrategy&>().startDate());
882 const auto startDate = queryOptionalTimestamp<OptionalDate>("StartDate");
883 const auto endDate = queryOptionalTimestamp<OptionalDate>("EndDate");
884
885 if(startDate)
886 msg->startDate(*startDate);
887 else
888 msg->startDate(nullOpt);
889
890 if(endDate)
891 msg->endDate(*endDate);
892 else
893 msg->endDate(nullOpt);
894
895 const auto legsCount = queryNumeric("Number of Legs", UInt32{2});
896
897 assert(legsCount <= CreateStrategyMaxLegsCount);
898
899 assert(std::distance(std::begin(Default::Symbols), std::end(Default::Symbols)) >= legsCount);
900 auto defaultSymbol = std::begin(Default::Symbols);
901
902 auto legs = msg->legs(legsCount);
903
904 for(auto&& leg : legs)
905 {
906 leg.legSecurityType(SecurityTypeEnum::OPT);
907
908 leg.legSymbol(queryNumeric("Symbol", *defaultSymbol));
909
910 const auto side = querySide({SideEnum::Buy, SideEnum::Sell});
911 leg.legSide(side);
912
913 using OptDenominator = decltype(std::declval<const std::decay<decltype(leg)>::type>().legRatioQtyDenominator());
914 const auto denominator = queryOptionalNumeric<OptDenominator>("LegRatioQtyDenominator");
915
916 using OptNuminator = decltype(std::declval<const std::decay<decltype(leg)>::type>().legRatioQtyNumerator());
917 const auto numerator = queryOptionalNumeric<OptNuminator>("LegRatioQtyNumerator");
918
919 leg.legRatioQtyDenominator(denominator.raw());
920 leg.legRatioQtyNumerator(numerator.raw());
921
922 ++defaultSymbol;
923 }
924
925 TradingClient::send(bgwSession_, msg);
926}

◆ listInstruments()

void listInstruments ( )

Prints the list of instruments currently known to the client.

Definition at line 538 of file TradingClient.cpp.

539{
540 std::vector<Messaging::SbeMessage> messages;
541
542 for (auto element : instruments_)
543 messages.push_back(Messaging::SbeMessage{element->data(), static_cast<Messaging::SbeMessage::EncodedLength>(element->size())});
544
545 std::reverse(messages.begin(), messages.end());
546
547 ListViewer::outputItems(messages, [](auto msg)
548 {
549 std::string res;
550
551 if(!ONIXS_ICEBOE_MESSAGING_NAMESPACE::processTypified(msg, [&](const auto msg) { toStr(res, msg); }))
552 res = "[]";
553
554 return res;
555 }, 10);
556}
std::string toStr(Order::PriceOptional value)
Definition Order.cpp:34

◆ lookupInstruments()

void lookupInstruments ( )

Prints the list of instruments currently known to the client by the provided Symbol value.

Definition at line 558 of file TradingClient.cpp.

559{
560 const auto symbol = queryNumeric("Symbol", Default::Symbol);
561
562 std::vector<Messaging::SecurityDefinitionReport> messages;
563
564 for (auto element : instruments_)
565 {
566 const Messaging::SecurityDefinitionReport msg{element->data(), static_cast<Messaging::SbeMessage::EncodedLength>(element->size())};
567
568 if(msg.symbol() == symbol)
569 messages.push_back(msg);
570 }
571
572 ListViewer::outputItems(messages, [](auto msg){return toStr(msg);}, 10);
573}

◆ replaceOrder()

void replaceOrder ( )

Issues a replace for an existing live order.

Definition at line 1092 of file TradingClient.cpp.

1093{
1094 checkConnected(bgwSession_, "BGW");
1095
1096 const auto ordersInBook = orderBook_.getEntries(activeOrder);
1097
1098 if (ordersInBook.empty())
1099 {
1100 Screen::warning("No active orders found");
1101 return;
1102 }
1103
1104 ListViewer::outputItems(ordersInBook, print);
1105
1106 Screen::out("Enter the index of the order to be replaced");
1107
1108 const auto orderIndex = Screen::getInput<size_t>();
1109 const auto order = ordersInBook.at(orderIndex - 1);
1110
1111 auto replaceOrder = orderBook_.store(newOrder(order.get()));
1112 replaceOrder.origCIOrdId_ = order->cIOrdId_;
1113
1114 Screen::info(replaceOrder.toString());
1115
1116 replaceRequest_->price(replaceOrder.price_.raw())
1117 .orderQty(replaceOrder.orderQty_)
1118 .symbol(replaceOrder.securityId_)
1119 .clOrdId(replaceOrder.cIOrdId_)
1120 .stopPx(replaceOrder.stopPx_.raw())
1121 .ordType(replaceOrder.ordType_)
1122 .timeInForce(replaceOrder.timeInForce_)
1123 .side(replaceOrder.side_)
1124 .origClOrdId(replaceOrder.origCIOrdId_)
1125 .maxShow(replaceOrder.maxShow_.raw());
1126
1127 if (replaceOrder.timeInForce_ == TimeInForceEnum::GTD && replaceOrder.expireDate_)
1128 replaceRequest_->expireDate(*replaceOrder.expireDate_);
1129 else
1130 replaceRequest_->expireDate(nullOpt);
1131
1132 TradingClient::send(bgwSession_, replaceRequest_);
1133}

◆ requestBgwCredentials()

void requestBgwCredentials ( )

Requests BGW credentials (IpRequest) over the active BUS session.

Definition at line 503 of file TradingClient.cpp.

504{
505 checkConnected(busSession_, "BUS");
506
507 const auto userId = settings_.get("UserId");
508
509 MessageHolder<IPRequest, getMaxMessageSize<IPRequest>(1)> request;
510 request->clientId(sessionSettings_.clientId());
511 request->users(1)[0].userId(userId);
512
513 bgwCredentials_ = {};
514 TradingClient::send(busSession_, request);
515}

◆ requestInstruments()

void requestInstruments ( )

Submits a SecurityDefinitionRequest to fetch/refresh known instruments.

Definition at line 517 of file TradingClient.cpp.

518{
519 checkConnected(busSession_, "BUS");
520
521 const auto marketTypeId = queryNumeric("MarketTypeId", Default::MarketTypeId);
522 const auto requestType = querySecurityRequestType(
523 {SecurityRequestTypeEnum::RequestListofOptions,
524 SecurityRequestTypeEnum::RequestListofStrategies,
525 SecurityRequestTypeEnum::RequestListofFutures,
526 SecurityRequestTypeEnum::RequestListOfProducts
527 });
528
529 MessageHolder<SecurityDefinitionRequest> request;
530 request->marketTypeId(marketTypeId);
531 request->securityReqId(static_cast<Int32>(IdGenerator::newId() & 0xFFFFFFFFull));
532 request->securityRequestType(requestType);
533
534 instruments_.clear();
535 send(busSession_, request);
536}

◆ sendMassCancel()

void sendMassCancel ( )

Submits a mass cancel request.

Definition at line 736 of file TradingClient.cpp.

737{
738 checkConnected(bgwSession_, "BGW");
739
740 orderMassCancelRequest_->clOrdId(IdGenerator::newId());
741
742 const auto requestType = queryEnum(
743 "RequestType", {MassCancelRequestTypeEnum::CancelAllForTrader, MassCancelRequestTypeEnum::CancelForTradingSession}, MassCancelRequestTypeEnum::CancelAllForTrader);
744
745 const auto ordType = queryOrderTypeOptional<decltype(std::declval<const OrderMassCancelRequest&>().ordType())>(
746 {OrderTypeEnum::Limit});
747
748 const auto side = querySideOptional<decltype(std::declval<const OrderMassCancelRequest&>().side())>(
749 {SideEnum::Buy, SideEnum::Sell});
750
751 const auto symbol = queryOptionalNumeric<decltype(std::declval<const OrderMassCancelRequest&>().symbol())>("Symbol");
752
753 const auto marketTypeId = queryOptionalNumeric<decltype(std::declval<const OrderMassCancelRequest&>().marketTypeId())>("MarketTypeId");
754
755 const auto price = queryOptionalDecimal<decltype(std::declval<const OrderMassCancelRequest&>().price())>("Price");
756
757 const auto timeInForce = queryTimeInForceOptional<decltype(std::declval<const OrderMassCancelRequest&>().timeInForce())>({TimeInForceEnum::Day});
758
759 const auto onBehalfOfSubId = queryString("OnBehalfOfSubId", "");
760
761 orderMassCancelRequest_->massCancelRequestType(requestType);
762 orderMassCancelRequest_->ordType(ordType.raw());
763 orderMassCancelRequest_->side(side.raw());
764 orderMassCancelRequest_->symbol(symbol.raw());
765 orderMassCancelRequest_->marketTypeId(marketTypeId.raw());
766 orderMassCancelRequest_->price(price.raw());
767 orderMassCancelRequest_->timeInForce(timeInForce.raw());
768 orderMassCancelRequest_->onBehalfOfSubId(toStrRef(onBehalfOfSubId));
769
770 TradingClient::send(bgwSession_, orderMassCancelRequest_);
771}
StrRef toStrRef(const std::string &str)
Constructs a StrRef instance over th std::string content.
Definition StrRef.h:392

◆ sendMassQuote()

void sendMassQuote ( )

Sends a multiple quote request.

Definition at line 802 of file TradingClient.cpp.

803{
804 checkConnected(bgwSession_, "BGW");
805
806 massQuoteRequest_->quoteId(QuoteIdGenerator::id());
807
808 const auto riskProtectionReset =
809 queryBooleanOptional<decltype(std::declval<const MassQuoteRequest&>().riskProtectionReset())>(
810 "RiskProtectionReset", {BooleanEnum::False, BooleanEnum::True});
811
812 massQuoteRequest_->riskProtectionReset(riskProtectionReset.raw());
813
814 const auto quotes = massQuoteRequest_->quoteSets();
815
816 for(auto&& quote : quotes)
817 {
818 const auto underlyingSymbol = queryNumeric("Underlying Symbol", Default::UnderlyingSymbol);
819
820 quote
821 .quoteEntryId(static_cast<Int32>(IdGenerator::newId()))
822 .underlyingSymbol(underlyingSymbol)
823 .quoteSetId(getQuoteSetId(underlyingSymbol))
824 .symbol(queryNumeric("Symbol", Default::Symbol))
825 .bidPx(queryDecimal("Bid Price", Default::PriceMantissa))
826 .bidSz(queryDecimal("Bid Size", Default::QuantityMantissa))
827 .offerPx(queryDecimal("Offer Price", Default::PriceMantissa))
828 .offerSz(queryDecimal("Offer Size", Default::QuantityMantissa))
829 ;
830 }
831
832 TradingClient::send(bgwSession_, massQuoteRequest_);
833}

◆ sendOrder()

void sendOrder ( )

Sends a new order via BGW.

Definition at line 615 of file TradingClient.cpp.

616{
617 checkConnected(bgwSession_, "BGW");
618
619 const auto order = orderBook_.store(newOrder());
620 Screen::info(order.toString());
621
622 newOrderRequest_->price(order.price_.raw())
623 .orderQty(order.orderQty_)
624 .symbol(order.securityId_)
625 .clOrdId(order.cIOrdId_)
626 .stopPx(order.stopPx_.raw())
627 .ordType(order.ordType_)
628 .timeInForce(order.timeInForce_)
629 .side(order.side_)
630 .maxShow(order.maxShow_.raw())
631 .execInst(order.execInst_.raw())
632 ;
633
634 if (order.timeInForce_ == TimeInForceEnum::GTD && order.expireDate_)
635 newOrderRequest_->expireDate(*order.expireDate_);
636 else
637 newOrderRequest_->expireDate(nullOpt);
638
639 const auto custOrderHandlingInst =
640 queryCustOrderHandlingInst({
641 CustOrderHandlingInstEnum::C
642 ,CustOrderHandlingInstEnum::D
643 ,CustOrderHandlingInstEnum::G
644 ,CustOrderHandlingInstEnum::H
645 ,CustOrderHandlingInstEnum::W
646 ,CustOrderHandlingInstEnum::Y
647 });
648
649 newOrderRequest_->custOrderHandlingInst(custOrderHandlingInst);
650
651 const auto selfMatchPreventionInstruction =
652 queryOptionalEnum<decltype(std::declval<const NewOrderRequest&>().selfMatchPreventionInstruction())>(
653 "SelfMatchPreventionInstruction",
654 {
655 SelfMatchPreventionInstructionEnum::CancelRestingOrder
656 ,SelfMatchPreventionInstructionEnum::CancelTakingOrder
657 ,SelfMatchPreventionInstructionEnum::CancelBothOrders
658 });
659
660 newOrderRequest_->selfMatchPreventionInstruction(selfMatchPreventionInstruction.raw());
661
662 TradingClient::send(bgwSession_, newOrderRequest_);
663}

◆ sendOrderCross()

void sendOrderCross ( )

Sends a cross order.

Definition at line 665 of file TradingClient.cpp.

666{
667 checkConnected(bgwSession_, "BGW");
668
669 const auto transactDetails = queryString("TransactDetails", "***");
670
671 const auto priceType =
672 queryPriceTypeOptional<decltype(std::declval<const NewOrderCrossRequest&>().priceType())>({
673 PriceTypeEnum::PerContract,
674 PriceTypeEnum::FixedCabinetTradePrice,
675 PriceTypeEnum::FixedRate,
676 PriceTypeEnum::NPV,
677 PriceTypeEnum::RateDifferential,
678 PriceTypeEnum::NPVDifferential});
679
680 const auto benchmarkPriceType =
681 queryBenchmarkPriceTypeOptional<decltype(std::declval<const NewOrderCrossRequest&>().benchMarkPriceType())>({
682 BenchmarkPriceTypeEnum::FixedAmount});
683
684 const auto bmPrice =
685 queryOptionalDecimal<decltype(std::declval<const NewOrderCrossRequest&>().benchmarkPrice())>("BenchmarkPrice");
686
687 const auto crossType = queryEnum("CrossType", {CrossTypeEnum::AON, CrossTypeEnum::IOC}, CrossTypeEnum::AON);
688
689 const auto custOrderHandlingInst =
690 queryCustOrderHandlingInst({
691 CustOrderHandlingInstEnum::C
692 ,CustOrderHandlingInstEnum::D
693 ,CustOrderHandlingInstEnum::G
694 ,CustOrderHandlingInstEnum::H
695 ,CustOrderHandlingInstEnum::W
696 ,CustOrderHandlingInstEnum::Y
697 });
698
699 newOrderCrossRequest_->priceType(priceType.raw());
700 newOrderCrossRequest_->benchMarkPriceType(benchmarkPriceType.raw());
701 newOrderCrossRequest_->benchmarkPrice(bmPrice.raw());
702 newOrderCrossRequest_->transactDetails(toStrRef(transactDetails));
703 newOrderCrossRequest_->crossType(crossType);
704
705 auto crossOrder = orderBook_.store(newOrderCross());
706
707 Screen::info(crossOrder.toString());
708
709 const auto& buySideOrder = *crossOrder.buySideOrder_;
710 const auto& sellSideOrder = *crossOrder.sellSideOrder_;
711
712 auto sides = newOrderCrossRequest_->sides();
713 assert(sides.size() == 2);
714
715 newOrderCrossRequest_->crossId(crossOrder.id());
716
717 newOrderCrossRequest_->price(buySideOrder.price_.raw())
718 .orderQty(buySideOrder.orderQty_)
719 .symbol(buySideOrder.securityId_)
720 .ordType(buySideOrder.ordType_)
721 .timeInForce(buySideOrder.timeInForce_);
722
723 sides[0].side(buySideOrder.side_);
724 sides[0].clOrdId(buySideOrder.cIOrdId_);
725 sides[0].custOrderHandlingInst(custOrderHandlingInst);
726
727 sides[1].side(sellSideOrder.side_);
728 sides[1].clOrdId(sellSideOrder.cIOrdId_);
729 sides[1].custOrderHandlingInst(custOrderHandlingInst);
730
731 newOrderCrossRequest_->transactTime(UtcWatch::now());
732
733 TradingClient::send(bgwSession_, newOrderCrossRequest_);
734}

◆ sendQuote()

void sendQuote ( )

Sends a quote message.

Definition at line 773 of file TradingClient.cpp.

774{
775 checkConnected(bgwSession_, "BGW");
776
777 const auto qti = queryDecimal("Quantity", Default::QuantityMantissa);
778 const auto side = querySide({SideEnum::Buy, SideEnum::Sell});
779 const auto symbol = queryNumeric("Symbol", Default::Symbol);
780
781 quoteRequest_
782 ->rfqReqId(IdGenerator::newId())
783 .orderQty(qti)
784 .side(side)
785 .symbol(symbol);
786
787 TradingClient::send(bgwSession_, quoteRequest_);
788}

◆ sendQuoteCancelRequest()

void sendQuoteCancelRequest ( )

Cancels a previously submitted quote.

Definition at line 835 of file TradingClient.cpp.

836{
837 checkConnected(bgwSession_, "BGW");
838
839 quoteCancelRequest_->quoteId(QuoteIdGenerator::id());
840 assert(quoteCancelRequest_->quoteEntries().size() == 1);
841
842 const auto quoteCancelType = queryEnum("QuoteCancelType",
843 { QuoteCancelTypeEnum::CancelAll, QuoteCancelTypeEnum::CancelByProductID, QuoteCancelTypeEnum::CancelByUnderlyingMarket},
844 QuoteCancelTypeEnum::CancelByUnderlyingMarket);
845
846 quoteCancelRequest_->quoteCancelType(quoteCancelType);
847
848 auto entry = quoteCancelRequest_->quoteEntries()[0];
849
850 using OptSymbol = decltype(std::declval<const QuoteCancelRequest::QuoteEntry&>().underlyingSymbol());
851 const auto underlyingSymbol = queryOptionalNumeric<OptSymbol>("UnderlyingSymbol");
852
853 using OptSecId = decltype(std::declval<const QuoteCancelRequest::QuoteEntry&>().underlyingSecurityId());
854 const auto secId = queryOptionalNumeric<OptSecId>("SecurityId");
855
856 using OptProduct = decltype(std::declval<const QuoteCancelRequest::QuoteEntry&>().underlyingProduct());
857 const auto product = queryOptionalNumeric<OptProduct>("Product");
858
859 entry.underlyingSymbol(underlyingSymbol.raw());
860 entry.underlyingSecurityId(secId.raw());
861 entry.underlyingProduct(product.raw());
862
863 TradingClient::send(bgwSession_, quoteCancelRequest_);
864}

◆ showActiveOrders()

void showActiveOrders ( )

Displays active orders sent by this client session and their last-known statuses.

Definition at line 1058 of file TradingClient.cpp.

1059{
1060 ListViewer::outputItems(orderBook_.getEntries(activeOrder), print, 10);
1061}

◆ showOrders()

void showOrders ( )

Displays orders sent by this client session and their last-known statuses.

Definition at line 1048 of file TradingClient.cpp.

1049{
1050 ListViewer::outputItems(orderBook_.getEntries(), print, 10);
1051}

◆ traderLogon()

void traderLogon ( )

Logs a trader into the connected BGW session.

Definition at line 588 of file TradingClient.cpp.

589{
590 checkConnected(bgwSession_, "BGW");
591
592 MessageHolder<TraderLogonRequest> request;
593 request->originatorUserId(settings_.get("TraderId"));
594 request->rawData(settings_.get("TraderPwd"));
595 request->directElectronicAccess(BooleanEnum::True);
596 request->tradingCapacity(TradingCapacityEnum::DEAL);
597 request->liquidityProvision(BooleanEnum::True);
598 request->commodityDerivIndicator(BooleanEnum::False);
599 request->investmentDecision(settings_.get<Int64>("InvestmentDecision"));
600 request->executionDecision(settings_.get<Int64>("ExecutionDecision"));
601
602 TradingClient::send(bgwSession_, request);
603}

◆ traderLogout()

void traderLogout ( )

Logs the trader out from the BGW session.

Definition at line 605 of file TradingClient.cpp.

606{
607 checkConnected(bgwSession_, "BGW");
608
609 MessageHolder<TraderLogoutRequest> request;
610 request->originatorUserId(settings_.get("TraderId"));
611
612 TradingClient::send(bgwSession_, request);
613}