给MQL专家的一个问题 - 页 16

 
artmedia70:

有这样一个符号吗?

非常感谢!我永远不会发现这样的故障......他们在教科书中写了很多废话,而我只是不看就照抄...
 

能否请你告诉我错误在哪里?为什么结果会不同?

//+------------------------------------------------------------------+
//|                                                       TestFr.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   double FrUpz=0;
   double FrUp1 = GetFractal("0", 0, 1, MODE_UPPER);
   double FrUp2 = GetFractal("0", 0, 2, MODE_UPPER);
   double FrUp3 = GetFractal("0", 0, 3, MODE_UPPER);
   Print("# FrUp1=",FrUp1);
   Print("# FrUp2=",FrUp2);
   Print("# FrUp3=",FrUp3);
   for(int z=1;z<=3;z++)
      {
       FrUpz = GetFractal("0", 0, z, MODE_UPPER);
       Print("z=",z," FrUpz=",FrUpz);
      } 
  }
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru  & khorosh        |
//+----------------------------------------------------------------------------+
//|  Версия   : 08.02.2009                                                     |
//|  Описание : Возвращает фрактал по его номеру.                              |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    tf - таймфрейм                       (    0       - текущий ТФ)         |
//|    nf - номер фрактала                  (    0       - последний)          |
//+----------------------------------------------------------------------------+
double GetFractal(string sy="0", int tf=0, int nf=0, int mode=MODE_UPPER) {
  if (sy=="" || sy=="0") sy=Symbol();
  double f=0;
  int    i, k=iBars(sy, tf), kf;
  for (i=3; i<k; i++) {
    if(mode==MODE_LOWER){
    f=iFractals(sy, tf, MODE_LOWER, i);
    if (f!=0) {
      kf++;
      if (kf>nf) return(iLow(sy,tf,i));
     } 
    }
    if(mode==MODE_UPPER){
    f=iFractals(sy, tf, MODE_UPPER, i);
    if (f!=0) {
      kf++;
      if (kf>nf) return(iHigh(sy,tf,i));
      }
    }
  }
  Print("GetFractalBar(): Фрактал не найден");
  return(-1);
}

结果。

2014.02.17 19:56:38.828 TestFr EURUSD,M15: z=3 FrUpz=1.37083

2014.02.17 19:56:38.828 TestFr EURUSD,M15: z=2 FrUpz=1.37083

2014.02.17 19:56:38.828 TestFr EURUSD,M15: z=1 FrUpz=1.37104

2014.02.17 19:56:38.828 TestFr EURUSD,M15: # FrUp3=1.37056

2014.02.17 19:56:38.812 TestFr EURUSD,M15: # FrUp2=1.37162

2014.02.17 19:56:38.812 TestFr EURUSD,M15: # FrUp1=1.37083

 
khorosh:

能否请你告诉我错误在哪里?为什么结果会不同?

结果。

2014.02.17 19:56:38.828 TestFr EURUSD,M15: z=3 FrUpz=1.37083

2014.02.17 19:56:38.828 TestFr EURUSD,M15: z=2 FrUpz=1.37083

2014.02.17 19:56:38.828 TestFr EURUSD,M15: z=1 FrUpz=1.37104

2014.02.17 19:56:38.828 TestFr EURUSD,M15: # FrUp3=1.37056

2014.02.17 19:56:38.812 TestFr EURUSD,M15: # FrUp2=1.37162

2014.02.17 19:56:38.812 TestFr EURUSD,M15: # FrUp1=1.37083


为了便于控制,对该函数稍作修改,以返回条形号码

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru  & khorosh        |
//+----------------------------------------------------------------------------+
//|  Версия   : 08.02.2009                                                     |
//|  Описание : Возвращает фрактал по его номеру.                              |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    tf - таймфрейм                       (    0       - текущий ТФ)         |
//|    nf - номер фрактала                  (    0       - последний)          |
//+----------------------------------------------------------------------------+
double GetFractal(string sy="0",int tf=0,int nf=0,int mode=MODE_UPPER) 
  {
   if(sy=="" || sy=="0") sy=Symbol();
   double f=0;
   int    i,k=iBars(sy,tf),kf;
   for(i=3; i<k; i++) 
     {
      if(mode==MODE_LOWER)
        {
         f=iFractals(sy,tf,MODE_LOWER,i);
         if(f!=0) 
           {
            kf++;
//            if(kf>nf) return(iLow(sy,tf,i));
               if(kf>nf) return(i);
           }
        }
      if(mode==MODE_UPPER)
        {
         f=iFractals(sy,tf,MODE_UPPER,i);
         if(f!=0) 
           {
            kf++;
//            if(kf>nf) return(iHigh(sy,tf,i));
               if(kf>nf) return(i);
           }
        }
     }
   Print("GetFractalBar(): Фрактал не найден");
   return(-1);
  }
//+------------------------------------------------------------------+

结果

2014.02.17 21:45:57.409 TestFr GBPUSD,H1: z=3 FrUpz=9.0

2014.02.17 21:45:57.409 TestFr GBPUSD,H1: z=2 FrUpz=9.0

