程序库: MT4Orders - 页 13

 
fxsaber:

更新

// 更改列表:
// 14.06.2017:
// 添加:已启用SL/TP 关闭位置检测 的初始执行功能 (закрытых через OrderClose).

工作原理示例

关于交易、自动交易系统和测试交易策略的论坛

MT5 与 MT4 终端屏幕对比 - 对 MT 5 的变化感到失望

fxsaber, 2017.07.07 08:46 AM

首先运行此脚本

#include <MT4Orders.mqh> //https://www.mql5.com/en/code/16006

#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)
#define  SLIPPAGE 100
#define  OFFSET (SLIPPAGE * _Point)

void OnStart()
{
  if (OrderSelect(OrderSend(_Symbol, OP_BUY, 1, Ask, SLIPPAGE, 0, 0), SELECT_BY_TICKET))
  {
    OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() - OFFSET, OrderOpenPrice() + OFFSET, 0);
    
    if (OrderSelect(OrderTicket(), SELECT_BY_TICKET))
      OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), SLIPPAGE);
  }
}

结果:

'6145767': instant buy 1.00 EURUSD at 1.14156 (deviation: 100)
'6145767': accepted instant buy 1.00 EURUSD at 1.14156 (deviation: 100)
'6145767': deal #140159795 buy 1.00 EURUSD at 1.14156 done (based on order #156755661)
'6145767': order #156755661 buy 1.00 / 1.00 EURUSD at 1.14156 done in 252.283 ms
'6145767': modify #156755661 buy 1.00 EURUSD sl: 0.00000, tp: 0.00000 -> sl: 1.14056, tp: 1.14256
'6145767': accepted modify #156755661 buy 1.00 EURUSD sl: 0.00000, tp: 0.00000 -> sl: 1.14056, tp: 1.14256
'6145767': modify #156755661 buy 1.00 EURUSD -> sl: 1.14056, tp: 1.14256 done in 109.586 ms
'6145767': instant sell 1.00 EURUSD at 1.14147, close #156755661 buy 1.00 EURUSD 1.14156 (deviation: 100)
'6145767': accepted instant sell 1.00 EURUSD at 1.14147, close #156755661 buy 1.00 EURUSD 1.14156 (deviation: 100)
'6145767': deal #140159796 sell 1.00 EURUSD at 1.14147 done (based on order #156755662)
'6145767': order #156755662 sell 1.00 / 1.00 EURUSD at 1.14147 done in 219.817 ms


然后运行这个

#include <MT4Orders.mqh> //https://www.mql5.com/en/code/16006

void OnStart()
{
  if (OrderSelect(OrdersHistoryTotal() - 1, SELECT_BY_POS, MODE_HISTORY))
    OrderPrint();
}

结果

#140159796 2017.07.07 09:38:31 buy 1.00 EURUSD 1.14156 1.14056 1.14256 2017.07.07 09:38:32 1.14147 0.00 0.00 -7.88 0


通过这种方式可以了解平仓的SL/TP。

 

MT4 包含的信息比 MT5 少。但这并不妨碍您同时使用 MT4/5 交易应用程序接口。

// 脚本显示所有平仓头寸的 "原因 "字段
#include <MT4Orders.mqh>

void OnStart()
{
  for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL))
    {
      OrderPrint();
      
      Print(EnumToString((ENUM_DEAL_REASON)HistoryDealGetInteger(OrderTicket(), DEAL_REASON)));
    }      
}


结果

#141705115 2017.07.18 15:02:37 sell 0.01 EURUSD 1.15508 0.00000 0.00000 2017.07.19 13:04:05 1.15309 0.00 -0.01 1.99 0
DEAL_REASON_CLIENT

#140517682 2017.07.11 12:06:48 buy 0.01 EURUSD 1.13941 1.13926 0.00000 2017.07.11 12:07:10 1.13926 0.00 0.00 -0.15 [sl 1.13926] 0 DEAL_REASON_SL

#137746488 2017.06.20 01:22:26 sell 2.00 EURUSD 1.11474 0.00000 0.00000 2017.06.20 01:22:41 1.11484 0.00 0.00 -20.00 0 DEAL_REASON_EXPERT
 

