インディケータ: Fractal_TL

 

Fractal_TL:

与えられた時間枠のフラクタルに基づいてトレンドラインを自動的に描画するための指標です。


作者: Almat Kaldybay

 

こんにちは。

貴社のインジケーターに興味があります。しかし、"TL_Support "と "TL_Resistance "の行を、直近の2つのフラクタルではなく、直近のフラクタルと次の上位/下位のフラクタルで構築する必要があります。

コードに変更を加えました。オンラインでは問題なく動作しますが、テスターでは動作しません。最初の構築をしてフリーズしてしまいます。MT5のテスターで変更したインディケータを動作させる方法を教えていただけませんか?

以下にコードを引用しますが、変更箇所は黄色でハイライトされています。

//+------------------------------------------------------------------+
//| フラクタル値の検索|
//+------------------------------------------------------------------+
// --- 最初の上のフラクタル図形を探す
   for(n=0; n<Bars(Symbol(),base_tf); n++)
     {
      // --- 値が空でなければ、ループを終了する。
      if(FractalUp_base[n]!=EMPTY_VALUE)
         break;
     }
   UpFractal_1_base=FractalUp_base[n];// --- 最初のフラクタルの価格値を変数に書き込む
   UpperFractal_1_base=n;// --- 最初のフラクタルのインデックスを変数に書き込む。
                         // --- 
// --- 2番目の上のフラクタル図形を探す
   for(n=UpperFractal_1_base+1; n<Bars(Symbol(),base_tf); n++)
     {
      // --- 値が空でなければ、ループを終了する。
      if(
         FractalUp_base[n]!=EMPTY_VALUE
         &&
         FractalUp_base[n]>UpFractal_1_base
         )
          break;
     }
   UpFractal_2_base=FractalUp_base[n]; // --- 2番目のフラクタルの価格値を変数に書き込む
   UpperFractal_2_base=n;// --- 2番目のフラクタルのインデックスを変数に書き込む。
                         // ---
// --- 最初の下位フラクタルを探す
   for(n=0; n<Bars(Symbol(),base_tf); n++)
     {
      // --- 値が空でなければ、ループを終了する。
      if(FractalDown_base[n]!=EMPTY_VALUE)
         break;
     }
   LowFractal_1_base=FractalDown_base[n];// --- 最初のフラクタルの価格値を変数に書き込む
   LowerFractal_1_base=n;// --- 最初のフラクタルのインデックスを変数に書き込む。
                         // --- 
// --- 2番目の下のフラクタル図形を探す
   for(n=LowerFractal_1_base+1; n<Bars(Symbol(),base_tf); n++)
     {
      // --- 値が空でなければ、ループを終了する。
      if(
         FractalDown_base[n]!=EMPTY_VALUE
         && 
         FractalDown_base[n]<LowFractal_1_base
         )
          break;
     }
   LowFractal_2_base=FractalDown_base[n];// --- 2番目のフラクタルの価格値を変数に書き込む
   LowerFractal_2_base=n;// --- 2番目のフラクタルのインデックスを変数に書き込む。
//--- 
 

私自身は確認していないが、オブジェクトが作成されるライン自体を描画するためのより良い条件を追加してみてください。例えば、サポートラインの場合:

//--- サポートラインの作成
if (LowFractal_1_base<LowFractal_2_base)//最初に見つかったフラクタルの価格が、2番目に見つかったフラクタルの価格より低ければ、線を引く。
{
   ObjectCreate(0,"TL_Support",OBJ_TREND,0,LowFractalTime_2_base[0],LowFractal_2_base,LowFractalTime_1_base[0],LowFractal_1_base);
   ObjectSetInteger(0,"TL_Support",OBJPROP_RAY_RIGHT,true);
   ObjectSetInteger(0,"TL_Support",OBJPROP_COLOR,Support_Color);
   ObjectSetInteger(0,"TL_Support",OBJPROP_STYLE,Support_Style);
   ObjectSetInteger(0,"TL_Support",OBJPROP_WIDTH,Support_Width);
}
 
Almat Kaldybay:

私自身は確認していないが、オブジェクトが作成されるライン自体を描画するためのより良い条件を追加してみてください。例えば、サポートラインの場合:

こんにちは、コメントありがとうございます。このアイデアは良いのですが、支持線については、(私が実装しようとしているロジックによれば)条件は逆であるべきで、2番目に見つかったフラクタルの安値が1番目のフラクタルの安値よりも低く、2番目のフラクタルの候補で安値が1番目のフラクタルの安値よりも高いものはすべて無視されるべきです。

