以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  高级功能研发区  (http://www.weistock.com/bbs/list.asp?boardid=5)
----  C++ 中 PleaseOrder 无反应的情况是咋回事  (http://www.weistock.com/bbs/dispbbs.asp?boardid=5&id=98328)

--  作者:小峨武
--  发布时间:2016/6/7 14:36:45
--  C++ 中 PleaseOrder 无反应的情况是咋回事
if (context.getOrder().getOrder() == "order")
{
int orderType = 0;//0限价  
int orderOperateType = 0; //0开仓 1平仓 2平今
int direction = 0; //0买入 1卖出
int stockType = 0; //股票(0普通 1融资)
int runType = 0;  //是否为队列委托方式,即成交上一笔后再委托下一笔
WORD wMarket = \'S\' | \'H\' << 8;

std::vector<std::string>* values = context.getOrder().getParam(std::string("market"));
const char *value = values->front().c_str();
wMarket = value[0] << 8 | value[1];
values = context.getOrder().getParam(std::string("stockCode"));

const char *stockCode = values->front().c_str();
values = context.getOrder().getParam(std::string("amount"));

float orderPrice = boost::lexical_cast<float>(values->front().c_str());
values = context.getOrder().getParam(std::string("volumn"));

unsigned int orderAmount = boost::lexical_cast<int>(values->front().c_str());
const char *account;
values = context.getOrder().getParam(std::string("account"));
if (values != nullptr)
account = values->front().c_str();
else
account = nullptr;
long orderId = server->PlaceOrder(orderType, orderPrice, 0, orderAmount, direction, stockCode, wMarket, 1, account, orderOperateType, stockType, runType);
if (orderId == -1)
{
context.getOrder().setError("call execute error");
}
else
{
context.getOrder().addParam(std::string("orderNo"), orderId);
}
return true;
}
 

--  作者:王锋
--  发布时间:2016/6/7 14:44:25
--  
请问下单后long orderId这个返回结果是多少?是-1吗?
--  作者:王锋
--  发布时间:2016/6/7 14:45:14
--  

另外,你是不是在交易回报或者行情的触发消息处理中直接调用这个下单指令了?

试试用金字塔自带的下单插件范例,人工下单试试。


--  作者:jerfly
--  发布时间:2016/6/7 14:47:14
--  
返回是-1
--  作者:jerfly
--  发布时间:2016/6/7 14:48:43
--  
人工下单是成功的, Formula 1是我调用时生成的, Formula 0是人工下单生成的日志
2016-06-07 14:08:06.689    【下单】600020 价4.520000 量100 买卖0 类型0 开平0 账户60001386 Formula 0
2016-06-07 14:08:08.510    【指令】收到回报指令 ID = 8
2016-06-07 14:08:08.574    【回报】60001386 : 600020 - 已报单 100 价格:4.52 开 买
2016-06-07 14:08:08.600    【指令】收到成交回报指令 ORDERID = 8
2016-06-07 14:08:08.627    【回报】60001386 : 600020 - 已成交 100 价格:4.52 开 买
2016-06-07 14:08:08.666    【回报】60001386 : 600020 - 全部成交 100
2016-06-07 14:08:13.053    【下单】600020 价4.530000 量100 买卖0 类型0 开平0 账户60001386 Formula 1
2016-06-07 14:08:43.434    【下单】600020 价4.520000 量100 买卖0 类型0 开平0 账户60001386 Formula 1
2016-06-07 14:08:59.531    【下单】600020 价4.520000 量100 买卖0 类型0 开平0 账户60001386 Formula 0
2016-06-07 14:09:01.405    【指令】收到回报指令 ID = 9
2016-06-07 14:09:01.447    【回报】60001386 : 600020 - 已报单 100 价格:4.52 开 买
2016-06-07 14:09:01.456    【指令】收到成交回报指令 ORDERID = 9
2016-06-07 14:09:01.482    【回报】60001386 : 600020 - 已成交 100 价格:4.52 开 买
2016-06-07 14:09:01.540    【回报】60001386 : 600020 - 全部成交 100
2016-06-07 14:33:40.627    【下单】600020 价4.520000 量100 买卖0 类型0 开平0 账户60001386 Formula 1
2016-06-07 14:33:45.486    【下单】600020 价4.520000 量100 买卖0 类型0 开平0 账户60001386 Formula 1
2016-06-07 14:33:56.529    【下单】600020 价4.530000 量100 买卖0 类型0 开平0 账户60001386 Formula 0
2016-06-07 14:34:13.153    【指令】收到回报指令 ID = 10
2016-06-07 14:34:13.194    【回报】60001386 : 600020 - 已报单 100 价格:4.53 开 买
2016-06-07 14:34:13.211    【指令】收到成交回报指令 ORDERID = 10
2016-06-07 14:34:13.241    【回报】60001386 : 600020 - 已成交 100 价格:4.53 开 买
2016-06-07 14:34:13.301    【回报】60001386 : 600020 - 全部成交 100
2016-06-07 14:34:34.155    【下单】600020 价4.520000 量100 买卖0 类型0 开平0 账户60001386 Formula 1
2016-06-07 14:34:40.433    【下单】600020 价4.530000 量100 买卖0 类型0 开平0 账户60001386 Formula 1
2016-06-07 14:35:19.036    【下单】600020 价4.530000 量100 买卖0 类型0 开平0 账户60001386 Formula 1


--  作者:jerfly
--  发布时间:2016/6/7 14:53:21
--  
图片点击可在新窗口打开查看图片点击可在新窗口打开查看图片点击可在新窗口打开查看在对话框中调用的

--  作者:王锋
--  发布时间:2016/6/7 15:00:43
--  
可否给出你的上述代码,是从哪里调用过来的?方便的话,建议将你的工程打包压缩一下发到论坛上,我们研发人员本地调试一下
--  作者:jerfly
--  发布时间:2016/6/7 15:00:50
--  
是不是在交易回报或者行情的触发消息处理中直接调用这个下单指令了?
这个是什么意思?我现在是在你们那个C++例子的对话框中加了一个下单按钮,实现下单的,应该不是在行情的触发消息处理中吧。

void TradeMonitor::OnBnClickedOrder()
{
// TODO: 在此添加控件通知处理程序代码
// TODO: Add your control notification handler code here
UpdateData();
if (stockCode.IsEmpty() || (orderPrice < 0.1) || (orderAmount <= 0))
{
AfxMessageBox("非法参数, 下单失败!");
return;
}

std::string market = "HS";
if (marketType == "深证")
{
market = "ZS";
}

stock->order(*callable.get(), market, std::string(stockCode.GetString()), orderAmount, orderPrice, (isBuySale == 0)); //跳转到首贴上的代码

}

--  作者:王锋
--  发布时间:2016/6/7 15:15:47
--  
将工程压缩一下附件传到论坛上来吧
--  作者:jerfly
--  发布时间:2016/6/7 17:07:32
--  
我查了一下,用你们的例子调用的参数调用了一下,例子是成功的,我的是失败的,看来不是调用参数的问题,可能是因为我是另起了个线程来调用引起的问题,那这个问题如何解决?
[此贴子已经被作者于2016-6-7 17:08:21编辑过]