ZigZagインジケータに関する問題 - ページ 2

 
インジケータの値を強調するのを忘れていました。最小値は一致しますが、最大値は2番目のグラフに示したように一致しません...。
 
aed71:

下のグラフは最小値(カーソル位置の値、データウィンドウの値、出力は同じ)です。

下のグラフは、6ティック後の最高値の部分です。データウィンドウもカーソルポイントも同じですが、出力は同じではなく、しかも低値と高値の両方を返しています。

2回目

iCustom()が正しくインジケータをロードしていることを確認しました。安値は同じですが、高値が違います。これはZigZagインジケータと関係があるのでしょうか?

何が間違っているのか、本当に理解できないのです。


ZigZagインジケータから得られる値は1つだけですね。

この値は何ですか?

 
aed71:

下のグラフは最小値(カーソル位置の値、データウィンドウの値、出力は同じ)です。

下のグラフは、6ティック後の最高値の部分です。データウィンドウもカーソルポイントも同じですが、出力は同じではなく、しかも低値と高値の両方を返しています。

2回目

iCustom()が正しくインジケータをロードしていることを確認しました。安値は同じですが、高値が違います。これはZigZagインジケータと関係があるのでしょうか?

何が間違っているのか、本当に理解できません。

iCustomの例では、ZigZagの使い方が間違っています。MetQuotesの標準的なZigZagは、3つの バッファ(iCustomではモードまたはラインインデックス)を持っています。

  1. Mode = 0: ジグザグの高ポイントと低ポイントの両方を保持します。
  2. Mode = 1: 高ポイントを保持しますが、必ずしもジグザグポイントのみを保持するわけではありません(リペイントポイントも保持するため)。
  3. Mode = 2: 低ポイントを保持するが、ジグザグポイントのみを保持する必要はない(再描画ポイントも保持するため)。

最初のバッファ(Mode 0)と他の2つのバッファを比較して、ハイポイントかローポイントかを判断する必要があります(例えば、バッファ1とバッファ3が同じ値ならロージグザグポイント、バッファ1とバッファ2が同じ値ならハイポイントです)。

また、ZigZagがどのように機能し、どのように再描画されるかをより理解するために、私の ZigZagZugインジケータで 遊んでみることをお勧めします。しかし、あなたのコードでは、MetaQuotesのZigZagの方が速いので、そちらを使用してください。私のバージョンは、余分な機能があるため、より多くの処理を行い、その結果、より遅くなっています。

PS!バッファ1(Mode = 0)の値が0.0であり、他のバッファの値が0でない場合、それらは古いリペイントポイントであり、ZigZagポイントではありません。

あなたのコードでは、Mode 0 BufferをLow、Mode 1 BufferをHighとして使用しています。これは完全に間違っています。

 
FMIC:

iCustomの例では、ZigZagの使い方が間違っています。MetQuotesの標準的なZigZagには3つの バッファ(iCustomではモードまたはラインインデックス)があります。

  1. Mode = 0: ジグザグの高ポイントと低ポイントの両方を保持します。
  2. Mode = 1: 高ポイントを保持しますが、必ずしもジグザグポイントのみを保持するわけではありません(リペイントポイントも保持するため)。
  3. Mode = 2: 低ポイントを保持するが、ジグザグポイントのみを保持する必要はない(再描画ポイントも保持するため)。

最初のバッファ(Mode 0)と他の2つのバッファを比較して、ハイポイントかローポイントかを判断する必要があります(例えば、バッファ1とバッファ3が同じ値ならロージグザグポイント、バッファ1とバッファ2が同じ値ならハイポイントです)。

また、ZigZagがどのように機能し、どのように再描画されるかをより理解するために、私の ZigZagZugインジケータで 遊んでみることをお勧めします。しかし、あなたのコードでは、MetaQuotesのZigZagの方が速いので、そちらを使用してください。私のバージョンは、余分な機能があるため、より多くの処理を行い、その結果、より遅くなっています。

