エラー、バグ、質問 - ページ 589

 
Ashes:

枠にとらわれない発想が必要(c)

クラウドを別途運用することの禁忌はないと思います(価格以外)。

クラウド上でスタンドアロンで実行すると、多くの場合、ローカルコア上よりも遅くなります。
 
joo:
クラウドでの個々の実行は、多くの場合、ローカルコアよりも遅くなります。
上記https://www.mql5.com/ru/forum/1111/page598#comment_125691 はシナリオです。CANという言葉に注目してください。限定は遠回しに言っているようです。
 

問題が発生しました。

インジケータのOnCalculate() 内のコードに、以下のような行があります。

ArrayInitialize(FractalsBuffer,EMPTY_VALUE);
FractalsBufferは補助的な計算バッファではなく、グラフィカルなプロットを 直接担当するメインバッファなので、必ずリンクされていなければならない。
SetIndexBuffer(0,FractalsBuffer,INDICATOR_DATA);

されていること。しかし、バインド機能には何らかの直接的な効果があり、それが(悪い意味で)副作用として作用することもある。CopyBuffer(ind_handle,0,0,amount,FractalsBuffer) を通して、バッファはタイムフレームの履歴の全長ではなく、その小さなセグメントから部分的に、量だけ 満たされます。しかしArraySize(FractalsBuffer) は、バッファのサイズ (つまり占有する物理メモリ) が履歴全体のバーの数に対応する、つまり最終的には非効率な部分を含めて完全に占有されることを明確に納得させます。もちろん、ループの後半でバッファの値を扱う場合は、バッファ全体を検索する必要はなく、必要な制限値を指定して、その制限値内で作業すればよい。しかし、第一に、恐ろしいメモリのオーバーロケーションを 打ち消すことはできないし、第二に、コード内の必然的な関数は ArrayInitializeが 必要な値でバッファを部分的に初期化することができない。となると、完全な再初期化に時間とワット数を 費やさなければなりません。そのため、インジケーターの動作が著しく遅く なります。そして3つ目は、 ArrayResize 関数の説明から引用します。「そして. SetIndexBuffer() 関数で指標バッファとして割り当てられた動的配列のサイズを変更できない。."SetIndexBuffer "を 拒否して、ArrayResizeを使ってバッファサイズを手動で操作 すると インジケータ・チャート自体が崩れて しまうのだそうです。

回復のためのレシピを提案してください。あ るいは、この問題を言語そのもので解決するためのアプリケーションとして考えてください。
 
x100intraday:

なんだか、ごちゃごちゃしてますね・・・。

1. バッファの初期化は、開始時に一度だけ行うのが合理的です if(prev_calculated==0)

2.PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,rates_total-amount-1) のように、どのバーからデータを描画するかを設定することができます。

3.量内のバッファの値はすべて明示的に、履歴を通して一度だけ、新しい値だけを割り当てるべきで、その後は初期化する必要はない。

4.端末の 設定で、ウィンドウのバーの数を減らしてください :)

 
Swan:

なんだか、ごちゃごちゃしてますね・・・。

1. バッファを一旦初期化するのは意味がある、開始時に if(prev_calculated==0)

2.PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,rates_total-amount-1) のように、どのバーからデータを描画するかを設定することができます。

3.量の範囲内でバッファ内のすべての値を明示的に割り当てる必要があり、全履歴を通じて一度、新しい値のみが割り当てられ、その後、初期化の必要はありません。

4.端末の 設定で、ウィンドウのバーの数を減らしてください :)

1.本当に:アイデアレベルでは - 一度だけ行うことは理にかなっていますが、実際にはそれほど単純ではなく、すべてが本当に実行されています。I just copied from standard indicator:C:\Program FilesMetaTrader 5 ↪MQL5↩Indicators゙ExamplesFractals.mq5.新しい計算の前にバッファをクリアする方法は、別の方法で、より効果的に行うことができます - 私は知りません。

2.この可能性はまだ調べていませんが、不要なゾーンにインジケータを描画しないように見えますが、インジケータバッファのサイズを制限するものではありません。さらに、私は、境界まで有用なデータで満たされたバッファで、自由なマージンなしに作業したいのです。そうでなければ、私は境界を導入しなければなりませんし(それについては以前の投稿でお話しました)、それは正統派アルゴリズムに適合しません。もっとも、松葉杖で這うこともできるのだが......。

3.明示的とはどういう意味ですか?明示的に割り当てないというのは、全く保証できません。露骨に流用しているのかもしれませんね。説明する?新しい値だけを読み込むことについては、もちろん使っています。ここではパーシモン(parsimonious)アルゴリズムと呼んでいます。

4.このアイデアは、前の記事を書く前に却下されました。なぜなら、このインジケータは履歴の最後の(新しい)バーをいくつか必要とするのに対し、私個人にとっては(視覚的側面)すべてのバー、またはほぼすべてのバーが必要だからです。ヒストリーバーに対する私の人間的な興味は、ヒストリーバーに対するテクニカル指標の興味よりも広いものです。1つのチャートの中でバーを見てインジケータを描きたいのですが。気まぐれ?普通のニーズ。

 
x100intraday:

