{"id":7029,"date":"2025-08-28T22:11:59","date_gmt":"2025-08-29T03:11:59","guid":{"rendered":"https:\/\/librarytestdev.wpenginepowered.com\/?post_type=doc&#038;p=7029"},"modified":"2025-09-04T17:17:28","modified_gmt":"2025-09-04T22:17:28","slug":"processing-external-algo-requests","status":"publish","type":"doc","link":"https:\/\/library-staging.tradingtechnologies.com\/apis\/tt-core-sdk\/creating-a-tt-application-server\/processing-external-algo-requests\/","title":{"rendered":"Processing External Algo Requests"},"content":{"rendered":"\n<h2>OnStartRequest()<\/h2>\n\n                <p>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:\n                <\/p>\n\n\n                <div class=\"language-plaintext highlighter-rouge\">\n                  <div class=\"highlight\">\n                    <pre class=\"highlight\"><code>\n#pragma once\n#include &lt;sdkalgo.h&gt;\nclass BaseStrategy\n{\n  public:\n    BaseStrategy() {};\n    virtual ~BaseStrategy() {};\n\n    \/\/ handle the requests from the TT SDK\n    virtual bool Start(ttsdk::SDKAlgoPtr algoOrder, ttsdk::SDKAlgoRequestPtr req) = 0;\n    virtual void Update(ttsdk::SDKAlgoRequestPtr req) = 0;\n    virtual void Stop(ttsdk::SDKAlgoRequestPtr req) = 0;\n    virtual void Pause(ttsdk::SDKAlgoRequestPtr req) = 0;\n    virtual void Resume(ttsdk::SDKAlgoRequestPtr req) = 0;\n};\n\n<\/code><\/pre>\n                  <\/div><\/div>\n\n<p>Each algo would then be defined by a class which derives from and provides implementation for:\n<\/p>\n    <ul>\n        <li>BaseStrategy\n            <ul>\n                <li>virtual bool Start(ttsdk::SDKAlgoPtr algoOrder, ttsdk::SDKAlgoRequestPtr req) = 0;<\/li>\n                <li>virtual void Update(ttsdk::SDKAlgoRequestPtr req) = 0;<\/li>\n                <li>virtual void Stop(ttsdk::SDKAlgoRequestPtr req) = 0;\n                <\/li>\n                <li>virtual void Pause(ttsdk::SDKAlgoRequestPtr req) = 0;<\/li>\n                <li>virtual void Resume(ttsdk::SDKAlgoRequestPtr req) = 0;<\/li>\n            <\/ul>\n        <\/li>\n        <li>ttsdk::IPriceEventHandler\n            <ul>\n                <li>virtual void OnUnsubscribed(const uint64_t subId);<\/li>\n                <li>virtual void OnDisconnect(const uint64_t subId, const ttsdk::InstrumentPtr&amp;, const ttsdk::PriceEventType);<\/li>\n                <li>virtual void OnPriceUpdate(const uint64_t, const ttsdk::InstrumentPtr&amp;, const ttsdk::PriceSnap&amp; snap);\n                <\/li>\n                <li>virtual void OnError(const uint64_t subId, const ttsdk::InstrumentPtr&amp; instrument, const ttsdk::SubscriptionError code, const char* error);<\/li>\n            <\/ul>\n        <\/li>\n        <li>ttsdk::IOrderEventHandler\n            <ul>\n                <li>virtual void OnUnsubscribed(const char*);<\/li>\n                <li>virtual void OnExecutionReport(ttsdk::OrderPtr order, ttsdk::ExecutionReportPtr execRpt);<\/li>\n                <li>virtual void OnReject(ttsdk::OrderPtr order, ttsdk::RejectResponsePtr rejResp);\n                <\/li>\n                <li>virtual void OnSendFailed(ttsdk::OrderPtr order, const ttsdk::OrderProfile&amp; profile, const ttsdk::IOrderEventHandler::SendCode code);\n                <\/li>\n            <\/ul>\n        <\/li>\n    <\/ul>\n    <p>For Example:<\/p>\n\n    <div class=\"language-plaintext highlighter-rouge\">\n        <div class=\"highlight\">\n          <pre class=\"highlight\"><code>\nclass TrailingCrossStrategy : public BaseStrategy, \n    public ttsdk::IOrderEventHandler,\n    public ttsdk::IPriceEventHandler\n    {\n    public:\n    TrailingCrossStrategy(SDKAlgoManager&amp; mgr)\n        {   \/\/  \u2026  }\n    virtual ~TrailingCrossStrategy()\n        {   \/\/  \u2026  }\n\n    \/\/  from BaseStrategy\n    virtual bool Start(ttsdk::SDKAlgoPtr algoOrder, ttsdk::SDKAlgoRequestPtr req)\n        {   \/\/  \u2026  }\n    virtual void Update(ttsdk::SDKAlgoRequestPtr req)\n        {   \/\/  \u2026  }\n    virtual void Stop(ttsdk::SDKAlgoRequestPtr req)\n        {   \/\/  \u2026  }\n    virtual void Pause(ttsdk::SDKAlgoRequestPtr req)\n        {   \/\/  \u2026  }\n    virtual void Resume(ttsdk::SDKAlgoRequestPtr req)\n        {   \/\/  \u2026  }\n\n    \/\/ from ttsdk::IPriceEventHandler\n    virtual void OnUnsubscribed(const uint64_t subId)\n        {   \/\/  \u2026  }\n    virtual void OnDisconnect(const uint64_t subId, const ttsdk::InstrumentPtr&amp;, const ttsdk::PriceEventType)\n        {   \/\/  \u2026  }\n    virtual void OnPriceUpdate(const uint64_t, const ttsdk::InstrumentPtr&amp;, const ttsdk::PriceSnap&amp; snap)\n        {   \/\/  \u2026  }\n    virtual void OnError(const uint64_t subId, const ttsdk::InstrumentPtr&amp; instrument, const ttsdk::SubscriptionError code, const char* error)\n        {   \/\/  \u2026  }\n\n    \/\/ from ttsdk::IOrderEventHandler\n    virtual void OnUnsubscribed(const char*)\n        {   \/\/  \u2026  }\n    virtual void OnExecutionReport(ttsdk::OrderPtr order, ttsdk::ExecutionReportPtr execRpt)\n        {   \/\/  \u2026  }\n    virtual void OnReject(ttsdk::OrderPtr order, ttsdk::RejectResponsePtr rejResp)\n        {   \/\/  \u2026  }\n    virtual void OnSendFailed(ttsdk::OrderPtr order, const ttsdk::OrderProfile&amp; profile, const ttsdk::IOrderEventHandler::SendCode code)\n        {   \/\/  \u2026  }\n    };\n\n<\/code><\/pre>\n\n\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>OnStartRequest() There are several ways to design a mechanism to launch algos within your process. One such ap [&hellip;]<\/p>\n","protected":false},"author":2,"template":"wp-custom-template-single-doc-tt-core-sdk","meta":{"_acf_changed":false,"footnotes":""},"docs-category":[449],"class_list":["post-7029","doc","type-doc","status-publish","hentry","docs-category-creating-a-tt-application-server"],"acf":[],"_links":{"self":[{"href":"https:\/\/library-staging.tradingtechnologies.com\/ja\/wp-json\/wp\/v2\/doc\/7029","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/library-staging.tradingtechnologies.com\/ja\/wp-json\/wp\/v2\/doc"}],"about":[{"href":"https:\/\/library-staging.tradingtechnologies.com\/ja\/wp-json\/wp\/v2\/types\/doc"}],"author":[{"embeddable":true,"href":"https:\/\/library-staging.tradingtechnologies.com\/ja\/wp-json\/wp\/v2\/users\/2"}],"version-history":[{"count":0,"href":"https:\/\/library-staging.tradingtechnologies.com\/ja\/wp-json\/wp\/v2\/doc\/7029\/revisions"}],"wp:attachment":[{"href":"https:\/\/library-staging.tradingtechnologies.com\/ja\/wp-json\/wp\/v2\/media?parent=7029"}],"wp:term":[{"taxonomy":"docs-category","embeddable":true,"href":"https:\/\/library-staging.tradingtechnologies.com\/ja\/wp-json\/wp\/v2\/docs-category?post=7029"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}