PS!バッファ1(Mode = 0)の値が0.0であり、他のバッファの値が0でない場合、それらは古いリペイントポイントであり、ZigZagポイントではありません。

あなたのコードでは、Mode 0 BufferをLow、Mode 1 BufferをHighとして使用しています。これは完全に間違っています。


ここを見てくださいhttps://www.mql5.com/en/forum/149492/page2#912747 アウトバーは、古いコード化されたジグザグに問題があります。

黄色い線は、ジグザグがどのように表示されるかを示しています。

 
deVries:


ここを見てくださいhttps://www.mql5.com/en/forum/149492/page2#912747 outsidebars is a problem for the old coded Zigzag

黄色の線は、ジグザグがどのように表示されなければならないかについて、より良い方法を示しています。


aed71の現在のジレンマと、outside barsは何の関係もありません。彼のZigZagの使い方は間違っているのです。

状況を混乱させるだけなので、現在の問題から逸脱しないようにお願いします。

さらに、この問題がない私のZigZagZugのコードへのリンクも示しました。

 
FMIC:

iCustomの例では、ZigZagの使い方が間違っています。MetQuotesの標準的なZigZagには3つの バッファ(iCustomではモードまたはラインインデックス)があります。

  1. Mode = 0: ジグザグの高ポイントと低ポイントの両方を保持します。
  2. Mode = 1: 高ポイントを保持しますが、必ずしもジグザグポイントのみを保持するわけではありません(リペイントポイントも保持するため)。
  3. Mode = 2: 低ポイントを保持するが、ジグザグポイントのみを保持する必要はない(再描画ポイントも保持するため)。

最初のバッファ(Mode 0)と他の2つのバッファを比較して、ハイポイントかローポイントかを判断する必要があります(例えば、バッファ1とバッファ3が同じ値ならロージグザグポイント、バッファ1とバッファ2が同じ値ならハイポイントです)。

また、ZigZagがどのように機能し、どのように再描画されるかをより理解するために、私の ZigZagZugインジケータで 遊んでみることをお勧めします。しかし、あなたのコードでは、MetaQuotesのZigZagの方が速いので、そちらを使用してください。私のバージョンは、余分な機能があるため、より多くの処理を行い、その結果、より遅くなっています。

PS!バッファ1(Mode = 0)の値が0でも、他のバッファに値があれば、それは古いリペイントポイントです。


素晴らしい!重要なヒントをありがとうございます。なぜうまくいかないのかがわかりました...。

Metaquotes ZigZagのオリジナルコードは、 バッファが2つしか ないので、正しくないのだと思います。ということで、片方はHigh、もう片方はLowにすればいいのではと思ったのですが...。

実はタイトルもミスマッチなんです、最近見ました。どなたか確認してください。

私が参考にしたのはこちらのコードです https://www.mql5.com/en/code/7796

//+------------------------------------------------------------------+
//|                                        Custom Moving Average.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"

#property indicator_chart_window
#property indicator_buffers 1
#property  indicator_color1 Red
//---- indicator parameters
extern int ExtDepth=12;
extern int ExtDeviation=5;
extern int ExtBackstep=3;
//---- indicator buffers
double ExtMapBuffer[];
double ExtMapBuffer2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(2);
//---- drawing settings
   SetIndexStyle(0,DRAW_SECTION);
//---- indicator buffers mapping
   SetIndexBuffer(0,ExtMapBuffer);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexEmptyValue(0,0.0);
