[存档!]任何菜鸟问题,为了不给论坛添乱。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 2. - 页 125

 
pyatka__ASD:
你能告诉我是否有人有一个高低Z字形极值连接的软件。谢谢

我不知道你需要哪种连接,但...这就是我在EA中确定哪一个之字形极值的方法--低或高,希望你能找到你需要的东西。

//-----------------------------------------------------------------------------------------------------------------   
   if (op==OP_BUY)
      {
         for (m=1; m<=CalcBarsLimit; m++)                      // Найдём первый перелом ЗЗ слева от первого бара
            {
               zz=iCustom(sy, tf, "ZigZag", dp, dv, bs, 0, m); // Берём данные 0 буфера ЗЗ с бара m
               if (zz!=0 &&                                    // Если первый экстремум верхний
                  NormalizeDouble(zz, dg)==NormalizeDouble(iCustom(sy, tf, "ZigZag", dp, dv, bs, 1, m), dg))
                     return(false);                            // Валим отсюда
               else if (zz!=0 &&                               // Если первый экстремум нижний
                        NormalizeDouble(zz, dg)==NormalizeDouble(iCustom(sy, tf, "ZigZag", dp, dv, bs, 2, m), dg)) 
                  {
                     if (MathRound((KLevel-zz)/pt)>=DistanceMIN &&         // Если расстояние от ZZ до KLevel ...
                         MathRound((KLevel-zz)/pt)<=DistanceMAX)           // ... в заданных пределах
                        {
                           if (Open[1]<KLevel && 
                               Close[1]>KLevel &&
                               pa>KLevel)
                              {
                                 Fibo0_PriceB=zz;                                   // Сохраним цену излома ZZ
                                 Fibo23_PriceB=pa;                                  // Сохраним цену 23 фибы
                     
                                 nmKLB=DoubleToStr(Time[m], 4);                     // имя метки
                                 SetArrow(5, DeepSkyBlue, nmKLB, Time[m], zz, 1);   // Отмечаем излом ЗЗ на графике
                                 return(true);
                              }
                        }       
                  }
            }
      }
//-----------------------------------------------------------------------------------------------------------------   
   if (op==OP_SELL)
      {
         for (m=1; m<=CalcBarsLimit; m++)                      // Найдём первый перелом ЗЗ слева от первого бара
            {
               zz=iCustom(sy, tf, "ZigZag", dp, dv, bs, 0, m); // Берём данные 0 буфера ЗЗ с бара m
               if (zz!=0 &&                                    // Если первый экстремум нижний
                  NormalizeDouble(zz, dg)==NormalizeDouble(iCustom(sy, tf, "ZigZag", dp, dv, bs, 2, m), dg))
                     return(false);                            // Валим отсюда
               else if (zz!=0 &&                               // Если первый экстремум верхний
                        NormalizeDouble(zz, dg)==NormalizeDouble(iCustom(sy, tf, "ZigZag", dp, dv, bs, 1, m), dg)) 
                  {
                     if (MathRound((zz-KLevel)/pt)>=DistanceMIN &&         // Если расстояние от ZZ до KLevel ...
                         MathRound((zz-KLevel)/pt)<=DistanceMAX)           // ... в заданных пределах
                        {
                           if (Open[1]>KLevel && 
                               Close[1]<KLevel &&
                               pb<KLevel)
                              {
                                 Fibo0_PriceS=zz;                                // Сохраним цену излома ZZ
                                 Fibo23_PriceS=pb;                               // Сохраним цену 23 фибы
                     
                                 nmKLS=DoubleToStr(Time[m], 4);                  // имя метки
                                 SetArrow(5, BurlyWood, nmKLS, Time[m], zz, 1);  // Отмечаем излом ЗЗ на графике
                                 return(true);
                              }
                        }       
                  }
            }
      }

   return(false);
}
//-------------------------------------------------------------------------------

ZS...代码很粗糙,没有经过优化。我希望你知道,最好是减去两个归一化的数值,然后检查结果是否为零...

 
alsu:

你可以。返回到参数。

如果在start里面声明了一个变量,你能把它分配给return_value1 吗?
 
eddy:
如果在start里面声明了一个变量,你可以把它分配给return_value1

是的,这被称为通过引用传递参数。如果一个函数是正常声明的,它的调用会导致所有的变量,作为形式参数传递,被复制到函数的局部变量中并被处理。当参数以引用方式传递时,不进行复制,也就是说,函数对其原件而不是对其副本进行操作。因此,用这些参数在功能代码中所作的所有改变,在从功能代码返回后仍然有效。

要通过引用传递一个参数,在函数声明中通过在所需参数的标识符前加上&符号来表明这种方法。

 

例子(编译为脚本并检查)。

void Func1(double a)
{
   a=a*2;
}

void Func2(double &a)
{
   a=a*2;
}

int start()
{
   double a=5;

   Func1(a);
   
   Print(a); //выведет 5

   Func2(a);
   
   Print(a); //выведет 10
}
 
eddy:
5*5=5?))
不是乘以5,而是乘以2。在第一种情况下,参数a是 "按值 "传递的,它的内容在退出函数后不会被保存,在第二种情况下,它是按引用传递的(double &a),所以改变的值,即5*2=10在退出Func2函数后将被包含在变量a中。
 

酷:)

这个怎么样?

double a=5;

   Print(Func2(a));
 
eddy:


这个怎么样?

那将是10个。顺便说一下,检查比询问更快)))。
 

电脑正忙于计算,所以我暂时无法亲自检查。

有一段这样的代码。

   if(DecreaseFactor>0){
      for(int cnt=OrdersHistoryTotal()-1; cnt>=0; cnt--){
        if(OrderSelect(cnt,SELECT_BY_POS,MODE_HISTORY)){ 
          if(OrderMagicNumber()==Magic){
            if(OrderSymbol()==Symbol()){
              if(OrderType()<2){ 
                  if(OrderProfit()>0) break;
                  if(OrderProfit()<0) losses++;
       } } } } } 
      if(losses>1) Lot=NormalizeDouble(Lot-Lot*losses/DecreaseFactor,1);
    }

谷歌已经找到了这个代码的几个重复,所以我得出结论,它是有效的。

然而,这一行

Lot=NormalizeDouble(Lot-Lot*losses/DecreaseFactor,1);

是令人困惑的。

如果DecreaseFactor=3, 损失=3,那么根据公式我们可以得到 Lot=0!!!

如果损失>3, 我们会得到Lot<0!!!

这有可能吗?

 
那么,什么是损失和 减少因素 呢?
 
eddy:

酷:)

这个怎么样?

它不会做任何事情。函数Funk2--不返回任何值,它是无效的