初学者的问题 MQL5 MT5 MetaTrader 5 - 页 471

 
Mike:
1.所有的比赛。
2.没有这样的参数。
在另一个主题中,有人告诉我,这个问题在MT4中是无法解决的。:(

2.我不知道你在哪里得到了单独窗口中的MA,能够告诉你任何关于参数的信息。但是...如果你从指标 --> 振荡器 --> 振荡器的移动平均线,它有 "应用于:"

因此,如果你试图把另一个指标放在一个单独的窗口中,在某些情况下,它不仅可以应用于ENUM_APPLIED_PRICE 枚举中的标准价格,还可以应用于已经在窗口中的该指标的数据。也许你就是在这种情况下。

3.问题是什么?这三个MAs并不对应于三个类似的(根据你的说法)MAs?所以这不是无法解决的问题,而是无稽之谈。如果它们做得正确,它们一定会匹配。有什么区别呢?是三个独立的MAs有各自的参数,还是同样的三个MAs有同样的参数,但挤在一个有三个缓冲区的指标里?你能看出其中的差别吗?我不知道。如果你看到了,那就看看MAK的计算是否有不一致的地方。

顺便说一下...鳄鱼是一个指标中的三个MAs,每个都有自己的参数。以同样的方式对你的三个独立的MA进行参数配置,它们将重合。但你在一个单独的窗口中拥有所有这些狂欢......。所以......。作为一个例子

 
Mike:
我做了一个3MA(4,9,14)指标,并决定用一个窗口来比较,以检查它的正确性,其中三个指标是MA(4)、MA(9)、MA(14)。我的头发都竖起来了。:)
试着禁用指示器窗口的自我缩放功能,也许一切都会平静下来。
"如果有三个指标--MA(4)、MA(9)、MA(14)",指标窗口是由附加在这个窗口的第一个指标来自我缩放的。在你的情况下,可能是MA(4)。
 

你能不能给我一个设计,从上层时间框架获得内置指标的值,但在这个时间框架内。

例如,当前图表是15分钟,我需要得到指标的值,按天计算,但45分钟前,如何做到这一点?

这里有一个简单的算法,可以返回指标的值,但只针对当前的条形图。

double iDelta(int Variant,int n,int TF,int index)

  {

   double Fibo=0;

   if(Variant==1) Fibo=0.236;

   if(Variant==2) Fibo=0.382;

   if(Variant==3) Fibo=0.5;

   if(Variant==4) Fibo=0.618;

   if(Variant==5) Fibo=0.764;

   if(Variant==6) Fibo=1;

   if(Variant==7) Fibo=1.236;

   if(Variant==8) Fibo=1.382;

   if(Variant==9) Fibo=1.5;

   if(Variant==10) Fibo=1.618;

   if(Variant==11) Fibo=2.0;

   if(Variant==12) Fibo=2.236;

   if(Variant==-1) Fibo=-0.236;

   if(Variant==-2) Fibo=-0.382;

   if(Variant==-3) Fibo=-0.5;

   if(Variant==-4) Fibo=-0.618;

   if(Variant==-5) Fibo=-0.764;

   if(Variant==-6) Fibo=-1;

   if(Variant==-7) Fibo=-1.236;

   if(Variant==-8) Fibo=-1.382;

   if(Variant==-9) Fibo=-1.5;

   if(Variant==-10) Fibo=-1.618;

   if(Variant==-11) Fibo=-2.0;

   if(Variant==-12) Fibo=-2.236;

   return ( NormalizeDouble(iOpen(Symbol(),TF,index)+iATR(Symbol(), TF, n, index+1)*Fibo,Digits) );

  } 

 
Leo59:
试着禁用指示器窗口的自我缩放功能,也许事情会平静下来。
"其中三个指标是MA(4)、MA(9)、MA(14)",指标窗口是由附在该窗口的第一个指标自我缩放的。在你的情况下,可能是MA(4)。
你在哪里禁用这种自我扩展功能?
 
Artyom Trishkin:

2.我不知道你在哪里得到了单独窗口中的MA,能够告诉你任何关于参数的信息。但是...如果你从指标 --> 振荡器 --> 振荡器的移动平均线,它有 "应用于:"

因此,如果你试图把另一个指标放在一个单独的窗口中,在某些情况下,它不仅可以应用于ENUM_APPLIED_PRICE 枚举中的标准价格,还可以应用于已经在窗口中的该指标的数据。也许你就是在这种情况下。

3.问题是什么?这三个MAs并不对应于三个类似的(根据你的说法)MAs?所以这不是无法解决的问题,而是无稽之谈。如果它们做得正确,它们一定会匹配。有什么区别呢?是三个独立的MAs有各自的参数,还是同样的三个MAs有同样的参数,但挤在一个有三个缓冲区的指标里?你能看出其中的差别吗?我不知道。如果你确实看到了,那就寻找MAKs计算中的差异。