また、この方法をとるなら、描画ブロックの設計をやり直さなければならない。せっかくの美しいコードも、エレガントさを失ってしまうだろう。

この投稿にコメントを書いた理由はもう一つあります。プログラムは完璧に動作し、実際の見積もりでは時間通りにバグなくすべてが完璧に描画されます。何か不明な点があると、それが気になってストレスになるので、それを解決したいのです。

もっと有能な同志がテスターのこのような動作の理由を指摘してくれれば、非常にありがたい。

ファイル:
Fractal_TL.mq5  21 kb
 
Sergey Voytsekhovsky:

こんにちは、コメントありがとうございます。そのアイデアは良いのですが、サポートラインについては、(私が実装しようとしているロジックによれば)条件は逆であるべきで、2番目に見つかったフラクタルの安値が1番目のフラクタルの安値より低くなければならず、安値が1番目のフラクタルの安値より高い2番目のフラクタルの候補はすべて無視されるべきです。

また、この方法を取る場合、描画ブロックを再設計する必要があります。美しい、IMHO、コードはそのエレガンスを失うだろう。

この投稿にコメントを書いた理由はもう一つあります。プログラムは完璧に動作し、実際の見積もりでは時間通りにバグもなくすべてが完璧に描画されます。何か不明な点があると、それが気になってストレスになる。

もっと有能な同志がテスターのこのような動作の理由を指摘してくれれば非常にありがたい。

どうやら、FractalDown_base[]配列と衝突しているようだ。上のフラクタルでは 発生しないのが不思議です。とにかく、私はあなたの比較を少し修正しました:

   for(n=LowerFractal_1_base+1; n<Bars(Symbol(),base_tf); n++)
     {
      // --- 値が空でない場合、ループを終了する。
      if(FractalDown_base[n]!=EMPTY_VALUE 
      && FractalDown_base[n]<Low_base_tf[LowerFractal_1_base]
      )
      break;
     }

つまり、HighとLowの定義を追加し、すでにそれらと比較しています。こうすることで、テスターではすべてうまくいきます。修正したファイルを添付します。

ファイル:
 
Almat Kaldybay:

どうやら FractalDown_base[] 配列と衝突しているようだ。不思議なことに、一番上のフラクタルでは発生しない。とにかく、比較を少し変えてみた:

つまり、HighとLowの定義を追加し、すでにそれらと比較しています。こうするとテスターではすべてうまくいきます。変更したファイルを添付します。

こんにちは、お時間とご配慮をありがとうございました。添付ファイルをアップロードしました。残念なことに、テスターはまだ正しく動作せず、インジケーターは最初の構築を行い、抵抗線と支持線を再構築しなくなり、フラクタルを表示しません。試しに、コメントにHigh_base_tf[UpperFractal_1_base]とLow_base_tf[LowerFractal_1_base]を出力してみました。これは正しくカウントされ、ロジックはすべて正常である。どうやら描画のどこかに障害が潜んでいるようだ。

新しいフラクタルは形成されるが、線は再構築されないことを示す画面スキャンをリンク先に添付する。

***

そこでは線 Low_base_tf[LowerFractal_1_base]とその値も見ることができ、LowFractal_1_baseの値と比較することができる(低い値の場合、高い値の場合も同様)。すべてが正しくカウントされますが、新しい構成はありません。

 
Sergey Voytsekhovsky:


新しいフラクタルが形成されたことを示す画面スキャンだが、線は再配列されていない。

***


残念ながらリンクは削除されました。

 
Sergey Voytsekhovsky:

残念ながらリンクは削除されました。

第三者のサイトへのリンクは禁止されています。

 
Vladimir Karputov:

第三者のサイトへのリンクは禁止されています。

テスターの画面をスキャンして投稿したいのですが。PDFでしか出せないのですが、このフォーマットはフォーラムでは受け付けられないと理解しています。

 
Sergey Voytsekhovsky:

テスターの画面スキャンはどうすれば投稿できますか?PDFでしか出せないのですが、このフォーマットはフォーラムでは受け付けられないと理解しています。

スクリーンショットは画像です。PDFと何の関係があるのですか?スクリーンショットをpng画像として保存し、その画像を 投稿に貼り付けて ください。

 
Vladimir Karputov:

第三者のサイトへのリンクは禁止されています。

ウラジミール、こんばんは。あなたの出版物や作品から判断すると、あなたは経験豊富なプログラマーです。このスレッドの本質について助言していただけませんか。プログラムはテスターでは動作しませんが、オンラインチャートでは正しく動作します。作者は忙しそうで応答しません。