|
|
@@ -186,6 +186,8 @@ bool CManagerExtension::Connect(const CMTStr & server, const UINT64 login, const
|
|
|
|
|
|
if(!m_work_thread.joinable())
|
|
|
m_work_thread = std::thread(&CManagerExtension::keep_alive, this);
|
|
|
+
|
|
|
+ m_dealer_login = login;
|
|
|
//--- ok
|
|
|
return true;
|
|
|
}
|
|
|
@@ -256,7 +258,7 @@ void CManagerExtension::OnOrderDelete(const IMTOrder * order)
|
|
|
|
|
|
request->Clear();
|
|
|
request->Login(login);
|
|
|
- request->SourceLogin(1005);
|
|
|
+ request->SourceLogin(m_dealer_login);
|
|
|
request->Action(IMTRequest::TA_DEALER_POS_EXECUTE);
|
|
|
request->Type(order->Type());
|
|
|
request->Symbol(order->Symbol());
|
|
|
@@ -290,6 +292,7 @@ void CManagerExtension::OnOrderDelete(const IMTOrder * order)
|
|
|
{
|
|
|
for (auto login : m_logins)
|
|
|
{
|
|
|
+ // 获取跟单持仓的上下文
|
|
|
sprintf(login_buf, "%lld", login);
|
|
|
auto fut = m_redis_client->hget(order_buf, login_buf);
|
|
|
m_redis_client->sync_commit();
|
|
|
@@ -300,7 +303,11 @@ void CManagerExtension::OnOrderDelete(const IMTOrder * order)
|
|
|
// 如果不存在,忽略
|
|
|
if (reply.ko()) continue;
|
|
|
if (reply.is_null()) continue;
|
|
|
- MTAPIRES res = MT_RET_OK;
|
|
|
+ MTAPIRES res = MT_RET_OK;
|
|
|
+
|
|
|
+ // 读取跟单持仓
|
|
|
+ position_context context;
|
|
|
+ memcpy(&context, reply.as_string().c_str(), sizeof(position_context));
|
|
|
|
|
|
if (m_manager->UserAccountGet(login, account) != MT_RET_OK)
|
|
|
{
|
|
|
@@ -313,12 +320,14 @@ void CManagerExtension::OnOrderDelete(const IMTOrder * order)
|
|
|
|
|
|
request->Clear();
|
|
|
request->Login(login);
|
|
|
- request->SourceLogin(1005);
|
|
|
+ request->SourceLogin(m_dealer_login);
|
|
|
request->Action(IMTRequest::TA_DEALER_POS_EXECUTE);
|
|
|
request->Type(order->Type());
|
|
|
request->Symbol(order->Symbol());
|
|
|
request->PriceOrder(order->PriceOrder());
|
|
|
request->Volume(volume);
|
|
|
+ // 加入position id
|
|
|
+ request->Position(context.position_id);
|
|
|
|
|
|
UINT request_id = 0;
|
|
|
res = m_manager->DealerSend(request, this, request_id);
|
|
|
@@ -326,6 +335,7 @@ void CManagerExtension::OnOrderDelete(const IMTOrder * order)
|
|
|
request_cache cache;
|
|
|
cache.request = request_id;
|
|
|
cache.orig_position = orig_position;
|
|
|
+ //cache.dest_position = context.position_id;
|
|
|
cache.login = login;
|
|
|
int direction = 1;
|
|
|
if (order->Type() == IMTOrder::OP_SELL)
|
|
|
@@ -341,6 +351,8 @@ void CManagerExtension::OnOrderDelete(const IMTOrder * order)
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ m_redis_client->commit();
|
|
|
}
|
|
|
|
|
|
void CManagerExtension::OnConnect()
|
|
|
@@ -389,6 +401,8 @@ void CManagerExtension::OnDealPerform(const IMTDeal * deal, IMTAccount * account
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
+
|
|
|
+ m_redis_client->commit();
|
|
|
}
|
|
|
|
|
|
void CManagerExtension::SetTrader(const UINT64 trader)
|