顺便说一下...鳄鱼是一个指标中的三个MAs,每个都有自己的参数。配置参数的方式与你的三个独立的MA相同,它们将匹配。但你在一个单独的窗口中拥有所有这些狂欢......。所以......。作为一个例子

Artyom,"申请" - 只有一个价格列表。MA的计算是正确的,所有三条线都是通过在有3MA指标的窗口中加入一个周期为4,然后是9,然后是14的单一指标来检查的。在每一种情况下,单一指标都与3MA指标的对应线相吻合
 
Mike:
Artyom,"申请" - 只有一个价格列举。MA的计算是正确的,所有三条线都经过检查,在3MA指标窗口中加入一个周期为4,然后是9,然后是14的单一指标。在每一种情况下,单一指标都与3MA指标的相应线相吻合
那么问题出在哪里呢?我认为你不喜欢不同窗口中线条的视觉错位。按Ctrl+D,将鼠标移到指标线上,在数据窗口中查看它们是否相符...
 
-Aleks-:

你能不能给我一个设计,从上层时间框架获得内置指标的值,但在这个时间框架内。

例如,当前图表是15分钟,我需要得到指标的值,按天计算,但45分钟前,如何做到这一点?

这里有一个简单的算法,可以返回指标的值,但只针对当前的条形图。

double iDelta(int Variant,int n,int TF,int index)

  {

   double Fibo=0;

   if(Variant==1) Fibo=0.236;

   if(Variant==2) Fibo=0.382;

   if(Variant==3) Fibo=0.5;

   if(Variant==4) Fibo=0.618;

   if(Variant==5) Fibo=0.764;

   if(Variant==6) Fibo=1;

   if(Variant==7) Fibo=1.236;

   if(Variant==8) Fibo=1.382;

   if(Variant==9) Fibo=1.5;

   if(Variant==10) Fibo=1.618;

   if(Variant==11) Fibo=2.0;

   if(Variant==12) Fibo=2.236;

   if(Variant==-1) Fibo=-0.236;

   if(Variant==-2) Fibo=-0.382;

   if(Variant==-3) Fibo=-0.5;

   if(Variant==-4) Fibo=-0.618;

   if(Variant==-5) Fibo=-0.764;

   if(Variant==-6) Fibo=-1;

   if(Variant==-7) Fibo=-1.236;

   if(Variant==-8) Fibo=-1.382;

   if(Variant==-9) Fibo=-1.5;

   if(Variant==-10) Fibo=-1.618;

   if(Variant==-11) Fibo=-2.0;

   if(Variant==-12) Fibo=-2.236;

   return ( NormalizeDouble(iOpen(Symbol(),TF,index)+iATR(Symbol(), TF, n, index+1)*Fibo,Digits) );

  } 

我无法回答这个问题,但这个功能可以简化并大大加快。
在初始化指标时,创建一个静态数组

double arrFibo[13] = {0.0, 0.236, 0.382, ..., 2.236};

iDelta()中的所有if都可以被替换为。

if (Variant>0)
    Fibo =  arrFibo[ Variant];
else
    Fibo = -arrFibo[-Variant];

 
Mike:

我无法回答这个问题,但这个功能可以简化并大大加快。
在指标的初始化过程中,创建一个静态数组

double arrFibo[13] = {0.0, 0.236, 0.382, ..., 2.236};

iDelta()中的所有if都可以被替换为。

if (Variant>0)
    Fibo =  arrFibo[ Variant];
else
    Fibo = -arrFibo[-Variant];

谢谢,我会试试的,也许会更好。

 
Mike:

我无法回答这个问题,但这个功能可以简化并大大加快。
在指标的初始化中,创建一个静态数组

double arrFibo[13] = {0.0, 0.236, 0.382, ..., 2.236};

iDelta()中的所有ifs都可以被替换成。

if (Variant>0)
    Fibo =  arrFibo[ Variant];
else
    Fibo = -arrFibo[-Variant];

我照着你写的做了,但它没有起到应有的作用--我还不知道到底是哪里出了问题--我需要打印....。

我不明白这根绳子的意思。

else           Fibo = -arrFibo[-Variant];

那么我们得到的是什么呢? 我们要求的是数组的减号还是什么?
 
-Aleks-:

我按照你写的方法做了,但它并不像它应该的那样工作--我还不知道哪里出了问题--我需要打印....。

我不明白那条线的意思。

else           Fibo = -arrFibo[-Variant];

结果是我们请求的是数组的减数索引还是什么?
在Variant为负数的情况下,表达式-Variant给出一个正数的索引,用于数组的获取。
在同样的情况下,我们需要负的Fibo值,所以-arrFibo。