//---- indicator short name
   IndicatorShortName("ZigZag("+ExtDepth+","+ExtDeviation+","+ExtBackstep+")");
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int    shift, back,lasthighpos,lastlowpos;
   double val,res;
   double curlow,curhigh,lasthigh,lastlow;

   for(shift=Bars-ExtDepth; shift>=0; shift--)
     {
      val=Low[Lowest(NULL,0,MODE_LOW,ExtDepth,shift)];
      if(val==lastlow) val=0.0;
      else 
        { 
         lastlow=val; 
         if((Low[shift]-val)>(ExtDeviation*Point)) val=0.0;
         else
           {
            for(back=1; back<=ExtBackstep; back++)
              {
               res=ExtMapBuffer[shift+back];
               if((res!=0)&&(res>val)) ExtMapBuffer[shift+back]=0.0; 
              }
           }
        } 
      ExtMapBuffer[shift]=val;
      //--- high
      val=High[Highest(NULL,0,MODE_HIGH,ExtDepth,shift)];
      if(val==lasthigh) val=0.0;
      else 
        {
         lasthigh=val;
         if((val-High[shift])>(ExtDeviation*Point)) val=0.0;
         else
           {
            for(back=1; back<=ExtBackstep; back++)
              {
               res=ExtMapBuffer2[shift+back];
               if((res!=0)&&(res<val)) ExtMapBuffer2[shift+back]=0.0; 
              } 
           }
        }
      ExtMapBuffer2[shift]=val;
     }

   // final cutting 
   lasthigh=-1; lasthighpos=-1;
   lastlow=-1;  lastlowpos=-1;

   for(shift=Bars-ExtDepth; shift>=0; shift--)
     {
      curlow=ExtMapBuffer[shift];
      curhigh=ExtMapBuffer2[shift];
      if((curlow==0)&&(curhigh==0)) continue;
      //---
      if(curhigh!=0)
        {
         if(lasthigh>0) 
           {
            if(lasthigh<curhigh) ExtMapBuffer2[lasthighpos]=0;
            else ExtMapBuffer2[shift]=0;
           }
         //---
         if(lasthigh<curhigh || lasthigh<0)
           {
            lasthigh=curhigh;
            lasthighpos=shift;
           }
         lastlow=-1;
        }
      //----
      if(curlow!=0)
        {
         if(lastlow>0)
           {
            if(lastlow>curlow) ExtMapBuffer[lastlowpos]=0;
            else ExtMapBuffer[shift]=0;
           }
         //---
         if((curlow<lastlow)||(lastlow<0))
           {
            lastlow=curlow;
            lastlowpos=shift;
           } 
         lasthigh=-1;
        }
     }
  
   for(shift=Bars-1; shift>=0; shift--)
     {
      if(shift>=Bars-ExtDepth) ExtMapBuffer[shift]=0.0;
      else
        {
         res=ExtMapBuffer2[shift];
         if(res!=0.0) ExtMapBuffer[shift]=res;
        }
     }
  }
 
aed71:


素晴らしい!重要なヒントをありがとうございます。これで、なぜ動かないのかがわかりました...。

Metaquotes ZigZagのオリジナルのコードは、 バッファが2つしか ないため、正しくないのだと思います。ということで、片方はhigh、もう片方はlowにすればいいのではと・・・。

実はタイトルもミスマッチなんです、最近見ました。どなたか確認してください。

私が参考にしているのはこちらのコードです https://www.mql5.com/en/code/7796


そのコードを使ってはいけない!それは古代のものだ!

現在LiveUpdatesでプッシュされているコードを使用してください。現在の600以上のバージョンか、少なくとも509のバージョンを使ってください。

PS!NB!また、iCustomのNameには "ZigZag "だけを使用し、"ZigZag.ex4 "は使用しないでください。

 
FMIC:


そのコードは使わないでください! それは古代の ものです!

現在、LiveUpdatesでプッシュされているコードを使用してください。現在の600以上のバージョンか、少なくとも509のバージョンを使ってください。

PS!NB!また、iCustomのNameには "ZigZag "だけを使用し、"ZigZag.ex4 "は使用しないでください。


こんにちは、FMICです。

ヒントをありがとうございました。コンパイルし忘れないように、ファイルの最後にex4を追加していました。残念ながら、私の新しいビルドは610 ZigZagが古いものに置き換わっていました。

私は時間の問題ではないので、あなたのものを使うことにしました。ここでもいくつかの問題に直面しましたので、ご指導いただければ幸いです。

私は上記の同じコードを使用し、ファイル名をあなたのバージョンに変更しただけです。私はパラメータ6,5,3を使用していますが、それがあなたのデフォルト設定との唯一の違いです。

