无效的请求--刚刚开始,想不明白...... - 页 8

 
papaklass:

我以同样的方式实现了它,只是通过函数。


我明白了,你的代码与MK的类似--在OrderCheckOrderSend 之间,有一层用户的错误处理。

 
papaklass:

我是这样实现的,只是通过函数。

OrderCheck 是隐含的,必然在OrderSend中检查。

因此,如果订单填写不正确,就会立即返回响应,而不把它送回服务器。

 
papaklass:

请看手册对此是怎么说的。

第一个选择:我们看到该功能是用于贸易交易,没有提到支票。

好吧,如果我说有检查,那就是真的。

没有经过严格检查的订单不会离开终端。

第二个亮点:我们看到检查是在服务器上进行的,开发人员建议使用OrderCheck()来检查请求,然后再将其发送到服务器。同样,也没有提到OrderSend()会进行任何验证。

我们特别建议交易者有机会提前发现订单是否被正确执行,并采取适当的行动。

无论谁想--都可以预先检查。谁不愿意--反正我们会为他们检查并返回类似的答案。

唯一提到在发送请求前进行检查的地方是 "在结构的基本检查(指针检查)成功的情况下...."。但是,检查指针和检查请求结构字段的值是否有错误并不是一回事。而开发者建议使用OrderCheck()函数,则间接证明了OrderSend()在向服务器发送请求之前没有进行真正的错误检查。否则我们为什么要做 "黄油":OrderSend()先检查,然后必须由OrderCheck()再次进行同样的检查?

因此,从参考文献中可以毫不含糊地看出,该检查只在服务器上进行。

没有人会错过错误的或过多的流向服务器的请求。

基本逻辑足以理解这一点。而且我们将扩大文件的内容。

[删除]  
sergeev:

你没有,所有的错误都由业务逻辑处理。

我有一个。业务逻辑处理与业务逻辑有关的事件(例如,下单失败),但所有其他的(例如,服务器响应延迟)--一个通用模板,在此基础上绝对可以实现任何专家。

但MT5在处理返回代码+异步方面要复杂很多倍。

这就是我们正在讨论的问题,我以前也同样写过,关于这个问题的信息是零。而多年来,民主党人正试图以各种方式使自己与它的规定脱离关系。这就是我写的--经销商从一个有导致泄漏的点的产品中受益,即对MQ来说,它是增加销售的一个因素。唉,我们所处的市场是竞争对手(我们和MQ),而不是战友。

你在向一个包装者提出不可能完成的任务。标准库不是商业逻辑。它是一个 "覆盖 "终端功能的封装器。糖果的馅料上有一个包装纸。

那么这样的结构设计就没有什么意义了。

但包装商不能保证任何东西,因为是你在充当担保人。你的商业逻辑。:)

就像打印功能不能保证磁盘上的自由空间一样。 和记录错误。你必须使用其他函数来处理错误,而且这些函数是针对特定情况的。

即使是正确的包装器也不能保证所有的事情,但它可以许多与相关功能有关的事情。

-亚历山大-,让我们来谈谈具体的缺陷,你说出你想解决的具体 缺陷。

已经不止一次地写过具体的内容了。如果MQ无法提供一个现成的解决方案,至少让他们做一个关于错误处理和返回代码的手册。以 各种方式解锁。在4号文件中,这部分是存在的(例如在这种情况下等待30秒),部分是用户从经验中发现了对无记录情况的处理。对于5岁的孩子来说,根本就没有什么。既然有,就没有人会使用它。

如果这就是MQ的反应,因为简单创建的交易基础设施原则上不允许这样做,那么我还能说什么呢 - 这是整个MT5项目的彻底失败,因为还有大量的其他障碍。

如果你愿意,你可以浏览每个返回代码,看看主要的可能情况。

我很乐意和您这样有经验的MQL5专家顾问一起做。 我们将等待时间和必要性。感谢上帝,我仍然有4个,这在很多方面都更舒适。

 

-Alexey-:

一个现成的解决方案,至少是一个错误处理和返回代码的指南


哪些代码会导致处理问题?


编码

识别器

描述

10004

贸易_retcode_requote

征求意见稿

10006

交易代码_拒绝

要求被拒绝

10007

贸易_retcode_cancel

贸易商取消的请求

10008

贸易_retcode_placed

下订单

10009

交易_retcode_done

已执行的订单

10010

交易_retcode_done_partial

部分执行的请购单

10011

贸易_retcode_error

请求处理错误

10012

