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

 
aed71:

OK ありがとうFMIC。

実は、私の問題は、私がフォーラムで共有したエキスパートについてでした。あなたのスクリプトは問題なく動作しています、ありがとうございます。

このスレッドでの最初のクエリは、以下の通りです。

  1. iCustom "関数を使用してZigZagインジケータからデータに適切にアクセスする方法は?
  2. ZigZagの高値と安値を収集し、統計分析に利用する方法は?

私のスクリプトは、これらの質問に答えるためのサンプルコードと知識を提供し、あなたが開発したいEAなど他の用途にその知識を適用できるようにします。iCustom()の使い方とジグザグ高値・安値のテストは私のコードを使って、あなたのEAに適用すればいいだけです。

しかし、あなたが後で言及した、他のEAですでに機能している戦略を最適化する必要性に応じてEAでZigZagデータをどのように使用するかという他の質問については、このスレッドで十分に提示されていませんし、説明もされていません。ですから、要するに、あなたが何を求めているのかが分からないので、私はあなたにアドバイスや手助けをすることができません。

私のZigZagZug インジケータに付随するコードベースの記事を読んでいただければ、ZigZagを戦略やEAで使うことは、常に再描画されるため簡単ではなく、その仕組みや異なる戦略やEAでどう使うことが可能なのかを慎重に理解する必要があることがおわかりいただけると思います。

言い換えれば、ZigZagデータとEAストラテジーの組み合わせは複雑で、しっかりとした定義が必要なのです。ですから、あなたの現在のストラテジーやその最適化方法について何も知らないで、これ以上の手助けやアドバイスをすることはできません。

あなたが公の場でこれ以上話したくないというのは理解できるので、私はプライベートで、しかも無料でそれをする機会を提供しました。私はソフトウェア開発者であり、通常、このようなサービスには料金がかかります。

あなたが解決したい問題の本質を理解しない限り、これ以上のことはできませんし、これ以上のアドバイスもできません。

 

こんにちは。

私のコードを修正することに成功しました。ループのロジックに間違いがありましたが、私がテストした限りでは正常に動作しています。

興味のある方は使ってみてください。これはエキスパートとして使用するように設計されており、metaquotes標準のZigZagインジケータを使用しています。

基本的にはジグザグの中から本当の高値と安値を探し出すものです。過去データから安値・高値を探すこともできますし、周期や振幅の分析にも使えます。

リアルタイムではありません。直近の高値・安値に戻るので、直近のトレンドの長さによっては、値を戻して修正する可能性があります。ストラテジーテスターで クイックテストする前には使わないでください。

FMICさん、ご苦労様です。

ファイル:
 

aed71さん、こんにちは。

あなたのコードには、まだいくつかの論理的なバグがあります。

  1. あなたのいわゆる「ティックループ」は、実際には「新しいバー条件」であり、新しいバーを検出するために、時間の変化に対して「Time[0]」をテストしているからです。コードを誤解させないために、コメントを変更することをお勧めします。
  2. あなたは、条件をテストする前に配列に値を代入し、それを再び消去するために、必要なしに特定の変数を何度もテストしています。これはコードの速度を低下させるだけでなく、ロジックを追うのが難しくなります。
  3. 再描画ポイントの見つけ方が間違っていて、まったく堅牢ではありません。リペイントポイントを正しく見つけるには、ZigZagがどのように動作するかをよく勉強する必要があります。ZigZagのコードか、ZigZagZugのコードを読んで、そのロジックを理解してください(どちらか簡単な方)。
  4. 配列に不必要にNULL 値を格納している。ZigZagZugのポイントがないのに、なぜカウンターをインクリメントし、配列に追加し続けるのでしょうか。貴重なリソース(RAMとCPUサイクル)を必要なく浪費しているだけです。コードの実行速度も遅くなります。事前に必要なサイズを保証できないので、静的な配列ではなく、動的に成長する配列を使用します。
  5. 波動周期や周波数などのデータを後で分析するために、タイムインデックスやバーシフトインデックスも記録しておく必要があります。

よろしくお願いします。
FMIC

 
FMIC:

aed71さん、こんにちは。

あなたのコードには、まだいくつかの論理的なバグがあります。

  1. あなたのいわゆる「ティックループ」は、実際には「新しいバー条件」であり、新しいバーを検出するために、時間の変化に対して「Time[0]」をテストしているからです。コードを誤解させないために、コメントを変更することをお勧めします。
  2. あなたは、条件をテストする前に配列に値を代入し、それを再び消去するために、必要なしに特定の変数を何度もテストしています。これはコードの速度を低下させるだけでなく、ロジックを追うのが難しくなります。
  3. 再描画ポイントの見つけ方が間違っていて、まったく堅牢ではありません。リペイントポイントを正しく見つけるには、ZigZagがどのように動作するかをよく勉強する必要があります。ZigZagのコードか、ZigZagZugのコードを読んで、そのロジックを理解してください(どちらか簡単な方)。
  4. 配列に不必要にNULL値を格納している。ZigZagZugのポイントがないのに、なぜカウンターをインクリメントして配列に追加し続けるのでしょうか。貴重なリソース(RAMとCPUサイクル)を必要なく浪費しているだけです。コードの実行速度も遅くなります。事前に必要なサイズを保証できないので、静的な配列ではなく、動的に成長する配列を使用します。
  5. 波動周期や周波数などのデータを後で分析するために、タイムインデックスやバーシフトインデックスも記録しておく必要があります。


FMIC

コメントありがとうございます。

私は良いプログラマーではないので、コード自体は完璧ではないかもしれません:-)しかし、私のロジックを説明させてください。

1-) コメントの部分は、"every new bar "に変更することができます。

2-) 4-) 5-)大きな配列を使用するロジックは、その後、新しいプロセスで、私は周期や振幅などを見つけるために、高値間または高値と低値間のゼロ値のバーを数えることです。そのため、配列を使用する前に初期化する必要があり、時間インデックスなどを処理する必要はありません。ただ、バッファが増えるだけで、今のところ私のプロジェクトでは 大きな問題にはなっていません。

3-) ジグザグとジグザグツグを何度かトレースしました。ジグザグでは、最後に本当の高さと低さがありますが、それらの値を配列にすると、低さや高さの間にあることがわかります。モード0とモード1/モード2の組み合わせでは、この中間を避けることはできません。モード0とモード1/モード2の組み合わせであろうと、低域と高域の中間は常に存在する。ジグザグツークでは、そのような点がはっきりと見えます。また、mode0が0でも、mode1やmode2が0より大きい場合は、不正確なポイントであることがわかります。そこで、これらの点を回避するためのコードを追加することにしました。

これはジグザグ点を見つけるのに最適なコードではないかもしれませんが、私のテストではこのコード自体は正しく動作しています。何度かテストしました。私はいつも、これを使いたいと思う人は、事前にテストすることをお勧めします。

あなたはそれをテストしましたか?正しい点が表示されないのですか?ロバストでないとか、間違っているとかいうのは、あなたのテストが失敗したのではありませんか?

ありがとうございます。

 
aed71:

また、コメントありがとうございます。

私は良いプログラマーではないので、コード自体は完璧ではないかもしれません:-) しかし、私のロジックを説明させてください。

1-) コメントの部分は、"every new bar "に変更することができます。

2-) 4-) 5-)大きな配列を使用するロジックは、その後、新しいプロセスで、私は周期や振幅などを見つけるために、高値間または高値と低値間のゼロ値のバーを数えることです。そのため、配列を使用する前に初期化する必要があり、時間インデックスなどを処理する必要はありません。ただ、バッファが増えるだけで、今のところ私のプロジェクトでは大きな問題にはなっていません。

3-) ジグザグとジグザグツグを何度かトレースしました。ジグザグでは、最後に本当の高さと低さがありますが、それらの値を配列にすると、低さや高さの間にあることがわかります。モード0とモード1/モード2の組み合わせでは、それを避けることはできません。モード0とモード1/モード2の組み合わせであろうと、低域と高域の中間は常に存在する。ジグザグツークでは、そのような点がはっきりと見えます。また、mode0が0でも、mode1やmode2が0より大きい場合は、不正確なポイントであることがわかります。そこで、これらの点を回避するためのコードを追加することにしました。

これはジグザグ点を見つけるのに最適なコードではないかもしれませんが、私のテストではこのコード自体は正しく動作しています。何度かテストしました。私はいつも、これを使いたいと思う人は、事前にテストすることをお勧めします。

あなたはそれをテストしましたか?正しい点が表示されないのですか?ロバストでないとか、間違っているとかいうのは、あなたのテストが失敗したのではありませんか?

ありがとうございます。


あなたはポイントを逃しています!私が提供したコードは、High/Low ZigZagポイントを適切に識別する方法を示しています。しかし、あなたはそれを無視して、コードをより理解しにくく、遅くし、必要以上にリソースを使用する独自の方法を選択しました。なぜでしょうか?
 
Fernando Carreiro #:

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として使用しています。これは完全に間違っています。

これがどれだけ私を助けてくれたか、信じられないほどです。