指標となる質問 - ページ 2

 
1ならTrue、0ならFalseということですね?

明日、もう少し考えてみます。
 
Agent86:
1はTrue、0はFalseですよね?<---- これは正しい、しかし

明日もう少し考えて、これがわかるかどうか見てみます。


UKはMACDの 値についてより言及しています。
 
fast と slower は bool ではなく double です ... 初期値からループを3回ほど繰り返し、Bars, Bars-1, Bars-2 の値に対して ... faster と slower の値は何でしょうか?
 
//+------------------------------------------------------------------+
//|                                   
//+------------------------------------------------------------------+


#property indicator_chart_window
#property indicator_buffers 3
#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(3);

   SetIndexArrow(0, 111);
   SetIndexStyle(0,DRAW_ARROW,STYLE_DOT,1,Blue);
   SetIndexBuffer(0, v1);
   SetIndexLabel(0,"Resistance");
   

   SetIndexArrow(1, 111);
   SetIndexStyle(1,DRAW_ARROW,STYLE_DOT,1,Red);
   SetIndexBuffer(1, v2);
   SetIndexLabel(1,"Support");
  
   
   SetIndexArrow(2, 111);
   SetIndexStyle(2,DRAW_ARROW,STYLE_DOT,1,White);
   SetIndexBuffer(2, v3);
   SetIndexLabel(2,"High A");
   
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   
   int i=Bars;
   
   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        
  
    for(i=Bars; i>=0; i--)
     {
      val1=iFractals(NULL, 0, MODE_UPPER,i);
      if (val1 > 0)
         {                             
          v1[i]=High[i]; 
                         
          Print ("v1[", i, "]= ", v1[i], " if");
          Print ("i=",i, " faster=", faster);
          Print ("i=",i, " slower=",slower);
          }    
               
      else          
         {
         //v1[i]=v1[i+1];
         //Print ("v1[", i, "]= ", v1[i], " else");
         }
      
      val2=iFractals(NULL, 0, MODE_LOWER,i);
      if (val2 > 0)
         {
          v2[i]=Low[i];
          
          Print ("v2[", i, "]= ", v2[i], " if");
         }
          
      else          
         {
         //v2[i]=v2[i+1]; 
         //Print ("v2[", i, "]= ", v2[i], " else");         
         }
      }

   
     
//----
   return(0);
  }
//+------------------------------------------------------------------+




2011.09.28 16:43:30 sup_res EURUSD,M5: i=411 fast=-0.0005

2011.09.28 16:43:30 sup_res EURUSD,M5: v1[411]= 1.3522 if
2011.09.28 16:43:30 sup_res EURUSD,M5: v2[414]= 1.3495 if
2011.09.28 16:43:30 sup_res EURUSD,M5: i=414 slower=-0.0007
2011.09.28 16:43:30 sup_res EURUSD,M5: i=414 fast=-0.0005。
2011.09.28 16:43:30 sup_res EURUSD,M5: v1[414]= 1.3527 if
2011.09.28 16:43:30 sup_res EURUSD,M5: i=417 slower=-0.0007
2011.09.28 16:43:30 sup_res EURUSD,M5: i=417 fast=-0.0005。
2011.09.28 16:43:30 sup_res EURUSD,M5: v1[417]= 1.3528 if
2011.09.28 16:43:30 sup_res EURUSD,M5: v2[419]= 1.3506 if
2011.09.28 16:43:30 sup_res EURUSD,M5: i=420 slower=-0.0007
2011.09.28 16:43:30 sup_res EURUSD,M5: i=420 fast=-0.0005。
2011.09.28 16:43:30 sup_res EURUSD,M5: v1[420]= 1.3523 if
2011.09.28 16:43:30 sup_res EURUSD,M5: i=426 slower=-0.0007
2011.09.28 16:43:30 sup_res EURUSD,M5: i=426 fast=-0.0005。
2011.09.28 16:43:30 sup_res EURUSD,M5: v1[426]= 1.3522 if
2011.09.28 16:43:30 sup_res EURUSD,M5: v2[429]= 1.3481 if


インディケータを実行すると、このように表示されます。

しかし、EAで全く同じコードを実行すると、配列は表示されません。

