FORTS:帮助初学者 - 页 4

[删除]  
Sergey Chalyshev:
这与阿瓦有什么关系?他不能在论坛上写作,他被永久禁言了。
好吧,我不知道有一个 "部分 "禁令。这是一种耻辱。
 
Sergey Chalyshev:
这和阿瓦有什么关系?他不能在论坛上写作,他被永远禁言了。

不,他已经被解禁了。

被禁止的用户是用划线写的。

 
Andrey Khatimlianskii:

不,他已经被解禁了。

被禁止的用户是用划线写的。

我也这么想,你最好问问版主,他们肯定知道。
 
Mikhail Filimonov:

特点。

在OrderSend()返回代码和订单票中收到确认(TRADE_RETCODE_PLACED )。

而对于OnTradeTransaction()中的OrderSendAsync()函数,这完全不意味着

该订单确实被暴露在一个交易所。

所以需要对订单状态进行额外的检查(就像对订单的其他操作一样)。

if ( OrderSend( request, result ) )
{
  if ( result.retcode == TRADE_RETCODE_PLACED )
  { 
    ticket = result.order;
  }
}

https://www.mql5.com/ru/docs/constants/structures/mqltraderesult

它说,只有当交易类型TRADE_ACTION_PENDING 时,票据才会被填满。

如果操作是TRADE_ACTION_DEAL,在result.order中是否会返回订单票?

Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура результата торгового запроса
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура результата торгового запроса
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура результата торгового запроса - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
是的。
 
Sergei Vladimirov:
是的。

响应OrderCheck()时,何时出现错误10013?

以下是我的脚本的代码。

   MqlTradeRequest   m_request;         
   MqlTradeCheckResult m_check_result;  
   
   m_request.action      =TRADE_ACTION_DEAL;
   m_request.symbol      =Symbol();
   m_request.magic       =001;
   m_request.volume      =1.00;
   m_request.type        =ORDER_TYPE_SELL;
   m_request.type_filling=ORDER_FILLING_RETURN;
   if(!OrderCheck(m_request,m_check_result))
      Print(__FUNCTION__+": order check failed.");
   else
      Print(__FUNCTION__+": order check passed.");
   Print(__FUNCTION__+": symbol=",m_request.symbol,", operation=",m_request.type,", volume=",m_request.volume);
   Print(__FUNCTION__+": retcode=",m_check_result.retcode,", balance=",m_check_result.balance,", equity=",m_check_result.equity,", profit=",m_check_result.profit,
            ", margin=",m_check_result.margin,", margin_free=",m_check_result.margin_free,", margin_level=",m_check_result.margin_level,
            ", comment=",m_check_result.comment);

这是我得到的日志。

Check (RTS-6.16,M30)    OnStart: retcode=10013, balance=0.0, equity=0.0, profit=2.121995790965272 e-314, margin=0.0, margin_free=0.0, margin_level=0.0, comment=Invalid request
Check (RTS-6.16,M30)    OnStart: symbol=RTS-6.16, operation=1, volume=1.0
Check (RTS-6.16,M30)    OnStart: order check failed.
 
igorbel:

响应OrderCheck()时,何时出现错误10013?

以下是我的脚本的代码。

这是我得到的日志。

在添加m_request.expiration =0时通过,尽管帮助中说。

交流执行。

在交易所执行模式下建立头寸的交易指令。需要指定5个字段。

  • 行动
  • 标志
  • 类型
  • Type_filling

你还可以指定魔法和评论字段。

 

但奇怪的事情并没有就此结束。

1手购买。

Check (RTS-6.16,M30) OnStart: retcode=0, balance=530863.24, equity=538989.4399999999, profit=2.121995790965272e-314, margin=211242.25, margin_free=319620.99, margin_level=255.1522907941001, comment=Done

Check (RTS-6.16,M30) OnStart: symbol=RTS-6.16, operation=0, volume=1.0

交易保证金211242.25,与当前保证金相同--都是正确的,因为RTS-6.16的当前空头头寸是2份合同。1份合约的初始保证金 RTS-6.16 17388.75

我再加一个地段。

2手买入。

Check (RTS-6.16,M30) OnStart: retcode=0, balance=651428.4399999999, equity=659212.76, profit=2.121995790965272e-314, margin=211242.25, margin_free=440186.19, margin_level=312.0648260468727, comment=Done

Check (RTS-6.16,M30) OnStart: symbol=RTS-6.16, operation=0, volume=2.0

一切正常,因为目前的位置是2塞尔,保证金保持不变。

现在是3个购买合同。

2016.04.28 01:26:47.319 Check (RTS-6.16,M30) OnStart: retcode=0, balance=651428.4399999999, equity=658739.4, profit=2.121995790965272e-314, margin=246019.75, margin_free=405408.69, margin_level=267.7587470111648, comment=Done

2016.04.28 01:26:47.319 Check (RTS-6.16,M30) OnStart: symbol=RTS-6.16, operation=0, volume=3.0

保证金价值在一次246019.75。怎么会呢?1个合同只需17000。那其他的价值呢(在以前的案例中也是如此)?这种公平和平衡从何而来?我的账户里甚至没有那么多钱。margin_free也是错的,没有说到利润。

谁能帮我检查一下,也许我做错了什么?


 
igorbel:

当我添加m_request.expiration =0时,通过了,尽管帮助中是这么说的。

在声明之后总是立即用零来初始化所有的变量和结构。你在过期栏里有一些垃圾,所以你得到一个错误。

MqlTradeRequest   m_request;         
MqlTradeCheckResult m_check_result; 

ZeroMemory(m_request);
ZeroMemory(m_check_result);
// теперь заполняйте нужные поля
 
Sergei Vladimirov:

所有的变量和结构在声明后总是立即用零来初始化。你在过期栏中有一些垃圾,这就是为什么你会出现错误。

谢谢你。但我已经放弃了OrderCheck(),至少在FORTS上它几乎是无用的功能。首先,它给出的结果不明确。但即使这些数值或多或少是正确的,也总有一种可能性,即订单在交易所被拒绝。这就是为什么我们要看订单状态ORDER_STATE_REJECTED,还要看注释。然后我们必须减少订单中的数量并再次发送。当然,所有这些并不能使交易变得更快,但我们能做什么?