いくつかの問題に直面しました。

まず、zh,zlの値を読み込むために、毎ティックごとにインジケータがロードされます。そして、最後にすべてのロードを解放します(画像では見えませんが)"2014.02.22 09:35:09.171 2013.11.01 22:55 Custom indicator ZigZagZug EURUSD,M15: removed" のようなことが書かれています。ログファイルを添付しておきますので参考にしてください。後でメモリの問題が発生するのでしょうか?

次にジャーナルではカウンタcntがcnt8からcnt84にジャンプしていますが、これはおかしいです。ログではジャンプしていません。ログを正しい値として考えるべきかと思います。

3つ目は、最も重要なことですが、結果的に2つの安値を発見してしまったことです。図ではグレーのジグザグ線の高値と安値が欲しいのですが、ログに全ての高値と安値を書き出すと、あなたのピンクとシアンの色の点で全く同じになります。しかし、私はジグザグの値だけが必要です。他のバッファをチェックしましたが、正しい値を持ってきませんでした。何か提案はありますか?それとも古典的なジグザグで行くべきでしょうか(ビルド610用?)

ありがとうございます。

ZigZagZug

 
aed71:


FMICさん、こんにちは。

ヒントをありがとうございます。私は、コンパイルを忘れないように、ファイルの最後にex4を追加していました。残念ながら、私の新しいビルド610 ZigZagは古いものと入れ替わっていました。

私は時間の問題ではないので、あなたのものを使用することにしました。ここでもいくつかの問題に直面しましたので、ご指導いただければ幸いです。

私は上記の同じコードを使用し、ファイル名をあなたのバージョンに変更しただけです。私はパラメータ6,5,3を使っていますが、それがあなたのデフォルト設定との唯一の違いです。

何か提案はありますか?それとも、古典的なジグザグを使うべきでしょうか(ビルド610用?)

ありがとうございます。

新しい610ジグザグを使用することは何も問題ありません。むしろ、今後のビルドとの互換性を保つために、そちらを使用することをお勧めします。古いもの、あるいは私のものは使わないでください。

私のZigZagZugインジケータは余分なパラメーターを使い、順序もタイプも違うので、今使っているのと同じiCustomをそのまま使うことはできないのです。全く違うものなのです。

また、このインジケーターは7つのバッファを使用しています。このインジケータはZigZagを理解するための視覚的な学習ツールとして使用することを想定しており、EAで実際に使用することは想定していません。

PS!iCustomを使った EAのバックテストでは、インジケータのロードとアンロードを何度も繰り返すのは普通です。これはEAとインジケータがどのようにコード化されているかによります。これを防ぎ、EAを高速化するために、私は通常、外部インジケータに依存しないように、必要なコードのみをEA自体に再コード化しますが、これはあなたのケースとは直接関係ない別の問題です。ただ、あなたの将来のEAに対する提案です。

 
aed71:


FMICさん、こんにちは。

...グレーのジグザグ線の最高値と最低値を取得したいのですが、ログに最高値と最低値を全て書き出すと、貴社のピンクとシアンのカラードットと全く同じになります。しかし、私はジグザグの値だけが必要です。...

ありがとうございます。


以前の記事で説明したように、ZigZagのポイントはHighとLowのバッファーだけでは取得できません。標準のZigZagでもこのようになっていますが、あなたはそれを見ていないだけです。そこで、私のインジケーターでは、このような点を表示し、より分かりやすくしています。

ジグザグ点のみをフィルタリングするためには、HighとLowのバッファを、LowとHighを両方保持する最初のバッファと比較する必要があります。

NB!最初のバッファ(Mode 0)と他の2つのバッファを比較して、ハイポイントかローポイントかを判断する必要があります(例えば、バッファ1とバッファ3の両方が同じ値であれば、それはロージグザグポイントであり、バッファ1とバッファ2の両方が同じであればハイポイントであると言えます)。

もしよろしければ、ファイルを添付して投稿してください。私が修正しますので、正しい使い方がわかると思います。