2011.09.28 16:43:48 2011.01.02 18:42 Agent86_5min EURUSD,M5: i=227 faster=-0.0015
2011.09.28 16:43:48 2011.01.02 18:42 Agent86_5min EURUSD,M5: v1[227]= 0 if
2011.09.28 16:43:48 2011.01.02 18:42 Agent86_5min EURUSD,M5: v2[230]= 0 if
2011.09.28 16:43:48 2011.01.02 18:42 Agent86_5min EURUSD,M5: i=232 slower=-0.0013
2011.09.28 16:43:48 2011.01.02 18:42 Agent86_5min EURUSD,M5: i=232 fast=-0.0015。
2011.09.28 16:43:48 2011.01.02 18:42 Agent86_5min EURUSD,M5: v1[232]= 0 if
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: i=825 faster=-0.0015
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: v1[825]= 0 if
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: i=829 slower=-0.0008
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: i=829 fast=-0.0015
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: v1[829]= 0 if
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: i=832 slower=-0.0008
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: i=832 fast=-0.0015。
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: v1[832]= 0 if
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: i=240 fast=-0.0011
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: v1[240]= 0 if
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: v2[241]= 0 if
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: v2[245]= 0 if
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: i=245 slower=-0.0003
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: i=245 fast=-0.0011。
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: v1[245]= 0 if
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: v2[249]= 0 if


インジケータと全く同じコードなので、なぜまた配列を表示しないようにするのか分かりません。
ともあれ、とりあえずインジケータに手を付けます。

4桁の分数から負の4桁の分数まで様々な値が表示されるようですが

iMACDのシフトをiにすると、ずっとfasterとslower=0になるのですが

 
Agent86:

試しにいろんなところにif(faster > slower)を挿入して遊んでみました。通常、これらのアイデアはEAでは機能しますが、インジケータでは機能しません。

IEif(v1 > 0 && より速く > より遅く)

が、これではインジケータが消えてしまいます。

この変更を試してみてください。
//   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        
  
    for(i=Bars-1; i>=0; i--)
     {
   double   faster = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i), //MODE_MAIN
            slower = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i); //MODE_SIGNAL        
 
Agent86:


私はそれが再び配列を印刷しないように戻って頼る理由がわからない、それは指標と同じ正確なコードだからです。


EAで Indicator Bufferは使えない ... 説明はこちら :https://www.mql5.com/en/articles/1456

fastとslowerはループ中ずっと同じ値で、 iの 値が変化していますが、これはあなたが必要とするものですか?

 
RaptorUK:

EAで Indicator Bufferは使えない ... 説明はこちら :https://www.mql5.com/en/articles/1456

fastとslowerはループ中ずっと同じ値で、 iの 値が変化していますが、これはあなたが必要とするものですか?


OKリンクをありがとうございます。私はこのことについて忘れていた。私には思い出すのも大変な情報です。Noobinessハンディキャップ笑。

で、とにかく、iMACDのクロスとか、EMAのクロスとか、他の指標のクロスとか、他の条件が発生したときだけ、高いフラクタルを形成するようにしようと思っていたのです。
そうすれば、すべての条件が満たされたときだけ、フラクタルがインジケータに表示されるようになります。
そして、同じような条件で低位フラクタルにも手を出す。

さらに複雑な条件も追加して、やり方を勉強してみようと思います。つまり、それはiFractalsではなく、他のインジケーターと様々な条件を結合したインジケーターかもしれないのです。

デザインは、私は経験がないので、一般的なコードで使われている戦術や理論をあまり見たことがなく、大きな問題です。だから、今は他の人のコードを読んで、その人がどう動いているのか、何をしたのかを理解して学ぶしかない。

いずれにせよ、私はそれを続けるでしょう。
 
WHRoeder:
次のように変更してみてください。
うーん、面白い

そのため、ループ内でも変数を宣言する必要があります。


よし、これで楽しく遊べそうだ。

 

私は、ループしているすべての変数を、ループの外で、最初に一度だけインスタンス化するのが好きです。 ループの中で宣言すると、コンパイラは繰り返しのたびに新しい変数を作成します。

 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        
  
    for(i=Bars-1; i>=0; i--)
     {
            faster = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i), //MODE_MAIN
            slower = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i); //MODE_SIGNAL 
 
diostar:
私は、ループしているすべての変数を、ループの外で、最初に一度だけインスタンス化するのが好きです。 ループの中で宣言すると、コンパイラは繰り返しのたびに新しい変数を作ってしまいます。
どうしてそのような結論になったのでしょうか?