Skip to content

Commit 67772d0

Browse files
committed
modify contractutil
1 parent 8e42f04 commit 67772d0

File tree

5 files changed

+75
-56
lines changed

5 files changed

+75
-56
lines changed

demo/openapi_cpp_test/openapi_cpp_test.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
#include "tigerapi/contract_util.h"
66
#include "tigerapi/order_util.h"
77
#include <cpprest/details/basic_types.h>
8-
//#include "common/easylogging++.h"
98

109
using namespace std;
1110
using namespace web;
@@ -58,7 +57,7 @@ class TestTradeClient {
5857
}
5958

6059
static void test_place_order(const std::shared_ptr<TradeClient>& trade_client) {
61-
Contract contract = stock_contract(U("AAPL"), U("USD"));
60+
Contract contract = ContractUtil::stock_contract(U("AAPL"), U("USD"));
6261
Order order = limit_order(contract, U("BUY"), 1, 100.0);
6362
value res = trade_client->place_order(order);
6463
long id = res[U("id")].as_integer();
@@ -80,7 +79,7 @@ class TestTradeClient {
8079
}
8180

8281
static void test_modify_order(const std::shared_ptr<TradeClient>& trade_client) {
83-
Contract contract = stock_contract(U("AAPL"), U("USD"));
82+
Contract contract = ContractUtil::stock_contract(U("AAPL"), U("USD"));
8483
Order order = limit_order(contract, U("BUY"), 1, 100.0);
8584
long id = (long)trade_client->place_order(order)[U("id")].as_number().to_uint64();
8685
value res = trade_client->modify_order(order, 105);

include/tigerapi/contract_util.h

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,37 @@
1010
#include "model.h"
1111
#include "win32.h"
1212

13-
OPENAPI_EXPORT Contract stock_contract(const utility::string_t symbol, const utility::string_t currency, const utility::string_t local_symbol = U(""),
14-
const utility::string_t exchange = U(""), long contract_id = -1);
15-
16-
OPENAPI_EXPORT Contract option_contract(const utility::string_t symbol, const utility::string_t expiry, const utility::string_t strike, const utility::string_t right,
17-
const utility::string_t currency, long multiplier = 100, const utility::string_t local_symbol = U(""),
18-
long contract_id = 0);
19-
OPENAPI_EXPORT Contract option_contract(const utility::string_t identifier, long multiplier = 100, const utility::string_t currency = U("USD"));
20-
21-
OPENAPI_EXPORT Contract future_contract(const utility::string_t symbol, const utility::string_t currency, const utility::string_t expiry = U(""),
22-
const utility::string_t exchange = U(""), const utility::string_t contract_month = U(""), long multiplier = 0,
23-
const utility::string_t local_symbol = U(""));
13+
namespace TIGER_API {
14+
15+
class OPENAPI_EXPORT ContractUtil {
16+
public:
17+
static Contract stock_contract(const utility::string_t symbol, const utility::string_t currency,
18+
const utility::string_t local_symbol = U(""),
19+
const utility::string_t exchange = U(""), long contract_id = -1);
20+
21+
static Contract
22+
option_contract(const utility::string_t symbol, const utility::string_t expiry, const utility::string_t strike,
23+
const utility::string_t right,
24+
const utility::string_t currency, long multiplier = 100,
25+
const utility::string_t local_symbol = U(""),
26+
long contract_id = 0);
27+
28+
static Contract option_contract(const utility::string_t identifier, long multiplier = 100,
29+
const utility::string_t currency = U("USD"));
30+
31+
static Contract future_contract(const utility::string_t symbol, const utility::string_t currency,
32+
const utility::string_t expiry = U(""),
33+
const utility::string_t exchange = U(""),
34+
const utility::string_t contract_month = U(""), long multiplier = 0,
35+
const utility::string_t local_symbol = U(""));
2436

2537
/**
2638
* 期权要素信息提取
2739
* @param identifier 期权标识符,如 U("AAPL 220414C0017500"), U("JD 211015P00045000")
2840
* @return 正股代码,到期日,行权方向,行权价格 组成的tuple, (underlying_symbol, expiry, right, strike)
2941
*/
30-
OPENAPI_EXPORT std::tuple<utility::string_t, utility::string_t, utility::string_t, utility::string_t> extract_option_info(const utility::string_t identifier);
31-
32-
42+
static std::tuple<utility::string_t, utility::string_t, utility::string_t, utility::string_t>
43+
extract_option_info(const utility::string_t identifier);
44+
};
45+
}
3346
#endif //TIGERAPI_CONTRACT_UTIL_H

src/contract_util.cpp

Lines changed: 44 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -7,53 +7,60 @@
77
#include <regex>
88
#include <string>
99

10+
namespace TIGER_API {
11+
Contract ContractUtil::stock_contract(const utility::string_t symbol, const utility::string_t currency,
12+
const utility::string_t local_symbol, const utility::string_t exchange,
13+
long contract_id) {
14+
return Contract(U("STK"), symbol, currency, local_symbol, exchange, contract_id);
15+
}
1016

11-
Contract stock_contract(const utility::string_t symbol, const utility::string_t currency, const utility::string_t local_symbol, const utility::string_t exchange,
12-
long contract_id) {
13-
return Contract(U("STK"), symbol, currency, local_symbol, exchange, contract_id);
14-
}
15-
16-
Contract option_contract(const utility::string_t symbol, const utility::string_t expiry, const utility::string_t strike, const utility::string_t right,
17-
const utility::string_t currency, long multiplier, const utility::string_t local_symbol, long contract_id) {
18-
return Contract( U("OPT"), symbol,expiry, strike, right, currency, multiplier, local_symbol, contract_id);
19-
}
17+
Contract
18+
ContractUtil::option_contract(const utility::string_t symbol, const utility::string_t expiry, const utility::string_t strike,
19+
const utility::string_t right,
20+
const utility::string_t currency, long multiplier, const utility::string_t local_symbol,
21+
long contract_id) {
22+
return Contract(U("OPT"), symbol, expiry, strike, right, currency, multiplier, local_symbol, contract_id);
23+
}
2024

21-
Contract option_contract(const utility::string_t identifier, long multiplier, const utility::string_t currency) {
22-
utility::string_t symbol, expiry, right, strike;
23-
std::tie(symbol, expiry, right, strike) = extract_option_info(identifier);
24-
if (!expiry.empty() && expiry.find('-') != utility::string_t ::npos) {
25-
expiry.erase(std::remove(expiry.begin(), expiry.end(), '-'), expiry.end());
25+
Contract ContractUtil::option_contract(const utility::string_t identifier, long multiplier, const utility::string_t currency) {
26+
utility::string_t symbol, expiry, right, strike;
27+
std::tie(symbol, expiry, right, strike) = ContractUtil::extract_option_info(identifier);
28+
if (!expiry.empty() && expiry.find('-') != utility::string_t::npos) {
29+
expiry.erase(std::remove(expiry.begin(), expiry.end(), '-'), expiry.end());
30+
}
31+
return Contract(U("OPT"), symbol, expiry, strike, right, currency, multiplier, U(""), 0);
2632
}
27-
return Contract(U("OPT"), symbol, expiry, strike, right, currency, multiplier, U(""), 0);
28-
}
2933

30-
Contract future_contract(const utility::string_t symbol, const utility::string_t currency, const utility::string_t expiry,
31-
const utility::string_t exchange, const utility::string_t contract_month, long multiplier,
32-
const utility::string_t local_symbol) {
33-
return Contract(U("FUT"), symbol, expiry, multiplier, contract_month, currency, exchange, local_symbol);
34-
}
34+
Contract
35+
ContractUtil::future_contract(const utility::string_t symbol, const utility::string_t currency, const utility::string_t expiry,
36+
const utility::string_t exchange, const utility::string_t contract_month, long multiplier,
37+
const utility::string_t local_symbol) {
38+
return Contract(U("FUT"), symbol, expiry, multiplier, contract_month, currency, exchange, local_symbol);
39+
}
3540

3641

37-
std::tuple<utility::string_t , utility::string_t , utility::string_t , utility::string_t> extract_option_info(const utility::string_t identifier) {
38-
auto trans_identifier = str16to8(identifier);
42+
std::tuple<utility::string_t, utility::string_t, utility::string_t, utility::string_t>
43+
ContractUtil::extract_option_info(const utility::string_t identifier) {
44+
auto trans_identifier = str16to8(identifier);
3945

40-
if (!trans_identifier.empty()) {
41-
std::regex pattern(R"((\w+(?:\.\w+)?)\s*(\d{6})([CP])(\d+))");
42-
std::smatch matches;
43-
if (std::regex_search(trans_identifier, matches, pattern) && matches.size() == 5) {
44-
std::string underlying_symbol = matches[1].str();
45-
std::string expiry = "20" + matches[2].str();
46-
std::string right = matches[3];
47-
utility::string_t strike = double_to_string(std::stod(matches[4]) / 1000);
48-
if (expiry.size() == 8) {
49-
expiry = expiry.substr(0, 4) + "-" + expiry.substr(4, 2) + "-" + expiry.substr(6);
46+
if (!trans_identifier.empty()) {
47+
std::regex pattern(R"((\w+(?:\.\w+)?)\s*(\d{6})([CP])(\d+))");
48+
std::smatch matches;
49+
if (std::regex_search(trans_identifier, matches, pattern) && matches.size() == 5) {
50+
std::string underlying_symbol = matches[1].str();
51+
std::string expiry = "20" + matches[2].str();
52+
std::string right = matches[3];
53+
utility::string_t strike = double_to_string(std::stod(matches[4]) / 1000);
54+
if (expiry.size() == 8) {
55+
expiry = expiry.substr(0, 4) + "-" + expiry.substr(4, 2) + "-" + expiry.substr(6);
56+
}
57+
right = (right == "C") ? "CALL" : "PUT";
58+
return std::make_tuple(str8to16(underlying_symbol), str8to16(expiry), str8to16(right),
59+
strike);
5060
}
51-
right = (right == "C") ? "CALL" : "PUT";
52-
return std::make_tuple(str8to16(underlying_symbol), str8to16(expiry), str8to16(right),
53-
strike);
5461
}
62+
return std::make_tuple(U(""), U(""), U(""), U(""));
5563
}
56-
return std::make_tuple(U(""), U(""), U(""), U(""));
5764
}
5865

5966

src/quote_client.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ namespace TIGER_API {
221221
for (size_t i = 0; i < identifiers.size(); ++i) {
222222
auto identifier = identifiers[i];
223223
utility::string_t symbol, expiry, right, strike;
224-
std::tie(symbol, expiry, right, strike) = extract_option_info(identifier.as_string());
224+
std::tie(symbol, expiry, right, strike) = ContractUtil::extract_option_info(identifier.as_string());
225225
if (symbol.empty() || expiry.empty() || right.empty()) {
226226
continue;
227227
}

src/tiger_client.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ namespace TIGER_API {
138138
for (size_t i = 0; i < identifiers.size(); ++i) {
139139
auto identifier = identifiers[i];
140140
utility::string_t symbol, expiry, right, strike;
141-
std::tie(symbol, expiry, right, strike) = extract_option_info(identifier.as_string());
141+
std::tie(symbol, expiry, right, strike) = ContractUtil::extract_option_info(identifier.as_string());
142142
if (symbol.empty() || expiry.empty() || right.empty()) {
143143
continue;
144144
}

0 commit comments

Comments
 (0)