Compare commits
1
Commits
excel_algos
...
fix_span2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e0fdf74a73 |
No files matched your search
@@ -33,7 +33,7 @@ int Span::execute(const std::vector<std::string>&)
|
||||
auto& disp = utils::Dispatcher::current();
|
||||
MarginServiceCore core(disp);
|
||||
|
||||
auto acct = orderman::to<orderman::AccountName>("ACC A");
|
||||
auto acct = std::string("ACC A");
|
||||
Position p;
|
||||
p.security_desc = "ESU9";
|
||||
p.account = acct;
|
||||
|
||||
@@ -28,7 +28,7 @@ namespace bts
|
||||
namespace position
|
||||
{
|
||||
|
||||
using MarginMap = boost::container::flat_map<orderman::AccountName, MarginResult>;
|
||||
using MarginMap = boost::container::flat_map<std::string, MarginResult>;
|
||||
|
||||
struct MarginServiceCore::PImpl
|
||||
{
|
||||
@@ -314,10 +314,9 @@ struct MarginServiceCore::PImpl
|
||||
}
|
||||
};
|
||||
|
||||
bool compute_margin(const orderman::AccountName& acct, const std::string& portfolid_id,
|
||||
bool compute_margin(const std::string& account_name, const std::string& portfolid_id,
|
||||
const std::vector<Position>& pos, std::function<void(const MarginResult&)> cb)
|
||||
{
|
||||
auto account_name = orderman::to_trim_str(acct);
|
||||
pugi::xml_document doc;
|
||||
pugi::xml_node trades_node;
|
||||
create_margin_request(portfolid_id, doc, trades_node);
|
||||
@@ -384,7 +383,7 @@ MarginServiceCore::MarginServiceCore(utils::Dispatcher& disp) : me(new PImpl(dis
|
||||
MarginServiceCore::~MarginServiceCore() {}
|
||||
|
||||
|
||||
void MarginServiceCore::compute_margin(const orderman::AccountName& acct, const std::vector<Position>& pos,
|
||||
void MarginServiceCore::compute_margin(const std::string& acct, const std::vector<Position>& pos,
|
||||
std::function<void(const MarginResult&)> cb)
|
||||
{
|
||||
me->dispatcher.post([=] ()
|
||||
@@ -393,7 +392,7 @@ void MarginServiceCore::compute_margin(const orderman::AccountName& acct, const
|
||||
}, me->throttle);
|
||||
}
|
||||
|
||||
bool MarginServiceCore::query_margin_webapi(const orderman::AccountName& acct, const std::vector<Position>& pos,
|
||||
bool MarginServiceCore::query_margin_webapi(const std::string& acct, const std::vector<Position>& pos,
|
||||
std::function<void(const MarginResult&)> cb)
|
||||
{
|
||||
utils::Uuid guid;
|
||||
@@ -425,7 +424,7 @@ void MarginServiceCore::set_verbose_debugging(bool verb)
|
||||
me->verbose = verb;
|
||||
}
|
||||
|
||||
bool MarginServiceCore::get_last_valid_result(const orderman::AccountName& acct, MarginResult& result)
|
||||
bool MarginServiceCore::get_last_valid_result(const std::string& acct, MarginResult& result)
|
||||
{
|
||||
auto it = me->last_valid_results.find(acct);
|
||||
if(it != me->last_valid_results.end())
|
||||
@@ -436,7 +435,7 @@ bool MarginServiceCore::get_last_valid_result(const orderman::AccountName& acct,
|
||||
return false;
|
||||
}
|
||||
|
||||
bool MarginServiceCore::get_last_result(const orderman::AccountName& acct, MarginResult& result)
|
||||
bool MarginServiceCore::get_last_result(const std::string& acct, MarginResult& result)
|
||||
{
|
||||
auto it = me->last_results.find(acct);
|
||||
if(it != me->last_results.end())
|
||||
|
||||
@@ -22,18 +22,18 @@ public:
|
||||
|
||||
MarginServiceCore(utils::Dispatcher&);
|
||||
~MarginServiceCore();
|
||||
void compute_margin(const orderman::AccountName&, const std::vector<Position>&,
|
||||
void compute_margin(const std::string&, const std::vector<Position>&,
|
||||
std::function<void(const api::position::MarginResult&)>);
|
||||
void set_verbose_debugging(bool);
|
||||
bool get_last_valid_result(const orderman::AccountName&, api::position::MarginResult&);
|
||||
bool get_last_result(const orderman::AccountName&, api::position::MarginResult&);
|
||||
bool get_last_valid_result(const std::string&, api::position::MarginResult&);
|
||||
bool get_last_result(const std::string&, api::position::MarginResult&);
|
||||
|
||||
|
||||
private:
|
||||
friend class PositionTests;
|
||||
|
||||
//This is a blocking call to a WebAPI. Very Slow.
|
||||
bool query_margin_webapi(const orderman::AccountName&, const std::vector<Position>&,
|
||||
bool query_margin_webapi(const std::string&, const std::vector<Position>&,
|
||||
std::function<void(const api::position::MarginResult&)>);
|
||||
|
||||
private:
|
||||
|
||||
@@ -91,8 +91,7 @@ void MarginServiceServer::publish_all()
|
||||
if(_position->query_positions(acct, pos, pnl, &since) && pos.size())
|
||||
{
|
||||
LOG(Gen, Info, "MarginServiceServer: requesting margin for {} ", acct);
|
||||
auto aname = orderman::to<orderman::AccountName>(acct);
|
||||
_margin->compute_margin(aname, pos, [this, since, acct, pnl](const MarginResult& m)
|
||||
_margin->compute_margin(acct, pos, [this, since, acct, pnl](const MarginResult& m)
|
||||
{
|
||||
std::scoped_lock<std::recursive_mutex> l(_lock);
|
||||
publish_margin(m);
|
||||
@@ -117,11 +116,9 @@ void MarginServiceServer::get_margin(const api::position::MarginRequest& request
|
||||
}
|
||||
else
|
||||
{
|
||||
orderman::AccountName acct;
|
||||
orderman::str_to(request.account(), &acct);
|
||||
std::vector<Position> pos; AccountPNL pnl;
|
||||
_position->query_positions(request.account(), pos, pnl);
|
||||
_margin->compute_margin(acct, pos, [=](const MarginResult& m)
|
||||
_margin->compute_margin(request.account(), pos, [=](const MarginResult& m)
|
||||
{
|
||||
reply(m);
|
||||
});
|
||||
@@ -183,7 +180,7 @@ void MarginServiceServer::incremental_update_report(const std::string& account,
|
||||
std::scoped_lock<std::recursive_mutex> l(_lock);
|
||||
|
||||
MarginResult margin;
|
||||
if(!_margin->get_last_valid_result(orderman::to<orderman::AccountName>(account), margin))
|
||||
if(!_margin->get_last_valid_result(account, margin))
|
||||
{
|
||||
margin.Clear();
|
||||
margin.set_account(account);
|
||||
|
||||
@@ -6,7 +6,7 @@ namespace bts {
|
||||
namespace position {
|
||||
struct Position
|
||||
{
|
||||
orderman::AccountName account;
|
||||
std::string account;
|
||||
std::string security_desc;
|
||||
Quantity position;
|
||||
api::Side side;
|
||||
|
||||
@@ -112,7 +112,7 @@ bool PositionAggregator::query_positions(const std::string& account, std::vector
|
||||
if(sec && sec->has_glbx() && sec->has_future())
|
||||
{
|
||||
Position pos;
|
||||
pos.account = orderman::to<orderman::AccountName>(account);
|
||||
pos.account = account;
|
||||
pos.security_desc = securities::descriptor(*sec);
|
||||
eraseSubStr(pos.security_desc, "SIM:");
|
||||
int32_t totalpos = unit.sod_long_pos() + unit.day_long_pos() - unit.sod_short_pos() - unit.day_short_pos();
|
||||
|
||||
Reference in new issue
Block a user