静的配列 ? - ページ 2

 
しかし、EMPTY_VALUEと その使い方について知らなかったので、抵抗値とサポート値が前の指標まで同じままなので、値の変化を検出するためにループバックしてみようと思っていたのです。

とにかく、ありがとうございます!もう少し読み込んでみます。)

私は物事を学ぶのに時間がかかりすぎているようです。他の人のコードをもっと読んで、より良いデザインのアイデアを得るためにそれらを理解しようとする必要があると思います。

回答ありがとうございました。
 
RaptorUK:
フラクタルの価格値を保持する 2 つのバッファ (配列) があります ... val1 と val2 です。 もし以前のフラクタル値を見つけたいなら、単純にループしてシフト値を増加させ、EMPTY_VALUE (https://docs.mql4.com/customind/SetIndexEmptyValue) でないものを見つけるまでバッファの値をチェックすることになります。
さて、ここでちょっと考えてみました。

つまり、v1[i] と v2[i] を 1++ のコードでループバックすることができます。

私はval1>0を理解していないそれは常にHigh[0]を除いて0よりも大きいのではありませんか?

そして、なぜval1は、すべてのHigh[i] 'sではなく、高いフラクタルに印を付けるのですか AHHH 私はそれを行うためにif文が指示するからだと思いますHigh[i] sを参照してください。

では、もう少し考えてみましょう。

val1はフラクタルですが、v1[i]はフラクタルHighのものだけです。

ということは、v1[i] 1++ をループさせて、EMPTY_VALUE の前のポイントに戻せば、これが前の High[i] フラクタルになりますね。

私は近づいているのでしょうか?
 
Agent86:
OK、ここでちょっと考えてみてください。

val1はフラクタルですが、v1[i]はフラクタル高値のものだけです。

ということは、v1[i] 1++をループさせて、EMPTY_VALUEの前のポイントに行き、これが前のHigh[i]フラクタルになるわけです。

私は近づいているのでしょうか?
正解...... :-)
 
RaptorUK:
正解 ... ... :-)
ふぅーー心配したよ

ありがとうございます
 
EMPTY_VALUEに0を入れると、0が連続的に表示されるので、それは正しくありません...多分それは正しいのですが、私の望む効果ではありません。

とにかく。

//+------------------------------------------------------------------+
//|                                                  Agent86_5min.mq4 |
//|                                                    Unfinished POS |
//|                                    
//+------------------------------------------------------------------+
#property copyright "Unfinished POS by Agent86"


//---- input parameters
extern double    TakeProfit=20.0;
extern double    Lots=0.1;
extern double    StopLoss=15.0;
extern int MagicNumber=123486;

double v1[];
double v2[];
double val1;
double val2;

//++++ These are adjusted for 5 digit brokers.

int     pips2points;    // slippage  3 pips    3=points    30=points
double  pips2dbl;       // Stoploss 15 pips    0.0015      0.00150
int     Digits.pips;    // DoubleToStr(dbl/pips2dbl, Digits.pips)

    // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   if (Digits == 5 || Digits == 3)
   {    // Adjust for five (5) digit brokers.
      pips2dbl    = Point*10; pips2points = 10;   Digits.pips = 1;
   } 
   else 
    {    
      pips2dbl    = Point;    pips2points =  1;   Digits.pips = 0; 
    }
    // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl
     
   
    
//---- 

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
   
    
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  
  
   double   faster = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1), //MODE_MAIN
            slower = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); //MODE_SIGNAL
            
   int i=Bars;         
   
   while(i>=0)
     {
      val1=iFractals(NULL, 0, MODE_UPPER,i);
      if (val1 > 0) v1[i]=High[i];
      else          v1[i]=v1[i+1];

      val2=iFractals(NULL, 0, MODE_LOWER,i);
      if (val2 > 0) v2[i]=Low[i];
      else          v2[i]=v2[i+1];
      
      i--;
     }
   
    for(val1=High[i]; v1[i] == EMPTY_VALUE ;i++)
      {
      Print (v1[i]);
      } 
  
//----
            
                       
            

           

//---- 

 
                    
        

                
   return(0);
  }    

//+------------------------------------------------------------------+
私は、forループが信号を1つだけ戻して、信号レベルを表示してくれると思ったのですが、何も表示されないか、0が表示されました。

数日間考え、いろいろなことを試しましたが、3番目のバッファを追加したり、チャート上の価格でシグナルを出そうとしたりと、インジケータのバージョンに変更を加えましたが、これもうまくいきません。


まあ、私はこれを取り戻す短いバージョンのEA私はEMPTY_VALUEバッファを持っていないので、それはおそらくどのように動作するつもりはありません、そして、アイデアは私が結果を確認するために印刷関数を 見ることができるようにEAをテストすることでしたが、私は待つ必要があります指標バージョンなので、私はそれが判明したときに戻ってそれを投稿しなければならない。

とにかくここにインジケータバージョンがありますが、私はwhile文の内部でループを試みるべきか、新しいループを作成し、再びval1 = ...を再作成するかどうか正確に分からないので、私はこれについて自信を持っていないですまた。

