[アーカイブ!】どんなルーキーの質問でも、フォーラムを散らかさないように。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 2. - ページ 125

 
pyatka__ASD:
どなたか、ハイとローのジグザグエクストリーム接続のソフトをお持ちの方、教えていただけませんか?感謝

どの接続が必要なのか分かりませんがこのように、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...コードが荒く、最適化されていない。正規化した2つの値を引き算して、その結果が0かどうかをチェックするのが良いということが分かっていれば良いのですが...。

 
alsu:

できます。パラメータに戻る。

startの内部で変数が宣言されている場合、return_value 1に代入することができるのでしょうか?
 
eddy:
startの内部で変数が宣言されている場合、return_value 1に代入することができるのでしょうか?

これは、参照渡しと 呼ばれます。関数が正常に宣言されている場合、その関数を呼び出すと、形式パラメータとして渡されたすべての変数が関数のローカル変数にコピーされ、処理されます。パラメータが参照渡しされる場合、コピーは行われない。つまり、関数はそのコピーではなく、オリジナルで動作する。従って、これらのパラメータを使用してファンクションコード内で行った変更は、ファンクションコードから戻った後も有効です。

パラメータを参照渡しするには、関数宣言の中で、必要なパラメータの識別子の前に&記号を付けて、この方法を指示します。

 

例(スクリプトとしてコンパイルし、チェックする。)

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 は「値で」渡され、その内容は関数の終了後に保存されません。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);
    }

Googleはこのコードの繰り返しをいくつか見つけているので、動作すると結論付けています。

ただし、このライン

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

は紛らわしい。

DecreaseFactor=3、 Loss= 3とすると、計算式によるとLot=0となります !!!

ロス> 3の場合、Lot<0に なる !

可能な のでしょうか?

 
では、損失と DecreaseFactorは 何でしょうか?
 
eddy:

かっこういい)

これはどうでしょう?

何もしないFunk2 関数 - 値を返さない。