MQL5でiClose/iOpenの時系列アクセスなどを操作した場合の不具合。 - ページ 3

 
例えば、開発者が明らかにプロで、アーキテクチャや速度最適化の専門家であることを考えると、このような関数を正しい方法で書いて標準ライブラリ に入れることは難しいことではないはずで、ありがたいユーザーは非常に感謝することでしょう。
 
Renat Fatkhullin:

あなたの指標は途方もなく遅い受信/再生ティック、1ティックのためにミリ秒あるいは秒の数百を費やしているときにデータが(より多くのそれは保証されている)、利用可能になる場所を考えてみてください。その結果、どのCPUもティックを処理する時間が足りず、赤字が累積し、チャート履歴が滞ることになる。

ギブ保証」というのは、「何も知りたくない、好きなように書き続けたい、パフォーマンスやロックのことは考えたくない、ただギブしてくれ」という要望である可能性が高いのではないでしょうか?


何百万本ものバーが使えるようになったら、自分や他の人の指標のパフォーマンスを考えてみてください。下手で高価なインジケータは、そのシンボルのチャート更新を簡単に停止させることができます。

まず、OnCalculateの応答時間をマイクロ秒単位で測定します。次に、1秒を平均ティック応答時間で割ると、インジケータの最大ティック処理能力が1秒あたりのティック数で得られます。

これはすぐに身が引き締まる思いです。

ゼロバーの再計算や、ゼロバーの中の聖杯がお好きな方は、既存のバージョンをご利用ください。OnInitに新しい関数を追加 - iOnCalculate - iCustomのように、インジケータ内のTF関数/ OnCalculateの1つへのハンドル、しかしそれはわずかに近い、OnCalculate上のインジケータバッファは ハンドルiOnCalculateにバインドされていなければなりません。OnCalculateなどのインジケータ関数では、新しいティックバーのみを送信します。ターミナルは何も変わりません。OnCalculateの基本ロジックは同じで、インジケータのメインボディがOnMainなどに追加されます。 (現在、すべてはリソースとしてメインインジケータに添付され、新しいバーでそこから呼び出されるインジケータによって行われます)。

 
transcendreamer:


必ずしも超高速が必要なわけではなく、使い勝手も非常に重要です。今、多通貨のインディケータを 書くのは「手で太陽を沈める」ようなものです。MT4でもi機能でゆっくりでも、いつでも取得できたので簡単でしたが、MT5では取得できるかできないか、しかも特別なコードを自分で作らないといけない。

理屈は抜きにして。

再現したい例を提出するだけで、あなたのケースの周りにあるホラーを確認することができます。今のところ、性能を全く無視し、キラーリタード指標を隠し、影を落とそうとしているようにしか見えない。

 
Renat Fatkhullin:

理屈は抜きにして。

再現する例を提示するだけで、どんなホラーに包まれるのかがわかります。今のところ、性能を全く無視し、キラーリタードの指標を隠し、影を落とそうとしているように見えます。


添付の例は、完成されたコードではなく、不完全なところもありますが、実行することは可能です。

私はプログラマーではないので、コードが最適でないことは確かです。

私は本当に上記のように同期された配列を構築するようなシンプルで信頼性の高い関数が欲しいのです https://www.mql5.com/ru/forum/289897/page2#comment_9363454.

文句を言うわけでもなく、自分のインジケータを書けというわけでもなく、ただ(ちなみに私だけではなく)素敵な標準関数が欲しいだけなのです。


EDIT: 添付ファイルを修正しました。

Баг MQL5 при работе c доступом к таймсериям iClose/iOpen и т.д.
Баг MQL5 при работе c доступом к таймсериям iClose/iOpen и т.д.
  • 2018.11.14
  • www.mql5.com
Общее обсуждение: Баг MQL5 при работе c доступом к таймсериям iClose/iOpen и т.д.
ファイル:
 
Renat Fatkhullin:

私のアドバイス通りにしてください。

それ以外の場合は、100%再生するためのフルマテリアルが必要です。

バグレポートに対する姿勢がおかしい。何かを証明するためにお金をもらっているわけではありません。私は、できる限り状況を説明した。

私だけの問題ではなく、30回目のアップデートの後に問題が発生したのですが、それでもあなたは私を馬鹿にして、一部の動きの遅いインジケーターのせいだとほざいていますね。

その前の1年間は遅かったのでは?

以下は、M30で25分後にハングアップするコードの例です。