//+------------------------------------------------------------------+
//|                Support and Resistance                            |
//|                Copyright © 2004/5     Barry Stander              |
//|                http://www.4Africa.net/4meta/                     |
//+------------------------------------------------------------------+

#property copyright "Support and Resistance             Barry_Stander_4@yahoo.com"
#property link      "http://www.4Africa.net/4meta/"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 White

//---- buffers
double v1[];
double v2[];
double v3[];
double val1;
double val2;
double val3;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
//----
   IndicatorBuffers(2);

   SetIndexArrow(0, 159);
   SetIndexStyle(0,DRAW_ARROW,STYLE_DOT,1,Red);
   SetIndexBuffer(0, v1);
   SetIndexLabel(0,"Resistance");
   SetIndexEmptyValue(0,0.0);

   SetIndexArrow(1, 159);
   SetIndexStyle(1,DRAW_ARROW,STYLE_DOT,1,Blue);
   SetIndexBuffer(1, v2);
   SetIndexLabel(1,"Support");
   SetIndexEmptyValue(1,0.0);
   
   SetIndexArrow(2, 225);
   SetIndexStyle(2,DRAW_ARROW,STYLE_DOT,1,White);
   SetIndexBuffer(2, v3);
   SetIndexLabel(2,"High A");
   SetIndexEmptyValue(2,0.0); 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   
   
   int i=Bars;
//----
   while(i>=0)
     {
      val1=iFractals(NULL, 0, MODE_UPPER,i);
      if (val1 > 0) v1[i]=High[i];
      else          v1[i]=v1[i+1];

      val2=iFractals(NULL, 0, MODE_LOWER,i);
      if (val2 > 0) v2[i]=Low[i];
      else          v2[i]=v2[i+1];
      
      i--;      
       
      }
      
     
     for(val1=High[i]; v1[i] == 0 ;i++)  // or v1[i] == EMPTY_VALUE
      {
      Print (v1[i]);
      }
       
     
     
     
//----
   return(0);
  }
//+------------------------------------------------------------------+
というわけで、3つ目のバッファとシグナルを作るのはやめて、前のシグナルの結果を表示できるかどうかだけ試してみることにしました。

EMPTY_VALUEというコードを入れると、インジケータは初期化されますが、それだけで何も印刷されません。
 

このfor loopがどのように動作するのか説明できますか?

for(val1=High[i]; v1[i] ==0 ;i++)

 
RaptorUK:

このfor loopがどのように動作するのか説明できますか?

for(val1=High[i]; v1[i] ==0 ;i++)

while文とv1[i]が高値を保存し、i -- Barsの最高値からカウントダウンするので、v1[i] ==EMPTY_VALUEの 間に再びカウントアップすればいいと考えていたのだと思います。

この場合、i++は1レベル上がって前の高値になりますが、実際にはそれを超えて次のEMPTY_VALUEに行くのだと思います。

だから、私は逆の方法でこれを行う必要があります v1[i] = High[i]; i++

それから、これは前のHighに私を連れて行くべきではありません、しかし、私はそれを適切に初期化する方法を理解していません。

これからも頑張ります。
 
私はそれをifに変えています(私はちょうど私が少なくともインジケータが何をしているかを見ることができるように、この時点で何かを印刷する見たい。

私は0を得るすべてので、実際には値がありません = 印刷(v1[i])時。
ということは、この時点でインジケータが動作しているのか?

まあ、私はそれを続けるでしょう。
 
Agent86:
私はそれをifに変えている(私はちょうど私が少なくともインディケータが何をしているかを見ることができるように、この時点で何か印刷を見たいと思っています。

私は0を得るすべてなので、実際には値がありません = 印刷(v1[i])時。
ということは、この時点でインジケータが動作しているのか?

まあ、私はそれを続けるでしょう。


もしかしたら、v1[0] ? printi の値を同時に見ているだけかもしれません .

Print ("v1[", i, "]= ", v1[i]);
 
2011.09.17 11:56:15     2011.01.03 09:24  Agent86_5min EURUSD,M5: v1[-1]= 0
hmm interesting
全部は載せてないけど、全部の行が同じ読み方 = 0

やはりv1[0]の実測値を見るべきかと ?

if(>0) という指標でなければならないのに、どうして常に0になるのでしょうか ?

私はまた別の分野に無知で入り込んでいるのかもしれません。

私は、私の試みがすべて失敗している理由と原因を理解しようとするために、印刷できるかもしれないと思いました。そして、次のフラクタルに 到達するために何らかの方法でi++を増分し、その後、この情報を何かのために使用する方法を見つけ出すことができるように。


High[i]やv1[i]を印刷しても常に0

High[0]やHigh[1]を印刷しても0

ご投稿の内容やi値の印刷はi--ループで常に0になるため引っかかるようですが、それでもiには値を印刷するはずだと、少なくとも私は思っています。

そして、i=Barsだから[-1]を表示している理由もわかりました。これはわかるのですが、=0 ?