初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1147

 
Vladimir Karputov:

你去吧。


另一件重要的事情是你如何更新价格(以及你是否更新它们?)差价--你如何得到它?

    double point, price, ask, bid;
    ulong digits;

    if(!SymbolInfoDouble(symbol, SYMBOL_ASK, ask)) return(true);
    if(!SymbolInfoDouble(symbol, SYMBOL_ASK, bid)) return(true);
    if(!SymbolInfoInteger(symbol, SYMBOL_DIGITS, digits)) return(true);
    if(!SymbolInfoDouble(symbol, SYMBOL_POINT, point)) return(true);
SymbolInfoInteger(symbol, SYMBOL_SPREAD);
 
Mikhail Sergeev:

因此,供今后参考。

1.SymbolInfoDouble

如果这个函数是用来获取最后一个tick的信息,最好使用SymbolInfoTick()。 很有可能自终端连接到交易账户后,这个符号就没有任何报价了。在这种情况下,要求的值将是未定义的。

2.最好将价差作为卖出价和买入价之间的差额。

3.冻结水平:在三个SYMBOL_TRADE_FREEZE_LEVEL、SYMBOL_TRADE_STOPS_LEVEL和计算的点差)中寻找最大值,然后乘以3,你就会很高兴

第3点是在与KodoBase合作的实践中推导出来的(KodoBase和Market的验证器都是一样的)。
Документация по MQL5: Получение рыночной информации / SymbolInfoDouble
Документация по MQL5: Получение рыночной информации / SymbolInfoDouble
  • www.mql5.com
2. Возвращает true или false в зависимости от успешности выполнения функции.  В случае успеха значение свойства помещается в приемную переменную, передаваемую по ссылке последним параметром. Если функция используется для получения информации о последнем тике, то лучше использовать SymbolInfoTick(). Вполне возможно, что по данному символу с...
 
Vladimir Karputov:

所以,供以后参考。

1.SymbolInfoDouble

如果这个函数是用来获取最后一个tick的信息,最好使用SymbolInfoTick()。 很有可能自终端连接到交易账户后,这个符号就没有任何报价了。在这种情况下,请求的值将是未定义的。

2.最好将价差作为卖出价和买入价之间的差额。

3.冻结水平:在三个SYMBOL_TRADE_FREEZE_LEVEL、SYMBOL_TRADE_STOPS_LEVEL和计算的点差)中寻找最大值,然后乘以3,你就会很高兴

第3点是在与KodoBase合作的实践中推导出来的(KodoBase和Market的验证器都是一样的)。

非常感谢您!我现在要做一些改变,并尝试一下。

 
Mikhail Sergeev:

非常感谢您!我现在就进行修改,并试一试。

是的,结果将是有趣的。

 
Vladimir Karputov:

是的,结果将是有趣的。

问题解决了!结果是非常简单的,为了删除一个订单,有必要填写request.symbol

我还没有找到任何结构化的信息,说明根据交易操作的类型,哪些数据应该一定要传给请求。而我用的例子是https://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions。

它不在那里。


我检查了很多变体,都是冻结的。在我的情况下,单一尺寸已经足够。

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Торговля осуществляется посредством отправки с помощью функции OrderSend() приказов на открытие позиций, а также приказов на установку, модификацию и удаление отложенных ордеров. Каждый торговый приказ содержит указание на тип запрашиваемой торговой операции. Торговые операции описаны в перечислении ENUM_TRADE_REQUEST_ACTIONS...
 
Mikhail Sergeev:

问题解决了!结果是非常简单的,为了删除一个订单,有必要填写request.symbol

我没有找到任何结构化的信息,说明根据交易操作的类型,哪些数据应该被传递给请求。而我用的例子是https://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions。

它不在那里。


我检查了很多变体,都是冻结的。在我的情况下,单一尺寸就足够了。

你为什么需要这样的复杂情况呢?使用贸易类 CTrade。

 
Vladimir Karputov:

为什么要费这么大劲?使用 CTrade 交易类。

不幸的是,这种情况从MT4开始就一直存在。适应它比较容易。


我不知道CTrade 的情况,但似乎在你必须指定符号的地方,它都存在于传递给方法的参数中。而且它不存在于OrderDelete(const ulong ticket)方法中,所以它不会工作。我们应该事先在某个地方填写require.symbol。

 
Mikhail Sergeev:

不幸的是,这种情况从MT4开始就一直存在。这更容易适应。


关于 CTrade - 我没有理解,但似乎在所有需要指定符号的地方,它都在传递给方法的参数中。而且它不存在于OrderDelete(const ulong ticket)方法中,所以它不会工作。我们必须在某个地方填写require.symbol。

哪些东西不能用?这是一个交易类:它设置、修改和删除REMOTE ORDERS,并打开、修改和关闭POISONS。

绝对的一切工作。而所有的东西都是由任何贸易命令写成一行。


CTrade

Документация по MQL5: Стандартная библиотека / Торговые классы / CTrade
Документация по MQL5: Стандартная библиотека / Торговые классы / CTrade
  • www.mql5.com
Стандартная библиотека / Торговые классы / CTrade - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Vladimir Karputov:

那么什么是不可行的呢?这是一个交易类:设置、修改和删除REMOTE ORDERS,打开、修改和关闭POISONS。

绝对的一切工作。而所有的东西都是由任何贸易命令写成一行。


CTrade

//+------------------------------------------------------------------+
//| Delete specified pending order                                   |
//+------------------------------------------------------------------+
bool CTrade::OrderDelete(const ulong ticket)
  {
//--- check stopped
   if(IsStopped(__FUNCTION__))
      return(false);
//--- clean
   ClearStructures();
//--- setting request
   m_request.action    =TRADE_ACTION_REMOVE;
   m_request.magic     =m_magic;
   m_request.order     =ticket;
//--- action and return the result
   return(OrderSend(m_request,m_result));
  }

所以我只是不明白在什么时候m_request.symbol 被填充了

总之,问题解决了。再次非常感谢您的帮助!

 
Mikhail Sergeev:

所以我只是不明白,在什么时候m_request.symbol 被填入了

总之,问题解决了。再次非常感谢您的帮助!

通过CTALT 采取调试器,你会看到符号的去向:)