文章 "用于 MQL5 向导的 NRTR 指标和交易模块"

 

新文章 用于 MQL5 向导的 NRTR 指标和交易模块已发布:

在本文中, 我们将分析 NRTR 指标, 并基于此指标创建一个交易系统。我们将会开发一个交易信号模块, 此模块可用来创建基于 NRTR 与附加趋势确认指标相结合的策略。

NRTR (Nick Rypock Trailing Reverse) 指标是由 Konstantin Kopyrkin 提出的。有趣的信息: 尼克·雷普克 (Nick Rypock) 这个名字源自姓氏 Kopyrkin。 

让我们回到指标。这是一个动态价格通道。作者用下图描绘了它的主要思想:

NRTR


作者:Dmitrii Troshin

 
MetaQuotes Software Corp.:

发表文章NRTR 指标和基于该指标的 MQL5 向导交易模块

作者:Dmitrii Troshin


我不明白如何通过 iCustom 访问它...请解释

应该有如下内容

double iCustom (
stringsymbol// 符号 名称
int timeframe// timeframe
stringname// 文件夹/用户 指标 名称
... // 指标 输入参数列表
int mode, // 数据源
int shift// shift
);

特别是在我们的情况下

//+------------------------------------------------------------------+
//| NRTRvolatile|
//+------------------------------------------------------------------+
//iBufferNumber
//0
//1 
//2 - 信号升高
//3 - 信号下降
double indNRTRvolatile(string sSymbol=NULL,
                int tf=PERIOD_M5,
                int period=12,                  //动态周期
                double K=1,                       //比例系数
                int iBufferNumber=0,
                int iShift=0)
{
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   double handle=iCustom(sSymbol,timeframe,"NRTRvolatile",period,K,iBufferNumber,iShift);
   
   if(handle<0)
     {
      Print("未创建 NRTRvolatile 对象:错误",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,0,iShift));
}  


只给出一些无意义的信息,即如果您参考缓冲区 2 或 3,则给出当前价格

 
gedd:

我不明白如何通过 iCustom 访问它...请解释

缓冲区 2、3 包含仅在趋势变化时更新的信号。

支撑位/阻力位在缓冲区 0,1 中 - 我们看到的就是这些线

CopyBuffer()- 有三个重载,但都没有三个参数。

获取缓冲区值的代码变体

void OnStart()
{
double arr[];
int handle =iCustom(Symbol(),0,"NRTRvolatile",12,1);
CopyBuffer(handle,0,0,1,arr);
Print("下运河,arr[0]);
CopyBuffer(handle,1,0,1,arr);
Print("上运河,arr[0]);
CopyBuffer(handle,2,0,1,arr);
Print("发出信号",arr[0]);
CopyBuffer(handle,3,0,1,arr);
Print("信号中断",arr[0]);
}

脚本如下

 
Dmitrii Troshin:

缓冲区 2、3 包含仅在趋势变化时更新的信号。

支撑位/阻力位在缓冲区 0,1 中 - 这些是我们看到的线段

CopyBuffer() - 有三个重载,但都没有三个参数。

获取缓冲区值的代码变体

这是一个脚本


是的,现在更清楚了。

关于CopyBuffer- 它来自 mql4 兼容库,更确切地说,来自 initmql4__1.mqh。

double CopyBufferMQL4(int handle,int index,int shift)
  {
   double buf[];
   switch(index)
     {
      case 0: if(CopyBuffer(handle,0,shift,1,buf)>0)
         return(buf[0]); break;
      case 1: if(CopyBuffer(handle,1,shift,1,buf)>0)
         return(buf[0]); break;
      case 2: if(CopyBuffer(handle,2,shift,1,buf)>0)
         return(buf[0]); break;
      case 3: if(CopyBuffer(handle,3,shift,1,buf)>0)
         return(buf[0]); break;
      case 4: if(CopyBuffer(handle,4,shift,1,buf)>0)
         return(buf[0]); break;
      default: break;
     }
   return(EMPTY_VALUE);
  }
 

也许吧

//+------------------------------------------------------------------+
//| NRTRvolatile|
//+------------------------------------------------------------------+
//iBufferNumber
//0
//1 
//2 - 信号升高
//3 - 信号下降
double indNRTRvolatile(string sSymbol=NULL,
                int tf=PERIOD_M5,
                int period=12,                  //动态周期
                double K=1,                       //比例系数
                int iBufferNumber=0,
                int iShift=0)
{
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   double handle=iCustom(sSymbol,timeframe,"NRTRvolatile",period,K);
   
   if(handle<0)
     {
      Print("未创建 NRTRvolatile 对象:错误",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,iBufferNumber,iShift));

}

 

是否有可能升级 NRTRvolatile,以便在添加箭头时弹出消息框?

 
gedd:

是否有可能升级 NRTRvolatile,以便在添加箭头时弹出消息框?


或许可以在 LongCondition 和 ShortCondition 函数中。

int SignalNRTR::LongCondition(void)
   {
   int idx   =StartIndex();
   if(UpSignal(idx))
   { 
   Alert"Text";   
   return 100;
   }
   else return 0;
   }

添加类似Alert"Text"(提示 文本)的内容。我不知道这是否可行。问题是我的电脑里已经没有这些代码了。去年的所有代码都被我扔到了一边。)所以我无法尝试。我脑子里还在回响着除夕夜的钟声:)

 

在指标本身中,就在这附近

 // 趋势变化 
  
      if(trend>0) Buff_Up[i]=value;
      if(trend<0) Buff_Dn[i]=value;

      if(trend_prev<0  &&  trend>0) 
      {
      Alert("Text");
      Sign_Up[i]=value;
      Buff_Up[i]=0.0;
      }
      if(trend_prev>0 && trend<0)
      {
      Alert("Text");
      Sign_Dn[i]=value;
      Buff_Dn[i]=0.0;
      }
 

includefiles 的路径应更正为

#include <Expert\\ExpertSignal.mqh>
 

两种变体都有可能。右侧变体

#include <Expert\ExpertSignal.mqh>

你可以在 Include\Expert\Signal 文件夹中的另一个模块中看到。