[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 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) and 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 でこの関数を呼び出し、最後のフラクタルが見つかります。必要な時間だけループ本体で、次に見つかったフラクタルが必要な条件に一致するかどうかを調べ、一致する場合はループを抜ける。解析の結果、必要な2つのフラクタルのバーナンバーが得られ、それらを使って好きなことをすることができます。

 
artmedia70:

この機能で検索してみてください。

この関数は、フラクタル素片のバー番号を返します。まず、パラメータ nf = 0 でこの関数を呼び出し、最後のフラクタルが見つかります。必要な時間だけループ本体で、次に見つかったフラクタルが必要な条件に一致するかどうかを調べ、一致する場合はループを抜ける。解析の結果、必要な2つのフラクタルのバーナンバーが得られ、それらを使って好きなことをすることができます。


ありがとうございました)これからやってみようと思います。
 
Vinin:


テスターで、それともデモで?

テスターでは、他の計器のポイントは0になります。


テスターにあった、、、。まだ使う機会がないのですが、いろいろと問題があるようです。そこで、結果的に自分のトロールのコードにいろいろと工夫をして、KimIVのトロールペアモニタリング機能を取り入れたのです。これで、デモではすべて動作するようになりました ))

皆さん、ご協力ありがとうございます!皆さんの解説がとても参考になります。

 

問題は解決したようですが、疑問が残ります...。

再利用のために変数の初期化を解除する方法は?

 

変数を初期化すると、RAMの領域が確保されるだけなのに、なぜ再代入するのでしょうか?変数をゼロに戻すだけで、何度でも使える。実のところ、何が問題なのでしょうか?なぜ変数を初期化するのか?ただ、意味がないんです。

 
ToLik_SRGV:

なぜ変数を初期化するのか?



の場合の条件

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

さあ、どうする

それ以外の場合は

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

をする。

ポイントは、変数やたくさんの条件、カウンターを掛けることではありません。