#include <Trade\Trade.mqh>
voidOnStart()
{
CTrade Trade;
while (!IsStopped() && (PositionsTotal() <= 1)) // Закончим, когда появится более одной позиции.if (PositionsTotal() == 1)
{
Trade.PositionClose(PositionGetTicket(0)); // Если есть позиция - закрываем.Print("Закрытие, т. к. PositionsTotal() равно 1");
}
elseif (!OrdersTotal())
{
printf("Перед открытием. PositionsTotal: %d, OrdersTotal: %d", PositionsTotal(), OrdersTotal());
Trade.Buy(0.01); // Если нет позиции и ордера - открываем позицию.Print(Trade.ResultRetcodeDescription());printf("После открытия. PositionsTotal: %d, OrdersTotal: %d", PositionsTotal(), OrdersTotal());
}
Print("Выход. PostionsTotal: ", PositionsTotal());
}
#define PRINT(A) Print(#A + " = " + (string)(A))
#include <Trade\Trade.mqh>
voidOnStart()
{
CTrade Trade;
while (!IsStopped() && (PositionsTotal() <= 1)) // Закончим, когда появится более одной позиции.if (PositionsTotal() == 1)
{
Trade.PositionClose(PositionGetTicket(0)); // Если есть позиция - закрываем.Print("Закрытие, т. к. PositionsTotal() равно 1");
}
elseif (!OrdersTotal())
{
printf("Перед открытием. PositionsTotal: %d, OrdersTotal: %d", PositionsTotal(), OrdersTotal());
Trade.Buy(0.01); // Если нет позиции и ордера - открываем позицию.
PRINT(Trade.ResultRetcodeDescription());
PRINT(Trade.ResultDeal());
PRINT(Trade.ResultOrder());
PRINT(Trade.ResultComment());
printf("После открытия. PositionsTotal: %d, OrdersTotal: %d", PositionsTotal(), OrdersTotal());
}
Print("Выход. PostionsTotal: ", PositionsTotal());
}
结果。
2021.05.0511:36:14.566 Test (EURUSD,M1) Перед открытием. PositionsTotal: 0, OrdersTotal: 02021.05.0511:36:14.646 Test (EURUSD,M1) Trade.ResultRetcodeDescription() = done at 0.000002021.05.0511:36:14.646 Test (EURUSD,M1) Trade.ResultDeal() = 02021.05.0511:36:14.646 Test (EURUSD,M1) Trade.ResultOrder() = 22498746452021.05.0511:36:14.646 Test (EURUSD,M1) Trade.ResultComment() = Request executed
2021.05.0511:36:14.646 Test (EURUSD,M1) После открытия. PositionsTotal: 2, OrdersTotal: 12021.05.0511:36:14.646 Test (EURUSD,M1) Выход. PostionsTotal: 2
不,交易活动的最后记录是在第二份日志中。
而这在优先权方面是正确的。
在这里,我又恢复了没有打印的选项,执行后又有一个位置。事实证明,你需要在交易 执行后保持某种停顿。老兄,真是个拐杖。
那么,谁来更新它呢?))
但当有一个未结头寸时,脚本将其关闭,不做任何其他事情。
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
另外,如果我试图打开一个仓位,脚本会立即关闭它。
设法写入IsSynchronized()。这段代码有点重。我还没有决定以什么形式发布。
它是如何工作的?它有点被发现,但又有点不存在?解决方案的要点或原则是什么?
但是,当有一个未平仓的头寸时,脚本会关闭它,而不做其他事情。
并非所有的服务器都会再现两个位置的开放。在你的情况下,它是第三面(一面--两个位置,另一面--一个位置)。
而在排序方面,这也是差不多的。
关于交易、自动交易系统和交易策略测试的论坛
伟大而强大的MT4永远(或如何选择迁移策略)
Ihor Herasko, 2021.05.05 09:35
而这一切都在这里,在订购方面。
突出显示的线条确认了这个顺序。
PositionsTotal= 1 - 发出平仓指令。
关闭是在脚本执行完成后进行的。打印缓存有点失真。
怎么说呢?它有点被发现,但又有点不存在?
我还没来得及贴出来呢。我将在24小时内发布。
解决方案的本质或原则是什么?
它分析了交易历史与当前交易环境的对应关系。在这种情况下,不存在慢速。
它还检查Result.order。
结果,使用情况如下:IsSync()返回错误 - 终端的交易环境是歪的,否则我们可以照常进行。
增加了印刷品。现在还剩下两个职位,正如预期的那样。
结果。
添加Trade.ResultRetcodeDescription()。
还有ResultDeal / ResultOrder / ResultComment 和Order。国家
当然,那里会有一个答案
国家添加Trade.ResultRetcodeDescription()。
还有ResultDeal / ResultOrder / ResultComment 和Order。国家
当然,那里会有一个答案
国家完成了。
结果。
添加Trade.ResultRetcodeDescription()。
还有ResultDeal / ResultOrder / ResultComment 和Order。国家
当然,那里会有一个答案。
国家这肯定不是事实,因为发送市价订单开仓的条件是PositionsTotal == OrdersTotal == 0。