文章 "交易员生存技巧: 由指标制作的快餐"

 

新文章 交易员生存技巧: 由指标制作的快餐已发布:

如果您刚刚切换到 MQL5, 那么本文将会很有用处。首先, 以正常的 MQL4 风格访问指标数据和序列已经完成。其次, 以 MQL5 实现这些整体上更简单。所有函数都尽可能地清晰, 并且非常适合单步调试。

我已经实线了 "注释" 仅供验证。如果在测试器可视化模式下启动 "MACD MQL4 style EA short.mq5" 并将光标放在索引为 #1 的柱线上, 您可以验证它的工作:

在测试器中的 "MACD MQL4 style EA short.mh5"

图例 1. 在测试器中的 "MACD MQL4 style EA short.mh5"

作者:Vladimir Karputov

 

太好了...

 

这篇文章是另一篇 文章的一小部分摘录。没有做任何工作来使其有效运行。没有缓存指标和时间序列。无 High[i]、Low[i] 等。没有 iCustom。

我们期待看到完全不同的东西。此外,如果连来源都没有,专家顾问中的快餐又有什么意义呢?

   for(int i=PositionsTotal()-1;i>=0;i--)
      if(m_position.SelectByIndex(i)) // 通过索引选择位置,以便进一步访问其属性
         if(m_position.Symbol()==m_symbol.Name())
           {
            //----多头仓位已建立
            if(m_position.PositionType()==POSITION_TYPE_BUY)
              {
               //--- 是否应该关闭?
               if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious && 
                  MacdCurrent>(MACDCloseLevel*m_adjusted_point))
                 {
                  //--- 关闭仓位并退出
                  if(!m_trade.PositionClose(m_position.Ticket()))
                     Print("PositionClose error ",m_trade.ResultRetcodeDescription());
                  return;
                 }
               //--- 检查跟踪止损
               if(TrailingStop>0)
                 {
                  if(m_position.PriceCurrent()-m_position.PriceOpen()>m_adjusted_point*TrailingStop)
                    {
                     if(m_position.StopLoss()<m_symbol.Bid()-m_adjusted_point*TrailingStop)
                       {
                        //--- 修改位置并退出
                        if(!m_trade.PositionModify(m_position.Ticket(),
                           m_symbol.NormalizePrice(m_position.PriceCurrent()-m_adjusted_point*TrailingStop),
                           m_position.TakeProfit()))
                           Print("PositionModify error ",m_trade.ResultRetcodeDescription());
                        return;
                       }
                    }
                 }
              }

            if(m_position.PositionType()==POSITION_TYPE_SELL)
              {
               //--- 是否应该关闭?
               if(MacdCurrent<0 && MacdCurrent>SignalCurrent && 
                  MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*m_adjusted_point))
                 {
                  //--- 关闭仓位并退出
                  if(!m_trade.PositionClose(m_position.Ticket()))
                     Print("PositionClose error ",m_trade.ResultRetcodeDescription());
                  return;
                 }
               //--- 检查跟踪止损
               if(TrailingStop>0)
                 {
                  if((m_position.PriceOpen()-m_position.PriceCurrent())>(m_adjusted_point*TrailingStop))
                    {
                     if((m_position.StopLoss()>(m_symbol.Ask()+m_adjusted_point*TrailingStop)) || (m_position.StopLoss()==0.0))
                       {
                        //--- 修改位置并退出
                        if(!m_trade.PositionModify(m_position.Ticket(),
                           m_symbol.NormalizePrice(m_symbol.Ask()+m_adjusted_point*TrailingStop),
                           m_position.TakeProfit()))
                           Print("PositionModify error ",m_trade.ResultRetcodeDescription());
                        return;
                       }
                    }
                 }
              }
           }
Переход с MQL4 на MQL5
Переход с MQL4 на MQL5
  • 2010.05.11
  • Sergey Pavlov
  • www.mql5.com
Данная статья, построенная в форме справочника по функциям MQL4, призвана помочь переходу с MQL4 на MQL5. Для каждой функции языка MQL4 приведено описание и представлен способ ее реализации на MQL5, что позволит вам значительно ускорить перевод своих программ с MQL4 на MQL5. Для удобства функции разбиты на группы, как в документации по MQL4.
 
fxsaber:

这篇文章是另一篇 文章的一小部分摘录。没有做任何工作来使其有效运行。没有缓存指标和时间序列。无 High[i]、Low[i] 等。没有 iCustom。

我们期待看到完全不同的东西。此外,如果专家顾问中的快餐连来源都闻不到,那它还有什么意义呢?


下面是一个典型的 MQL4-ca 例子--无需阅读或查看代码,您就可以带着旗帜直接走上讲台:) 。

 
Vladimir Karputov:

下面是一个典型的 MQL4-ca 例子--不阅读,不看代码,直接带着旗帜走上讲台 :) 。