1.本当に:アイデアレベルでは一度だけやることに意味があるのですが、実際にはそんなに単純ではなく、すべてが本当に動いているのです。I just copied from standard indicator:C:\Program FilesMetaTrader 5 ↪MQL5↩Indicators゙ExamplesFractals.mq5.新しい計算の前にバッファをクリアする方法は、別の方法で、より効果的に行うことができます - 私は知りません。

   if(prev_calculated<7)// if(prev_calculated==0)// if(prev_calculated<1)// вопщем одинаково)
      //Initialize только при первом запуске. нуу или при случае какогнить ахтунга)
      {
      limit=2;//цикл начинается со второго элемента индикаторного массива
      //--- clean up arrays//в принципе здесь не очистка массива, 
                        //а значения EMPTY_VALUE  присваивается 0 и 1 элементу массивов, мм.. и на последних трёх барах)
                        //остальные определяются далее в цикле..
      ArrayInitialize(ExtUpperBuffer,EMPTY_VALUE);
      ArrayInitialize(ExtLowerBuffer,EMPTY_VALUE);
      }
   else limit=rates_total-5;//иначе - в цикле пересчитываются только два последних значения

//зы: при появлении нового бара - новый элемент массива вроде как не определен, насколько мне известно не гарантируется, что он будет  ==EMPTY_VALUE
2.この可能性はまだ調べていませんが、不要なゾーンにインジケータを描画しないように見えますが、インジケータバッファの サイズを制限するものではありません。さらに、私は有用なデータでしっかりと満たされたバッファで、余白なく作業したいのです。そうでなければ、(前回の投稿でお話した)境界を導入しなければなりませんし、正統派のアルゴリズムには合いません。4つのバッファのうち3つは、同じ境界で1ループでスキャンし、一つのバッファについては、時間をかけて別の境界で曲線ループしなければならず、ほとんど詰め込むことができません。もっとも、松葉杖でも這うことはできるのだが......。

まあ、そうですね、そうすべきです。

インジケータ・バッファのサイズは、バーの数によってのみ定義されます。

いずれにせよ、ある程度の大きさを設定する必要がありそうです......。同じ境界のまっすぐなループを作ることができるのに、なぜ境界の異なる曲がったループを作るのか)

つまり、配列のサイズではなく、ループのサイズを指定する必要があります。そうしないと、インジケータは松葉杖に基づくものになります


3)「明示的に」とはどういう意味ですか?明示的に割り当てないという保証は絶対にできない。それは、私が明示的にしていることかもしれません。説明する?新しい値だけを読み込むことについては、もちろんそうしています。ここではパーシモン(parsimonious)アルゴリズムと呼んでいます。
      //---- 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;//не выполняется - таки тоже присваиваем значение)
//нет зависимости от Initialize, всем элементам в цикле явно присваивается значение.

倹約アルゴリズムについてですが、使ってみていかがですか?

この指標は、すべてのバーに対して一度だけ計算されます。つまり、農耕の履歴で起動すると、少し遅くなることがあります。

その後、いくつかの値を再計算すると、すべてうまくいくはずです。)

 
Cmu4:

インジケーターのバグって何?来たり来なかったり。しかも、別ウィンドウのものだけ!!!

インジケーターが消えた時のスクリーンショットを掲載します。時々消えては現れる......恣意的に。動画もありますよ...。

注意!基本指標が消える!!!?そのバグが重大であることを意味します。カスタムインジケーターにも同じ問題があります。

開発者の皆さん、このバグを直してください、お願いします、なんとなく不愉快です・・・。

残念ながら、スクリーンショットには表示されません。

どのサーバー?アクセスサーバーとは?何月何日?当時、ストーリーはページングされていたのでしょうか?

今、また起こっているのでしょうか?この日の端末ログを添付してもらえますか?

 

開発者の皆様、MQL5 コンパイラに不快なエラー(欠陥)を発見しました。

次のような形式の条件構成体を使用する場合

if (条件);

{演算子_1

......

Operator_N }.

コンパイル時にエラーや警告が発生することはありません。

しかし、条件の直後に" ; " (スペースあり・なし)があるため、{operator_1...operator_N}が常に実行されることになります。

MQL4では 警告が表示されるが、MQL5でも エラーや警告を表示してほしい。(自分のコードのどこが問題なのか調べるのに半日もかかってしまった)

ご感想をお寄せいただきありがとうございました。

 
Fia:

開発者の皆様、MQL5 コンパイラに不快なエラー(欠陥)を発見しました。

次のような形式の条件構成を使用する場合

if (条件);

{演算子_1

......

Operator_N }.

コンパイル時にエラーや警告が発生することはありません。

しかし、条件の直後に" ; " (スペースあり・なし)があるため、{operator_1...operator_N}が常に実行されることになります。

MQL4では 警告が表示されるが、MQL5でも エラーや警告を表示してほしい。(自分のコードのどこが問題なのか調べるのに半日もかかってしまった)

ご感想をお寄せいただきありがとうございました。


この場合、すべてが有効です。は空の演算子 である。

ご指摘の件(ボーニングの発行)については検討しますが、現時点では最優先事項ではありません。

Документация по MQL5: Основы языка / Операторы / Оператор-выражение
Документация по MQL5: Основы языка / Операторы / Оператор-выражение
  • www.mql5.com
Основы языка / Операторы / Оператор-выражение - Документация по MQL5
 
alexvd:

この場合、すべてが有効です。は空の演算子 である。

ご指摘の件(ボーニングの発行)については、検討させていただきますが、現時点では最優先事項ではありません。

MQL4では論理的に行われていたので、忘れずにやってほしいです。


2つの保留中の注文(価格、種類、約定数量が同じ)を考慮するようアドバイスいただけないでしょうか。

価格に達すると、両方のイベントがトリガーされます。この場合、OnTrade()イベントはどのように機能するのでしょうか?

特に、約定した保留中の注文は、1回のOnTrade()イベントで履歴に残るのでしょうか、それとも2回の呼び出しがあるのでしょうか?(私のログではなぜか1コールになっています)

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