mql5语言的特点、微妙之处以及技巧 - 页 155

 
Nikolai Semko:

发现两年前的一项有趣的研究,比较了不同语言的有效性

https://greenlab.di.uminho.pt/wp-content/uploads/2017/09/paperSLE.pdf



哦,我的天啊!

阿达真的活着并且在成长!?如果我没记错的话,是第一个OOP。我在80年代初研究过它。直到现在才听说,还以为这种语言和Modula一样死了呢。两者都是帕斯卡的深度升级。我当时没有Ada编译器,我有Modula--在DWK上的一个七通,如果有人记得的话。

 

为了避免在测试器中出现执行错误,在挂单或SL/TP应在当前价格 下达的情况下,发送适当的市场订单。

  • 在当前价格下一个挂单--在OrderSend市场订单之后添加。
  • 在当前价格放置SL/TP头寸--在OrderClose头寸后添加。
 
fxsaber:

为了避免在测试器中出现执行错误,在挂单或SL/TP应在当前价格 下达的情况下,发送适当的市场订单。

  • 在当前价格下一个挂单--在OrderSend市场订单之后添加。
  • 在当前价格放置SL/TP仓位--在OrderClose仓位后添加。

我们可以更详细地讨论这个问题吗?这不是很清楚。

  • 要在当前价格下挂单,必须在发送开仓请求后添加一些东西(?????????)。
  • 为了在当前价格下止损单(对什么?),必须在发送平仓请求后添加一些东西(?????????)。
这些是在试图破译你所写的内容后出现的问题 ...
 
Artyom Trishkin:

你能不能说得更具体一点?这一点其实并不清楚。

  • 要在当前价格下挂单,必须在发送开仓请求后添加一些东西(?????????)。
  • 为了在当前价格下止损单(对什么?),必须在发送平仓请求后添加一些东西(?????????)。
这种问题是在试图破译你所写的内容之后出现的。

问题显示在这里。解决方案。

// Делает более точными MT4/5-тестеры.
TICKET_TYPE MyOrderSend( const string Symb, int Type, const double dVolume, const double Price, const int SlipPage, const double SL, const double TP,
                         const string comment = NULL, const MAGIC_TYPE magic = 0, const datetime dExpiration = 0, color arrow_color = clrNONE )
{
  static const bool IsTester = MQLInfoInteger(MQL_TESTER);
  MqlTick Tick = {0};  
  
  bool Res = IsTester && SymbolInfoTick(Symb, Tick);
  
  if (Res && (Type > OP_SELL))
  {
    if ((Type == OP_BUYLIMIT) || (Type == OP_BUYSTOP))
    {
      if (Price == Tick.ask)
        Type = OP_BUY;
    }
    else if (Price == Tick.bid)
      Type = OP_SELL;
  }
  
  const TICKET_TYPE Ticket = OrderSend(Symb, Type, dVolume, Price, SlipPage, SL, TP, comment, magic, dExpiration, arrow_color);
  
  Res = Res && (Type <= OP_SELL) && (Ticket != -1) &&
        (Type ? (SL == Tick.ask) || (TP == Tick.ask) : (SL == Tick.bid) || (TP == Tick.bid)) &&
        OrderClose(Ticket, dVolume, Type ? Tick.ask : Tick.bid, SlipPage, arrow_color);
  
  return(Ticket);
}