在发表评论之前,我不仅阅读了文章的正文,还阅读了所有附带的资料(包括 IndicatorsMQL4.mqh 与 IndicatorsMQL5.mqh 的对比分析)。

 
fxsaber:

在发表评论之前,您不仅阅读了文章的正文,还阅读了所有附带的资料(包括 IndicatorsMQL4.mqh VS IndicatorsMQL5.mqh 的分析)。


您一定翻阅了(错过了)MQL5\Include\SimpleCall\Series.mqh 文件。

关于缓存 - 这些都是您个人的猜测(期望)。

本文无意欺骗 MQL4 用户 "插入我的文件,您就可以继续按照MQL4 的风格 无意识地工作",它展示了如何将旧的指标处理方法转移到 MQL5。

 
Vladimir Karputov:

你一定忽略了 MQL5\Include\SimpleCall\Series.mqh 文件。

请仔细阅读。High[i] 等在哪里?

关于缓存 - 这些都是您个人的猜测(期望)。

本文无意欺骗 MQL4 用户:"插入我的文件,您就可以继续按照 MQL4 的风格无意识地工作",它展示了如何将处理指标的旧方法转移到 MQL5。

iCustom 在哪里?你不假思索地几乎复制和粘贴了另一篇文章的一部分,结果导致性能失败。事实上,欺骗用户说这是 MQL4 风格的代价,而不是您的实现。

这里有性能测量结果,表明 MQL4-style 在某些问题上并不比 MQL5 差。在指标方面也可以这样做。

下面是时间序列的实现之一。您可以看到,作者已经做出了努力,强调了性能并摒弃了 MQL4 风格(如果您愿意,也可以完善这一想法)。

Высокопроизводительная библиотека iTimeSeries
Высокопроизводительная библиотека iTimeSeries
  • 投票: 25
  • 2017.05.25
  • nicholishen
  • www.mql5.com
Одной из основных проблем с MQL5 до сих пор было удаление встроенных функций для работы с таймсериями. Несмотря на то, что такой подход расширил для программистов возможности разработки, он также замедлил работу из-за обязательного шага по созданию и удалению новых ячеек памяти каждый раз, когда требуется доступ к данным таймсерии.  Рассмотрим...
 
fxsaber:

请仔细阅读。High[i] 等在哪里?

iCustom 在哪里?你不假思索地几乎复制粘贴了另一篇文章的一部分,结果导致性能失败。事实上,你欺骗用户说这是 MQL4 风格的代价,而不是你的实现。

这里有性能测量结果,表明 MQL4-style 在某些问题上并不比 MQL5 差。在指标方面也可以这样做。

下面是时间序列的实现之一。您可以看到,作者试图强调性能,并略微偏离了 MQL4 风格(这对他来说更方便)(如果您愿意,可以完善这一想法)。


为了更快地适应 MQL5,只留下了系列的 iXXXX 函数,因为它们有更完整的参数(符号、时间范围、移位),很容易取代专业性更强的 High[] 等。我们的目标不是让用户继续无意识地使用 MQL4,而是开始慢慢重写他们的 MQL4 代码。

iCustom 甚至不在计划中--只考虑了标准指标。

关于缓存 - 这绝对不在面向大众的文章中。


补充:顺便说一句,用户的反馈将明确 High[] 和类似函数是否必要,或者我们是否可以不使用 iXXXX 系列。

 
Vladimir Karputov:

我们的目标不是让用户继续无意识地使用 MQL4,而是慢慢地开始重写他的 MQL4 代码。

MQL4-style 是纯粹的 MQL5。它并不比 SB 差。不要在想象中与风车作斗争。你不会与标准库风格作斗争。

iCustom 甚至不在计划中 - 只考虑了标准指标。

关于缓存 - 这绝对不在面向大众的文章中。

在 MT4 与 MT5 关于指标的话题中,标准指标是讨论最少的。几乎所有人都在谈论自定义指标。标准指标是几十年前编写的,已经无可挽回地过时了。在高级 MQL5 中使用古老的指标看起来很奇怪。

文章中不应该解释缓存,但应该做缓存,因为您在 MQL4 风格方面的结论是客观的。

同时访问多个指标时测试速度下降;

 
Vladimir Karputov:

补充:顺便说一句,用户的反馈将显示是否需要 High[] 和类似功能,或者是否可以省去 iXXXX 系列。

做个民意调查,看看结果,什么评论都不用说。即使是 Bid/Ask 变量这样简单的事情也是如此。

 

这篇文章应该叫做 "如何无法编写代码来保存 MQL4 表示法"。

这篇文章的标题应该是 "如何不能编写试图保存 MQL4 表示法的代码",因为这篇文章会让人感到非常恐怖,会泄露句柄(为什么要关闭指标句柄?很多人都会不加思索地复制它。

此外,从指标中提取 1 个值的效率也很低。

我完整地阅读了这篇文章,也看了足够多的代码。