来自一个 "傻瓜 "的问题 - 页 166

 
Alphazavr:

这个代码有什么问题。为什么一直出现"取消订单失败#0在市场上购买0.00[无效请求]"的错误?

位置选择 在哪里?

订单与交易有什么关系?

你想做什么?"平仓"?


order_remove_mql_trade_request 的名字是一个恶梦。

 
sergeev:

位置选择 在哪里?

订单与交易有什么关系?

你到底想做什么?


order_remove_mql_trade_request 这个名字则是一个恶梦。

是的,我需要澄清一下。

代码的目的 -- 如果有一个未结头寸,那么取消所有与该头寸相同方向的限价单。

例如,如果一个位置是开放的BAY.然后取消所有订单,如买入限制

我忘了选择位置=)。嗯,错误不是来自于此(已检查)。

 
Alphazavr:

这个代码有什么问题。为什么"失败的取消订单#0在市场上买入0.00[无效的请求]"的错误不断出现?


   MqlTradeRequest order_remove_mql_trade_request = {0};
   order_remove_mql_trade_request.action = TRADE_ACTION_REMOVE;

   i = OrdersTotal();
   if(i > 0){
      if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY){
         for(i2 = 0;i2 <= i;i2++){
            ul = OrderGetTicket(i2);
            OrderSelect(ul);
            if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_BUY_LIMIT){
               order_remove_mql_trade_request.order = ul;
               OrderSend(order_remove_mql_trade_request,mql_trade_result);}}}
      if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL){
         for(i2 = 0;i2 <= i;i2++){
            ul = OrderGetTicket(i2);
            OrderSelect(ul);
            if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_SELL_LIMIT){
               order_remove_mql_trade_request.order = ul;
               OrderSend(order_remove_mql_trade_request,mql_trade_result);}}}}


删除这些等价物。
 
sergeev:
删除这些等号。
我已经这么做了,没有用。我不知道错误在哪里。另外,我不明白为什么这些错误只出现在BAY LIMIT订单上,卖出限制没有错误。
 
Alphazavr:
我已经做了,它没有用。
欺骗你的长辈是不好的。
 
sergeev:
欺骗你的长辈是不好的。

欺骗是不好的,我不这么做。


我刚刚用这个代码仔细检查了一切。

   i = OrdersTotal();
   if(i > 0){
      PositionSelect(_Symbol);
      if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY){
         for(i2 = 0;i2 < i;i2++){
            ul = OrderGetTicket(i2);
            OrderSelect(ul);
            if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_BUY_LIMIT){
               order_remove_mql_trade_request.order = ul;
               OrderSend(order_remove_mql_trade_request,mql_trade_result);}}}
      if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL){
         for(i2 = 0;i2 < i;i2++){
            ul = OrderGetTicket(i2);
            OrderSelect(ul);
            if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_SELL_LIMIT){
               order_remove_mql_trade_request.order = ul;
               OrderSend(order_remove_mql_trade_request,mql_trade_result);}}}}


结果是一样的。上述的错误经常发生

 
Alphazavr:

结果是一样的。错误经常发生

"经常 "是一个空话。

你认为2+2经常等于4吗?

不要偷懒--做一个发送分析和一个返回错误的分析。

检查你要移除的是什么?

关闭时是否有任何订单?

也许你正试图删除一个已经被删除的订单。


第三,谁教你关闭订单,让你以为可以关闭所有的订单? 你认为在你每一次关闭后,OrdersTotal会减少1.而你仍然打你的i2++,直到你赢,直到主i。

你甚至懒得检查OrderGetTicket 或OrderSelect是否返回错误。

不好,非常不好。

正是因为这样的笔,我们的卫星离开了轨道。

 
sergeev:

"经常 "是一个空话。

你认为2+2经常等于4吗?

不要偷懒--做一个发送分析和一个返回错误分析。

检查你要删除的内容?

关闭时是否有任何订单?

也许你正试图删除一个已经被删除的订单。


第三,谁教你以这样的方式平仓? 你认为你通过了所有的订单,但你没有。 在你每次平仓后,OrdersTotal减少了1.而你仍然击败你的i2++,直到你获胜,直到主要的i。

你甚至懒得检查OrderGetTicket或OrderSelect是否返回错误。

这很糟糕,非常糟糕。

正是因为这样的笔,我们的卫星离开了轨道。

我确信不是这样的,否则在测试中不仅会出现bylimits的错误,而且还会出现selllimits的错误。谢谢你试图帮助和指导我。

 

先生们,你们好。

这是一个模拟击键的windows函数的原型。

VOID WINAPI keybd_event(__in  BYTE bVk,               // Тип BYTE, занимает 1 байт
                        __in  BYTE bScan,             // Тип BYTE, занимает 1 байт
                        __in  DWORD dwFlags,
                        __in  ULONG_PTR dwExtraInfo
);

问题是,这个函数在MT4中是用int而不是byte来调用的。它看起来像这样。

void keybd_event(int bVk,                 // Тип int, занимает 4 байта
                 int bScan,               // Тип int, занимает 4 байта
                 int dwFlags,
                 int dwExtraInfo);
问题是什么?它是否至少传输了4个字节?这是否取决于硬件?
 
220Volt:

先生们,你们好。

这是一个模拟击键的windows函数的原型。

问题是,这个函数在MT4中是用int而不是byte来调用的。它看起来像这样。

问题是什么?它是否至少传输了4个字节?这是否取决于硬件?

当向一个函数传递参数 时,最小量值是一个32位的整数。也就是说,在你的例子中,bVk和bScan在被传入函数之前将被转换为int类型。

这就是为什么上面给出的函数原型不会相互矛盾的原因

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Основы языка / Функции / Передача параметров - Документация по MQL5