[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 720

 
artmedia70:
我看到你自己已经在做决定了
我正在做出决定...但这就像一只狗:我明白我所理解的,但我不能说出来,也就是说,我不能用代码表示它)。
也许是高温让我的大脑融化了)。
 
Shuba:
我正在接近解决方案...这就像一只狗:我明白我所理解的,但我不能说出来,也就是说,我不能用代码表示它)。
也许是高温让我的大脑融化了)。
你是如何寻找分形的?
 
artmedia70:
如何搜索分形?

我使用ZIGZAG-FRACTALS指标和这个函数寻找分形。

void GetSignal()
  {
  int UpCount = 0, DnCount = 0;                                        // счетчик пиков ЗЗ
  int i = 0;                                                              // счетчик баров
  double ZZFirst = 0;                            // Значение первого найденного экстремума
  ArrayInitialize(ZZVUp, 0);                       // Значения верхних экстремумов зигзага
  ArrayInitialize(ZZVDn, 0);                         //Значения нижних экстремумов зигзага
  
  while(i < Bars && (UpCount < 2 || DnCount < 2))
    {
    double ZZCur = iCustom(NULL,0,"BW ZIGZAG-FRACTALS_2",0,i);
    if(ZZCur != 0)                                                   // найден экстремум
      {
      if(ZZFirst != 0)                             // Это не первый найденный экстремум
        {
        if(ZZCur == High[i] && UpCount < 2)
          {
          ZZVUp[UpCount] = ZZCur;
          ZZNUp[UpCount] = i;
          UpCount++;
          }         
          if(ZZCur == Low[i] && DnCount < 2)
            {
            ZZVDn[DnCount] = ZZCur;
            ZZNDn[DnCount] = i;
            DnCount++;
            }         
        }
      else
        ZZFirst = ZZCur; 
      }
    i++;
    } 
  if(i == Bars) return;                           // Последний посчитанный бар запоминаем
  
  }
 

现在我在这两行中加入了:if(ZZCur == High[i] && UpCount < 2)和 if(ZZCur == Low[i] && DnCount < 2) 检查下一个比第一个发现的分形更高或更低的分 形。

我们有以下几句话

if(ZZCur == High[i]&& ZZCur > ZZFirst&& UpCount < 2) and

if(ZZCur == Low[i]&& ZZCur < ZZFirst&& DnCount < 2)

但最终搜索结果却有些不充分 :(

在图片中,一条粗的白线表示它应该是这样的,一条细的绿线表示它是这样的...


 
Shuba:

我使用ZIGZAG-FRACTALS指标,用这个函数搜索分形。

试试用这个功能搜索。

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 13.08.2008                                                     |
//|  Описание : Возвращает номер бара фрактала по его номеру.                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    tf - таймфрейм                       (    0       - текущий ТФ)         |
//|    nf - номер фрактала                  (    0       - последний)          |
//+----------------------------------------------------------------------------+
int GetFractalBar(string sy="0", int tf=0, int nf=0) {
  if (sy=="" || sy=="0") sy=Symbol();
  double f=0;
  int    i, k=iBars(sy, tf), kf;

  for (i=2; i<k; i++) {
    f=iFractals(sy, tf, MODE_LOWER, i);
    if (f!=0) {
      kf++;
      if (kf>nf) return(i);
    }
    f=iFractals(sy, tf, MODE_UPPER, i);
    if (f!=0) {
      kf++;
      if (kf>nf) return(i);
    }
  }
  Print("GetFractalBar(): Фрактал не найден");
  return(-1);
}

该函数返回分形的条数。首先你调用它,参数nf=0--最后一个分形将被找到,然后你在循环中调用这个函数,其中nf=周期计数器从1到......。只要有必要就可以。在循环体中,检查下一个发现的分形是否符合你需要的标准,如果符合,则退出循环。在分析之后,你将得到你所需要的两个分形的条形号码,并对它们做你想做的事。

 
artmedia70:

试试用这个功能搜索。

该函数返回分形的条数。首先你调用它,参数nf=0--最后一个分形将被找到,然后你在循环中调用这个函数,其中nf=周期计数器从1到......。只要有必要就可以。在循环体中,检查下一个发现的分形是否符合你需要的标准,如果符合,则退出循环。在分析之后,你将得到你所需要的两个分形的条形号码,并对它们做你想做的事。


谢谢你)我现在要去试试。
 
Vinin:


在测试器中还是在演示中?

在测试器中,其他仪器上的点将是0


它是在测试器中,...我还没有机会使用它,但我对它有很多问题。所以,结果是,我的拖网代码出现了很多麻烦,采取了KimIV的拖网对监测功能。现在一切都在演示中运行了 ))

谢谢大家的帮助,你们的解释对我很有帮助。

 

似乎已经解决了问题,但问题仍然存在......

如何将一个变量去初始化以便重复使用?

 

你不能这样做,当你初始化一个变量时,它只是分配了一个RAM区域,那么为什么要重新分配?只要把这个变量重置为零,就可以随意使用。事实上,问题是什么呢?为什么要对一个变量进行去初始化?这实在是说不通。

 
ToLik_SRGV:

为什么要对一个变量进行去初始化?



该条件如果

for(int a=0;a<8;a++)

在这里,我们做一些事情

否则,如果另一个条件

for(int a=0;a<8;a++)

做点别的事。

关键是不要把变量、大量的条件和计数器相加。

原因: