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

 
Igor Zakharov:

歴史を汲んでいるのでしょうか?

おそらくそうでしょう。でも、100%ではないんです。プリンターでバーの本数が変わってしまうのですが、どのように確認するのですか?

イゴール・ザハロフ

この場合、再計算はしないんですね。

ありがとうございます、そのようです。

イゴール・ザハロフ

そして、新たに表示されるインジケータ・バッファの 項目は、ゴミで埋め尽くされている。

新しいものだけでなく、古いものもあるようです。矢印がランダムに描かれるだけでなく、インジケーターの線が本来は折れないのに折れてしまう気がするのですが。履歴を入れ替えた場合の再計算をどのように整理すればよいか、また、その例をどこで調べればよいか、ご教示ください。

 
Alexey Viktorov:

このアドオンを別途挿入したのが間違いでした。バッファが変わるときだけ、矢印をつけるとよいでしょう。同時に、それ以外の場合は、バッファに空の値を入れることを忘れないでください。

一旦空の値を入れておいて、トレンドが変わったときに片方のバッファを矢印で埋めるというのもいいかもしれませんね。

ご返信ありがとうございました。

元のインジケータを 確認したところ、私がしくじったのではなく、もともと間違った書き方をしていたことが判明しました。つまり、私の修正なしでも、履歴を入れ替えるとクラッシュするのです。

 
質問して何も返ってこないのは初めてです。新参者向けの選択的支援のようなもの。
 
novichok2018:
質問して返事がないのはこれで3回目です。これは、初心者のための選択的ヘルプのようなものです。

まず目を引くのは、LowLineという名前でグラフィカルなトレンドラインオブジェクトを作成 し、後でそれを削除したり、別の名前で同様のオブジェクトを作成したりしないことです...。

同じ名前で何度もObjectCreate()を実行することはできません - 最初の1回だけ動作し、その後はエラーになります。


フラクタルの判定にも問題があり、バーオープン後2番目のバーでフラクタルを見つけようとします。通常、フラクタルのインジケータを呼び出しながらバーのサイクルを実行し、最初のフラクタルを見つけたらサイクルを中断して、フラクタルがあったバー番号を取得します。

 
Igor Makanu:

また、フラクタルの定義に問題があり、あなたはバーオープニング#2にフラクタルを見つけようとすると、通常、フラクタル指標の呼び出しとバー上のサイクルを行い、最初のフラクタルが見つかったときにサイクルを中断し、フラクタルのあったバー番号を取得します。

ありがとうございました。

確かに、フラクタルが出現したバーの番号は、2本後に出現するので、どうやって取得するのかわかりません。だから、2本目の小節でキャッチするんです。アラートは指定した期間のフラクタル数を表示しますが、トレンドラインを引くために2つ目のフラクタルのポイントを設定するにはどうしたらよいでしょうか。ご推薦の通り、どのようにすればよいのかが不明です。

呼び出されたフラクタル指標は、利用可能なすべての履歴にフラクタル図形を描画します。一日のうち一定期間内に落ちるフラクタルによってトレンドラインを引き、前日のフラクタルも考慮し、最後のフラクタルによって自動的にラインを再構築するという作業を解決しようとしています。そして、知識の不足もあります。

 
novichok2018:

ありがとうございました。

本当に、フラクタルが出現したバーの数字は2本遅れて出現するので、どうしたらいいのかわかりません。だから、2本目の小節でキャッチするんです。アラートは指定した期間のフラクタル数を表示しますが、トレンドラインを引くために2つ目のフラクタルのポイントを設定するにはどうしたらよいでしょうか。ご推薦の通り、どのようにすればよいのかが不明です。

呼び出されたフラクタル指標は、利用可能なすべての履歴にフラクタル図形を描画します。一日のうち一定期間内に落ちるフラクタルによってトレンドラインを引き、前日のフラクタルも考慮し、最後のフラクタルによって自動的にラインを再構築するという作業を解決しようとしています。そして、知識の不足もあります。

本当にSECOND BARでキャッチする必要があるのでしょうか?

以下はそのテストです。

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

MQL5:例

ウラジミール・カルプトフ 2018.03.19 05:54

  • 2.3. iFractals.考慮すべき2つの重要な要素

フラクタルに取り組むにあたって、考慮すべき要素が2つあります。