//+------------------------------------------------------------------+
//|                                                      Feezzzz.mq5 |
//|                                   Copyright 2018, Dray Stanislav |
//|                               https://www.mql5.com/ru/users/fan9 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, Dray Stanislav"
#property link      "https://www.mql5.com/ru/users/fan9"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
    datetime CM1_T[1];
    if(CopyTime(_Symbol,PERIOD_M1,0,1,CM1_T)==-1){
      Comment("\n\n CopyTime return -1");
      return;
    }
    Comment("\n\n CopyTime : "+TimeToString(CM1_T[0],TIME_DATE | TIME_SECONDS));   
  }
//+------------------------------------------------------------------+
//| Trade function                                                   |
//+------------------------------------------------------------------+
void OnTrade()
  {
//---
   
  }
//+------------------------------------------------------------------+

そして、その結果がこれです。

1

 
transcendreamer:


添付の例は、まだ完全なコードではなく、書かれていないところもありますが、実行できますので、便宜上、テンプレートも添付しておきます。

私はプログラマーではないので、コードが最適でないことは確かですが、私は人道的な経済学者です。

私は本当に上記のように同期された配列を構築するようなシンプルで信頼性の高い関数が欲しいのです https://www.mql5.com/ru/forum/289897/page2#comment_9363454.

文句を言うわけでもなく、迷惑をかけるわけでもない。

文句を言うわけでもなく、自分のインジケータを書いてくれというわけでもなく、ただ(ちなみに私だけではなく)素敵な標準関数が欲しいだけなのです。


EDIT: 添付ファイルを修正しました。

ありがとうございます、これから確認します。
 
Stanislav Dray:

バグレポートに対する姿勢がおかしい。何かを証明するためにお金をもらっているわけではありません。できる限り状況を説明したつもりです。

このスレッドで私が先に書いたことは、何らバグレポートとして適格ではありません。

全ては、技術的な詳細を伴わないクレームのパターンで進んでいった。その詳細が明らかになったのは、私が問い合わせてからだ。

 
Stanislav Dray:

バグレポートに対する姿勢がおかしい。何かを証明するためにお金をもらっているわけではありません。できる限り状況を説明したつもりです。

この問題は私だけの問題ではなく、30回目のアップデートの後に発生したのですが、それでもあなたは私が馬鹿だとほざき、一部の遅れたインジケーターのせいにしました。

その前の1年間は遅かったのでは?

以下は、M30で25分後にハングアップするコードの例です。

そして、その結果がこれです。


アップロード

2018.11.14 17:33:32.570 Experts expert Feezzzz (USDCHF,M30) loaded successfully

現在18.10 すべてがうまくいっています。


 
transcendreamer:


例を添付します、まだ完全なコードではありません、ところどころ書き足らないところがありますが、実行できます、便宜上テンプレートも添付します。

コードと作品を一度にお見せします。

  1. インジケータのCopyXXX関数は、完全な同期データのダウンロードを待たず、利用可能なものを提供します。そうでなければ、インジケータはすべてを完全に凍結してしまうでしょう。

  2. どうやら、初回にすべてのデータが同期されていない場合、フォローアップに問題があるようです。
    ダウンロードが成功するのをじっくり待つ」という優しいモードに変更する必要があるのです。例えば、OnCalculateは 呼び出されない。

  3. 悪い点は、最大の負荷がかかるグローバルな初期化が、インジケータがカウントして待つのに非常に長い時間がかかるOnInitに置かれていることです。
    この場合、このシンボルのチャートの更新はブロックされ、他の多くの参加者は新鮮なデータを受け取ることなく待機しなければなりません。インジケータは長時間リソースを取らないようにする必要があります。OnCalculateで長い初期化ステップを一歩一歩カウントしながら伸ばしていく・シンボル初期化するのがよいでしょう。

  4. このインジケーターは、同期のためにネットワーク経由で約800MBのヒストリカルデータを送り出しているんだ

  5. インジケータには512本の描画線があり、そのために明示的にメモリが割り当てられている。これは非常に高価なものです。使用するのは100ラインのみ。

  6. コードの可読性が悪い


 
Stanislav Dray:

バグレポートに対する姿勢がおかしい。何かを証明するためにお金をもらっているわけではありません。できる限り状況を説明したつもりです。

この問題は私だけの問題ではなく、30回目のアップデートの後に発生したのですが、それでもあなたは私が馬鹿だとほざき、一部の遅れたインジケーターのせいにしました。

その前の1年間は遅かったのでは?

以下は、M30で25分後にハングアップするコードの例です。

そして、その結果がこれです。

そのコードを実行に移しました。今のところ順調です。

ちなみに本文のないファイル。