2014.02.17 21:45:57.409 TestFr GBPUSD,H1: z=1 FrUpz=13.0

2014.02.17 21:45:57.409 TestFr GBPUSD,H1: # FrUp3=24.0

2014.02.17 21:45:57.409 TestFr GBPUSD,H1: # FrUp2=17.0

2014.02.17 21:45:57.409 TestFr GBPUSD,H1: # FrUp1=13.0


 

增加了所有变量的明确初始化

double GetFractal(string sy="0",int tf=0,int nf=0,int mode=MODE_UPPER) 
  {
   if(sy=="" || sy=="0") sy=Symbol();
   double f=0;
   int    i=0,k=iBars(sy,tf),kf=0;
   for(i=3; i<k; i++) 
     {
      if(mode==MODE_LOWER)
        {
         f=iFractals(sy,tf,MODE_LOWER,i);
         if(f!=0) 
           {
            kf++;
//            if(kf>nf) return(iLow(sy,tf,i));
               if(kf>nf) return(i);
           }
        }
      if(mode==MODE_UPPER)
        {
         f=iFractals(sy,tf,MODE_UPPER,i);
         if(f!=0) 
           {
            kf++;
//            if(kf>nf) return(iHigh(sy,tf,i));
               if(kf>nf) return(i);
           }
        }
     }
   Print("GetFractalBar(): Фрактал не найден");
   return(-1);
  }

结果

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: z=3 FrUpz=24.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: z=2 FrUpz=17.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: z=1 FrUpz=13.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: # FrUp3=24.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: # FrUp2=17.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: # FrUp1=13.0

需要向开发商展示。 职能部门有些不对劲

 

我注意到,该代码

Print(ChartID()," ",ChartGetInteger(ChartID(),CHART_HEIGHT_IN_PIXELS,0))

放在指标中会产生奇怪的结果。例如,如果打开图表标签,指标已被重置,主图表窗口的高度结果是正确的。

然而,只要我离开 "本地 "图表,结果就会因为某种原因变成等于75(当然,在其他情况下,结果可能不同),但图表ID值保持不变。

当我回到 "本地 "图形时,高度值变得正确。

恳请开发者和 "知情者 "解释一下这里的特殊性是什么。这真的是它的本意吗!?我不相信!

如果是这种情况,请提出代码,当任何标签打开时,为本地图表提供正确的高度值。
 
Vinin:

增加了所有变量的明确初始化

结果

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: z=3 FrUpz=24.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: z=2 FrUpz=17.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: z=1 FrUpz=13.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: # FrUp3=24.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: # FrUp2=17.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: # FrUp1=13.0

需要向开发商展示。 职能部门有些不对劲

谢谢你对我的问题的关注。结果发现,原因只是因为函数中的两个变量没有被明确初始化。我必须查看金的所有功能,并修复它。
 

下午好。

EA代码涉及I.Kim的f-i。这涉及到调用 "安装 "的库。提供了 "外部aremeters "之后的代码。

//-- Подключаемые модули --
#include <stderror.mqh>
#include <stdlib.mqh>

然而,意外地(在同样的mt4更新后--EA不工作),我注意到在 "EA属性 "窗口的 "依赖性 "选项卡中有一个奇怪的条目。

你能告诉我这个错误是什么意思以及如何解决吗(如果这两个库仍然存在于Include文件夹中)?Libraries文件夹与此有什么关系?

 
Rita:

下午好。

EA代码涉及I.Kim的f-i。这涉及到调用 "安装 "的库。提供了 "外部aremeters "之后的代码。

然而,意外地(在同样的mt4更新后--EA不工作),我注意到在 "EA属性 "窗口的 "依赖性 "选项卡中有一个奇怪的条目。

你能告诉我这个错误是什么意思以及如何解决吗(如果这两个库仍然存在于Include文件夹中)?Libraries文件夹与此有什么关系?


stderror.mqh从stdlib.ex4库中导入 ErrorDescription函数,该库位于Libraries文件夹中,与源代码一起。检查你那里是否有这个文件,如果没有,从任何其他终端获得它。
 

两个文件夹(Incloud和Libraries)都包含stdlib源。为了以防万一,我从Incloud文件夹中添加-复制了。

但在 "依赖 "选项卡中仍然显示上述错误。也许以某种方式改变这些函数的调用。而不是。

//-- Подключаемые модули --
#include <stderror.mqh>
#include <stdlib.mqh>

以其他方式设置呼叫?

还是说现在在最新版本的mt4中无法使用I.Kim的功能?

 
Rita:

两个文件夹(Incloud和Libraries)都包含stdlib源。为了以防万一,我从Incloud文件夹中添加-复制了。

但在 "依赖 "选项卡中仍然显示上述错误。也许以某种方式改变这些函数的调用。而不是。

以其他方式设置呼叫?

还是说现在在最新版本的mt4中无法使用I.Kim的功能?


确保在Libraries文件夹下有stdlib.ex4可执行文件,尽管它似乎不是Kim的,是交货时的标准文件。


另外,看看Kim函数从中获取了什么,并找出问题所在。