// Делает более точными MT4/5-тестеры.
bool MyOrderModify( const long Ticket, const double Price, const double SL, const double TP, const datetime Expiration, const color Arrow_Color = clrNONE )
{
  static const bool IsTester = MQLInfoInteger(MQL_TESTER);
  
  bool Res = false;
  
  if (IsTester && OrderSelect(Ticket, SELECT_BY_TICKET) && !OrderCloseTime())
  {
    if (OrderType() <= OP_SELL)
    {
      Res = (OrderClosePrice() == SL) || (OrderClosePrice() == TP);
      Res = OrderModify(Ticket, Price, SL, TP, Expiration, Arrow_Color) && (!Res || OrderClose(Ticket, OrderLots(), OrderClosePrice(), 0, Arrow_Color));
    }
    else if (OrderClosePrice())    
      Res = ((OrderClosePrice() == Price) &&
             (MyOrderSend(OrderSymbol(), OrderType() & 1, OrderLots(), Price, 0, SL, TP,
                          OrderComment(), OrderMagicNumber(), OrderExpiration(), Arrow_Color) != -1) && OrderDelete(Ticket)) ||
            OrderModify(Ticket, Price, SL, TP, Expiration, Arrow_Color);
    else
    {
      MqlTick Tick = {0};
      
      if (SymbolInfoTick(OrderSymbol(), Tick))
        Res = (((bool)(OrderType() & 1) ? (Price == Tick.bid) : (Price == Tick.ask)) &&
               (MyOrderSend(OrderSymbol(), OrderType() & 1, OrderLots(), Price, 0, SL, TP,
                            OrderComment(), OrderMagicNumber(), OrderExpiration(), Arrow_Color) != -1) && OrderDelete(Ticket)) ||
               OrderModify(Ticket, Price, SL, TP, Expiration, Arrow_Color);
      else
        Res = OrderModify(Ticket, Price, SL, TP, Expiration, Arrow_Color);                     
    }
  }
  else
    Res = OrderModify(Ticket, Price, SL, TP, Expiration, Arrow_Color); 
  
  return(Res);
}

#define OrderSend MyOrderSend
#define  OrderModify MyOrderModify
 
fxsaber:

问题显示在这里。解决方案。

这并没有让人更清楚地了解它的用途或要做什么。毕竟,很多人在开始阅读代码制作自己的解决方案或使用现成的解决方案之前,需要了解写的是什么原因。

我要求对此进行更详细的解释。

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

mql5语言的特点、复杂性和技术

fxsaber, 2019.12.18 12:45

为了避免在测试器中出现执行错误,在你需要在当前价格 下挂单或SL/TP的情况下,发送适当的市场订单。

  • 以当前价格下达挂单--在OrderSend市场订单后添加。
  • 在当前价格放置SL/TP仓位--在OrderClose仓位后添加。

并展示了一个例子,说明我是如何看待它的,或者也许是其他人。

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

mql5的特殊性,技巧和窍门

Artyom Trishkin, 2019.12.18 12:53 pm

是否可以更详细地解释一下?我什么都不明白。

  • 要在当前价格下挂单,你需要在发送开仓请求后添加一些东西(?????????)。
  • 为了在当前价格下止损单(对什么?),必须在发送平仓请求后添加一些东西(?????????)。
这些是在试图破译你所写的内容后出现的问题 ...

总之...

 
Artyom Trishkin:

我要求你说得更具体一些

在MT5-Tester中,以当前价格 下挂单和SL/TP,不接受在当前tick上执行。

 

大家好。

你能告诉我,MT5中有哪些工具可以用来显示滴答图?

在MT4有一个选项 "离线打开"。通过创建我自己的hst-files历史文件来处理ticks,这很方便。

在MT5中,没有 "独立打开 "的选项。尽管处理蜱虫的软件工具很好。

不可能不存在在图表上显示它们的可能性

 
fxsaber:

问题显示在这里。解决方案。

  const TICKET_TYPE Ticket = OrderSend();
  ...
  OrderClose(Ticket, dVolume, Type ? Tick.ask : Tick.bid, SlipPage, arrow_color);

真是一派胡言!为什么在目前的价格下用SL/TP开盘?

那么,通过将SL/TP放在当前价格上进行平仓,如果有的话,是有意为之。也没有必要去模拟触发。

 
Andrey Khatimlianskii:

真是一派胡言!为什么在目前的价格下用SL/TP开盘?

那么,通过将SL/TP放在当前价格上进行平仓,如果有的话,是有意为之。没有必要去模拟触发。

这样,你就可以在几十分钟或几小时内轻松获得一个触发器。

想象一下,你需要通过TP来关闭,而TP是以某种方式计算的。而现在,它与当前的价格 相等。

 
fxsaber:

需要在TP收盘,这是以某种方式计算出来的。而现在,它已经变得与目前的价格 相等。

在这种情况下,我总是检查这个TP是否应该已经触发(价格已经越过它),并根据市场来关闭。

或者,如果有必要用限价退出,我把它拉到价格后面,直到它填满。