ファクター1

Fractal on bars from "rates_total-5" to"rates_total-3" can not be redrawn- it follows from indicator"Fractals.mq5" design (open code of indicator is located in [data folder]\MQL5Indicators

//---
   if(prev_calculated<7)
     {
      limit=2;
      //--- clean up arrays
      ArrayInitialize(ExtUpperBuffer,EMPTY_VALUE);
      ArrayInitialize(ExtLowerBuffer,EMPTY_VALUE);
     }
   else limit=rates_total-5;

   for(i=limit;i<rates_total-3 && !IsStopped();i++)
     {
      //---- Upper Fractal
      if(high[i]>high[i+1] && high[i]>high[i+2] && high[i]>=high[i-1] && high[i]>=high[i-2])
         ExtUpperBuffer[i]=high[i];
      else ExtUpperBuffer[i]=EMPTY_VALUE;

      //---- Lower Fractal
      if(low[i]<low[i+1] && low[i]<low[i+2] && low[i]<=low[i-1] && low[i]<=low[i-2])
         ExtLowerBuffer[i]=low[i];
      else ExtLowerBuffer[i]=EMPTY_VALUE;
     }
//--- OnCalculate done. Return new prev_calculated.
   return(rates_total);
  }

フラクタル

図1.これが「フラクタル」インジケーターの仕組みです。インジケータ "Fractals.mq5"の位置からのファイル番号付け

これは、iFractalsインジケータからExpert Advisorでデータを受信すると、「rates_total-5」と「rates_total-4」のバー(「Fractals.mq5」のインジケータ位置からのバー番号)上にフラクタルが存在し、再レンダリングしないことが保証されることを意味します。


そして、ここでフラクタルがバー "レート_合計-5 "に形成されている瞬間です - 右側に新しいバーがあるときに、1月2日03:00(インジケータの位置からファイルの番号 "Fractals.mq5" ) 。

フラクタル、5小節

図2.バー "rates_total-5 "にフラクタルが形成された瞬間。

第二の要因

フラクタルのインジケーターは、空の値として「0.0」ではなく「EMPTY_VALUE」を使用します。例外は最初の初期化で、インジケータ・バッファがゼロで初期化されます(これはインジケータ "Fractals.mq5" によってではなく、MQL5 が配列を作成してインジケータ・バッファとリンクさせるときに行われます)。


 
novichok2018:

あなたの推薦文からも、どうすればいいのかよくわかりません。

Expert Advisor のためのフラクタル検索関数です。

https://www.mql5.com/ru/forum/160683/page968#comment_13214633

 
Vladimir Karputov:

本当にSECOND BARでキャッチする必要があるのか?

以下はそのテストです。


はい、ありがとうございます。3本目のバーで再描画しない。だけでは、問題の本質は変わりません。

 
Igor Makanu:

以下はフラクタル検索用の関数で、EA用ですが、私の場合はうまくいきました。

https://www.mql5.com/ru/forum/160683/page968#comment_13214633

ありがとうございます、うまくいきました。

新しいフラクタルの出現をコードに反映させる方法だけがわからないのです。なぜなら、barfrup_1 は barfrup_2 よりも常に小さいので、新しいフラクタルが現れたときに barfrup_1 の番号をジャンプさせても、barfrup_2 よりも小さいままなので、何も得られないからです。

もう一つ、barfrup_1 と barfrup_2 の高い値を抽出する方法がよくわかりません。

 
novichok2018:

もう一つ、barfrup_1 と barfrup_2 の高い値を抽出する方法がよくわかりません。

チャートにフラクタルインジケータを 投入し、この関数でテストEAを投入する

そして,見つかった値を私の関数MODE_UPPER と MODE_LOWER に渡して再印刷します。

novichok2018:

ありがとうございます、うまくいきました。

新しいフラクタルの発生をどのようにレンダリングするのかが、コード上では理解できないだけです。

新しいバーが表示されると番号が変わりますが、バーのオープンタイムは常に一定なので、バーの時間を覚えておく必要があります。

つまり、私のコードを開いたときに、フラクタルが検出されたバーの時間を覚えておいて、もう一度開いて、そのバーを見つけて、そのバーの時間を覚えていたものと比較します。時間が違っていれば、それは新しいフラクタルということです。