当 OrderSend 与终端交易环境不同步时,MT4Orders 中内置了自动同步功能

一段时间后,开发人员 在库中内置了同步功能旧的同步代码 被保留在库中,但有一个小例外--它不仅开始同步,还开始检查开发人员的订单发送同步功能是否正常工作。如果出现错误,应弹出警报

    if (MT4ORDERS::OrderSendBug)
    {
      Alert("BUG!!!!!!");


有报告称,该警报在极少数情况下触发(似乎是在 CPU 忙碌时),表明开发人员的 OrderSend 在与交易环境同步时存在错误。我不知道如何向 SD 开发人员报告,因为我无法重现。但事实依然存在。


因此,有两种选择。

  1. 保持原样 - 警报会报告开发人员的错误。
  2. 拒绝警报。
在这两种情况下,库都会在最短时间内强制同步 OrderSend。
 
// 更改列表:
// 03.08.2016:
// 发布 - 仅在离线测试仪上编写和测试。
// ....
//03.08.2017:
// 添加:已添加 OrderCloseBy。
// 添加:MODE_TRADES 模式下的订单选择操作已加速。现在可以通过
// 相应的 MT4 订单功能,即使 MT5 仓位/订单(非历史订单)未通过 MT4 订单选择。
// 例如,通过 MT5-PositionSelect* 功能或 MT5-OrderSelect 功能。
// 添加:已添加 OrderOpenPriceRequest() 和 OrderClosePriceRequest() - 开仓/平仓时返回交易请求的价格。
// 在这些函数的帮助下,可以计算出相应的订单滑点。

该图书馆已有一年的历史...

 
fxsaber:

图书馆成立一周年了...

祝贺你这包装真漂亮

 
fxsaber:

图书馆成立一周年...


恭喜你

的确,我试过两个 EA,结果都不太理想,第一次编译没有通过--因为我对交易功能 理解不深,所以不明白;第二次变体的 EA 变得非常慢--它占用了内核的所有资源,但编译成功了。

很难说第二个变体的原因是什么,也许不是因为类的原因--有一个半自动的--在水平突破时交易--水平是手工建立的。

 

谢谢大家的祝贺,感谢大家的意见!我们一直都在考虑大家的意见。

Aleksey Vyazmikin:

EA 的运行速度慢得可怕--它占用了所有内核资源,但编译还是成功了。

我想看看代码。您可以发到我的邮箱。

 
fxsaber:

感谢大家的祝贺,感谢大家的评论!我们一直都在考虑大家的意见。

我想看看代码。你可以发邮件给我。


我已经把密码发送到你的邮箱了。

 
Aleksey Vyazmikin:

已将代码发送至 PM。

不幸的是,最初该库并不负责所有 MT4->MT5 转换,因为在这些转换中不仅使用 MQL4交易函数

在您的案例中,Expert Advisor 运行缓慢的原因不是这个库,而是 MT4->MT5 转换的私有实现,影响了时间序列、指标等的工作。

 
fxsaber:

遗憾的是,最初该库并不负责所有 MT4->MT5 转换,因为在这些转换中不仅使用 MQL4交易函数


但现在它负责了?

fxsaber:

在您的案例中,Expert Advisor 运行缓慢不是由该库造成的,而是由 MT4->MT5 转换的私有实现造成的,这会影响时间序列、指标等的运行。

私人 - 是我的库还是其他库?

我按照大家都知道的文章做了所有事情,没有任何特殊指标....。

我怀疑这段代码会导致内核超载:

double iMAMQL4(string symbol,
               int tf,
               int period,
               int ma_shift,
               int method,
               int price,
               int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   ENUM_MA_METHOD ma_method=MethodMigrate(method);
   ENUM_APPLIED_PRICE applied_price=PriceMigrate(price);
   int handle=iMA(symbol,timeframe,period,ma_shift,
                  ma_method,applied_price);
   if(handle<0)
     {
      Print("Объект iMA не создан: Ошибка ",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,0,shift));
  }

或者是这个原因?