OnStartRequest()
There are several ways to design a mechanism to launch algos within your process. One such approach is to first create a pure virtual base class that defines the semantics for managing the algo. For example:
#pragma once
#include <sdkalgo.h>
class BaseStrategy
{
public:
BaseStrategy() {};
virtual ~BaseStrategy() {};
// handle the requests from the TT SDK
virtual bool Start(ttsdk::SDKAlgoPtr algoOrder, ttsdk::SDKAlgoRequestPtr req) = 0;
virtual void Update(ttsdk::SDKAlgoRequestPtr req) = 0;
virtual void Stop(ttsdk::SDKAlgoRequestPtr req) = 0;
virtual void Pause(ttsdk::SDKAlgoRequestPtr req) = 0;
virtual void Resume(ttsdk::SDKAlgoRequestPtr req) = 0;
};
Each algo would then be defined by a class which derives from and provides implementation for:
- BaseStrategy
- virtual bool Start(ttsdk::SDKAlgoPtr algoOrder, ttsdk::SDKAlgoRequestPtr req) = 0;
- virtual void Update(ttsdk::SDKAlgoRequestPtr req) = 0;
- virtual void Stop(ttsdk::SDKAlgoRequestPtr req) = 0;
- virtual void Pause(ttsdk::SDKAlgoRequestPtr req) = 0;
- virtual void Resume(ttsdk::SDKAlgoRequestPtr req) = 0;
- ttsdk::IPriceEventHandler
- virtual void OnUnsubscribed(const uint64_t subId);
- virtual void OnDisconnect(const uint64_t subId, const ttsdk::InstrumentPtr&, const ttsdk::PriceEventType);
- virtual void OnPriceUpdate(const uint64_t, const ttsdk::InstrumentPtr&, const ttsdk::PriceSnap& snap);
- virtual void OnError(const uint64_t subId, const ttsdk::InstrumentPtr& instrument, const ttsdk::SubscriptionError code, const char* error);
- ttsdk::IOrderEventHandler
- virtual void OnUnsubscribed(const char*);
- virtual void OnExecutionReport(ttsdk::OrderPtr order, ttsdk::ExecutionReportPtr execRpt);
- virtual void OnReject(ttsdk::OrderPtr order, ttsdk::RejectResponsePtr rejResp);
- virtual void OnSendFailed(ttsdk::OrderPtr order, const ttsdk::OrderProfile& profile, const ttsdk::IOrderEventHandler::SendCode code);
For Example:
class TrailingCrossStrategy : public BaseStrategy,
public ttsdk::IOrderEventHandler,
public ttsdk::IPriceEventHandler
{
public:
TrailingCrossStrategy(SDKAlgoManager& mgr)
{ // … }
virtual ~TrailingCrossStrategy()
{ // … }
// from BaseStrategy
virtual bool Start(ttsdk::SDKAlgoPtr algoOrder, ttsdk::SDKAlgoRequestPtr req)
{ // … }
virtual void Update(ttsdk::SDKAlgoRequestPtr req)
{ // … }
virtual void Stop(ttsdk::SDKAlgoRequestPtr req)
{ // … }
virtual void Pause(ttsdk::SDKAlgoRequestPtr req)
{ // … }
virtual void Resume(ttsdk::SDKAlgoRequestPtr req)
{ // … }
// from ttsdk::IPriceEventHandler
virtual void OnUnsubscribed(const uint64_t subId)
{ // … }
virtual void OnDisconnect(const uint64_t subId, const ttsdk::InstrumentPtr&, const ttsdk::PriceEventType)
{ // … }
virtual void OnPriceUpdate(const uint64_t, const ttsdk::InstrumentPtr&, const ttsdk::PriceSnap& snap)
{ // … }
virtual void OnError(const uint64_t subId, const ttsdk::InstrumentPtr& instrument, const ttsdk::SubscriptionError code, const char* error)
{ // … }
// from ttsdk::IOrderEventHandler
virtual void OnUnsubscribed(const char*)
{ // … }
virtual void OnExecutionReport(ttsdk::OrderPtr order, ttsdk::ExecutionReportPtr execRpt)
{ // … }
virtual void OnReject(ttsdk::OrderPtr order, ttsdk::RejectResponsePtr rejResp)
{ // … }
virtual void OnSendFailed(ttsdk::OrderPtr order, const ttsdk::OrderProfile& profile, const ttsdk::IOrderEventHandler::SendCode code)
{ // … }
};