交易_retcode_timeout

由于时间过期,请求被取消

10013

交易代码无效

不正确的请求

10014

交易代码_无效的数量

请求中的数量不正确

10015

交易_retcode_invalid_price

请求中的价格不正确

10016

交易_retcode_invalid_stops

请求中的不正确站点

10017

交易_retcode_trade_disabled

禁止贸易

10018

交易_retcode_market_closed

市场已关闭

10019

交易_retcode_no_money

没有足够的资金来执行请求

10020

交易_retcode_price_changed

价格变化

10021

交易_retcode_price_off

没有报价来处理请求

10022

交易代码_无效的有效期

请求中的失效日期无效

10023

交易_retcode_order_changed

订单状态改变

10024

交易代码太多请求

要求过于频繁

10025

交易代码_无变化

要求没有变化

10026

交易_retcode_server_disables_at

自动交易被服务器拒绝

10027

贸易_retcode_client_disables_at

客户端禁止自动交易

10028

贸易_retcode_locked

请求被阻止处理

10029

贸易_retcode_frozen

冻结的订单或位置

10030

交易_retcode_invalid_fill

表示不支持的平衡订单类型

10031

贸易_retcode_connection

没有连接到贸易服务器

10032

贸易_retcode_only_real

只允许对真实账户进行操作

10033

交易_retcode_limit_orders

达到挂单数量的限制

10034

已达到交易代码限制的数量

该符号的订单和头寸数量已达到上限


更新时间:2012.11.14
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
[删除]  

例如,10004。哪里写着该怎么做?而四合院的文件中至少有一些东西。

Можно без задержки обновить данные при помощи функции RefreshRates и повторить попытку. Если ошибка не исчезает, необходимо прекратить все попытки торговых операций и изменить логику программы.

 
sergeev:

哪些代码会引起处理问题?

10006(拒绝的原因是什么,还可能有什么原因没有在其他代码中列出?)

10011, 10013, 10028

[删除]  
A100:

10006(拒绝的原因是什么,还可能有什么其他代码中没有说明的原因?)

10011, 10013, 10028

我支持这个问题。MQ,向你提出一个强烈的请求。请尽可能详细地对这4个代码进行评论。
 

同事们,已经厌倦了寻找真相。这个话题与我的需求相似,所以我在这里写信请求帮助!

我下了立即执行 的订单,当它被挂起时,我检查每一个刻度的价格,如果可能的话,我跟踪它。 但由于某些原因,我总是得到错误10013。我翻遍了所有可能的论坛,几乎添加了初始命令的所有行数(尽管描述中说只有符号、行动和sl及tp足以满足这种类型的行动。没有什么是有效的!下面是代码。

// проверяем условие на открытую сделку
if (f_IsDealOpened()>0)
{  
   // здесь надо написать условия для коррекции ордеров
 MqlTradeRequest chrequest={0};
    if (1)//(is_Str2)
   {
    PositionSelect(NULL);
    if(PositionGetInteger(POSITION_TYPE)==0)
    {
        chrequest.symbol=PositionGetSymbol(0);
        chrequest.order=PositionGetInteger(POSITION_IDENTIFIER);
        chrequest.volume=PositionGetDouble(POSITION_VOLUME);
        chrequest.action=TRADE_ACTION_SLTP;
        chrequest.sl = latest_price.bid - TrailingStop;
        chrequest.tp = PositionGetDouble(POSITION_TP);

     }
     else
     {
        chrequest.symbol=PositionGetSymbol(0);
        chrequest.order=PositionGetInteger(POSITION_IDENTIFIER);
        chrequest.volume=PositionGetDouble(POSITION_VOLUME);
        chrequest.action=TRADE_ACTION_SLTP;
        chrequest.sl = latest_price.ask + TrailingStop;
        chrequest.tp = PositionGetDouble(POSITION_TP);
        Alert(PositionSelect(NULL));
     
     }    
    }
     MqlTradeResult chresult;
     if (OrderSend(chrequest,chresult)==0) 
         {
             Alert("Ошибка расчета функции OrderSend!");
             return;
         }    
         // анализируем код возврата торгового сервера
         if(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
           {
            Alert("Ордер по изменению SL успешно помещен, тикет ордера #: ",mresult.order,"!!");
            open_order_ticket = mresult.order;
            open_order_price = mresult.price;
            return;
           }
         else
           {
            Alert("Запрос на измнение ордера не выполнен - код ошибки: ",GetLastError());
            return;
           }
   
   
   return;
}