MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 16

 

こんにちは、1枚目から4枚目付近の 大きめのフラクタルの値段を知りたいのですが、教えてください。

 
mila.com:

こんにちは、1枚目から4枚目付近の 大きめのフラクタルの値段を知りたいのですが、教えてください。

void OnTick()
{
   Comment("Min = ",MaxMinFractal(MODE_LOWER, 4),"; Max = ",MaxMinFractal(MODE_UPPER, 4));
}

//===============================================================================================
//--------------------------------- Возвращает Max/Min фрактала --------------------------------+
//===============================================================================================
double MaxMinFractal(int mode=MODE_UPPER, int nf=4) {
string symb=Symbol();
double f=0,min=9999999,max=0;
int kf=0;
  for(int i=3; i<iBars(symb, 0); i++) {
   if(mode==MODE_LOWER){
    f=iFractals(symb, 0, MODE_LOWER, i);
    if(f!=0) {
      kf++;
      if(min>iLow(symb,0,i)) min=iLow(symb,0,i);
      if(kf>=nf) return(min);
     }}
    if(mode==MODE_UPPER){
    f=iFractals(symb, 0, MODE_UPPER, i);
    if(f!=0) {
      kf++;
      if(max<iHigh(symb,0,i)) max=iHigh(symb,0,i);
      if(kf>=nf) return(max);
    }}}
  return(-1);
}
 
mila.com:

こんにちは、1枚目から4枚目付近の 大きめのフラクタルの値段を知りたいのですが、教えてください。

#property strict

void OnStart()
  {
   int i=1,cnt=1;
   double lastupfr=0;

   while(cnt<5)
     {
      double upfr=iFractals(_Symbol,0,1,i);
      if(upfr!=0)
        {
         if(upfr>lastupfr) lastupfr=upfr;
         cnt++;
        }
      i++;
     }
   Comment("Biggest UpFractal = ",lastupfr);
  }
 
Vitaly Muzichenko:
フラクタルの比較ではなく、フラクタルのあるバーまでの最大値を求める...そんなシンプルなものです、ありがとうございました。
 
Vitalie Postolache:

さらに短く )ありがとうございます。

そして、そのカスタマイズ可能なフラクタルから、どうやって最大限のものを選ぶのか?

//|    nl - количество баров слева                                             |
//|    nr - количество баров справа                                            |
//+----------------------------------------------------------------------------+
double GetNearestUpFractal(string sy="0", int tf=0, int nl=2, int nr=2) {
  bool f;
  int  fb, i, nb=-1;

  if (sy=="" || sy=="0") sy=Symbol();
  if (nl<1) nl=1;
  if (nr<1) nr=1;

  fb=nr;
  while (nb<0) {
    fb++;
    f=True;
    for (i=fb; i>fb-nr; i--) {
      if (iHigh(sy, tf, i)<iHigh(sy, tf, i-1)) { f=False; break; }
    }
    if (f) {
      for (i=fb; i<fb+nl; i++) {
        if (iHigh(sy, tf, i)<iHigh(sy, tf, i+1)) { f=False; break; }
      }
      if (f) { nb=fb; break; }
    }
  }

  return(iHigh(sy, tf, nb));
}
 
mila.com:

さらに短く )ありがとうございます。

そして、そのカスタマイズ可能なフラクタルから、どうやって最大限のものを選ぶのか?

//|    nl - количество баров слева                                             |
//|    nr - количество баров справа                                            |
//+----------------------------------------------------------------------------+
double GetNearestUpFractal(string sy="0", int tf=0, int nl=2, int nr=2) {
  bool f;
  int  fb, i, nb=-1;

  if (sy=="" || sy=="0") sy=Symbol();
  if (nl<1) nl=1;
  if (nr<1) nr=1;

  fb=nr;
  while (nb<0) {
    fb++;
    f=True;
    for (i=fb; i>fb-nr; i--) {
      if (iHigh(sy, tf, i)<iHigh(sy, tf, i-1)) { f=False; break; }
    }
    if (f) {
      for (i=fb; i<fb+nl; i++) {
        if (iHigh(sy, tf, i)<iHigh(sy, tf, i+1)) { f=False; break; }
      }
      if (f) { nb=fb; break; }
    }
  }

  return(iHigh(sy, tf, nb));
}
#property strict

void OnStart()
  {
   int i=1,cnt=1;
   double lastupfr=0;

   while(cnt<5)
     {
      double upfr=GetNearestUpFractal(_Symbol,0,2,2);
      if(upfr!=0)
        {
         if(upfr>lastupfr) lastupfr=upfr;
         cnt++;
        }
      i++;
     }
   Comment("Biggest UpFractal = ",lastupfr);
  }
//-----------
//|    nl - количество баров слева                                             |
//|    nr - количество баров справа                                            |
//+----------------------------------------------------------------------------+
double GetNearestUpFractal(string sy="0", int tf=0, int nl=2, int nr=2) {
  bool f;
  int  fb, i, nb=-1;

  if (sy=="" || sy=="0") sy=Symbol();
  if (nl<1) nl=1;
  if (nr<1) nr=1;

  fb=nr;
  while (nb<0) {
    fb++;
    f=True;
    for (i=fb; i>fb-nr; i--) {
      if (iHigh(sy, tf, i)<iHigh(sy, tf, i-1)) { f=False; break; }
    }
    if (f) {
      for (i=fb; i<fb+nl; i++) {
        if (iHigh(sy, tf, i)<iHigh(sy, tf, i+1)) { f=False; break; }
      }
      if (f) { nb=fb; break; }
    }
  }

  return(iHigh(sy, tf, nb));
}
こんな感じ。
 
Alekseu Fedotov:

このように

そこで、最も近いフラクタルの価格を返します。

設定可能な4つのフラクタルの最大値を求めるには どうしたらよいのでしょうか?

 
mila.com:

だから、ニアフラクタルの価格を返す。

設定可能な4つのフラクタルの最大値を求めるには どうしたらよいのでしょうか?

あの...調整可能な4つのフラクタルを選択し、価値のない下位のフラクタルを吹き飛ばすことで、最大値を1つ残す必要があります:)
 
Alexey Kozitsyn:
あの...選択用に設定された4つのフラクタルは、価値のない劣ったフラクタルは吹き飛ばすことで、1つのマキシムカを残す必要があります:)。
どうすればいいのか?
 
mila.com:
どうやるんですか?
ループで。