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

 
HistoryOrderGetInteger(OrderTicket,ORDER_TIME_DONE_MSC) - テスターでは0を返します!
 

審査官によるファイル開封のエラー。また、例えば

1. 「一部の無関係なコード」を削除(後述)

2.または削除 ::Sleep(1000)

エラーはない

//Test.mq5
#import "Test001.ex5"
        string f( string file );
#import
string __Period() { return StringSubstr( EnumToString((ENUM_TIMEFRAMES)Period()), 7 ); }
void OnInit()
{
        Print( Symbol(), ",", __Period(), ", результат=", f( "test.txt" ));
}

アクションのシーケンス。

1.新規プロファイルを作成する(例:"Test")

2. 新しいチャートを2つ開き、Test.ex5 Expert Advisorをその両方にアタッチします(写真参照)。

4.他の既存のプロファイルを選択する

5.テスト」プロファイルを選択する

の結果です。

Test001.mq5がこのような状態になっている。

//Test001.mq5
#property library
//---
//здесь некий код не имеющий отношения к делу
//---
string f( string file ) export
{
        ::ResetLastError();
        int hFile = ::FileOpen( file, FILE_READ | FILE_SHARE_READ | FILE_TXT | FILE_ANSI | FILE_COMMON );
        if ( hFile == INVALID_HANDLE )
                return ::StringFormat( "Error(%d): Не был открыт файл: %s", ::GetLastError(), file );
        ::Sleep( 1000 );
        ::FileClose( hFile );
        return "OK";
}
ファイル:
Test001.ex5  16 kb
 

test.txtファイル自体はメッセージに添付されていませんが、以下のような感じです。

追加情報:FILE_COMMONの 意味で開くべきファイルの場所 - エラーには影響しません。

 
Andrey Barinov:

これはコードの最適化です。

metaeditor.ini の [Experts] フィールドに OPTIMIZE=0 と書くと、4.のようなコンパイル速度になります。20秒でコンパイルできるプロジェクトもあれば、無限最適化ループに入るプロジェクトもあります :)

ワオ、ありがとう、相棒!さっきまでどこにいたんだよ!?) そして、ここで悶々とするのであった...。一番不思議なのは、開発者がこのオプションについて何も言っていないことです。
 
Alexey Navoykov:
ありがとうございます。今までどこにいたのよ!?) そして、私たちはここで苦しんでいる.不思議なのは、このオプションについて、開発者が沈黙していたことです。

サイレントではありません。このオプションについては、フォーラムに18ページのトピックが あり、ちょうど説明されています。

ちなみに、デバッグ用のコンパイルでは、最適化は有効ではありません。

 
Andrey Barinov:

これはコードの最適化です。

metaeditor.ini の [Experts] フィールドに OPTIMIZE=0 と書くと、4.のようなコンパイル速度になります。20秒でコンパイルできるプロジェクトもあれば、無限最適化ループに入るプロジェクトもあります :)

そのとおりです。とはいえ、私自身はいつぞやに1に 設定して、そのまま忘れていました。))

アレクセイ・ナヴォイコフ
...そして、ここでもまだ苦労している...。不思議なのは、開発者がこのオプションについて何も言っていないことです。

x64プラットフォーム向け新MQL5コンパイラのテスト - 2倍から10倍にスピードアップ!」というテーマで詳細が議論されました。

>> 忘れてました。)

最初はこの最適化もうまくいかなかったんです。つまり、コンパイルに失敗する場合が あるのです。しかし、その後、なんとかその理由を 見つけることができました。その後、修正されたので、ある端末でパラメータを1に 設定し、忘れていたのです。そして昨日、あるMT5エディタと別のMT5エディタとでコンパイルがずっと速いのはなぜだろうと考えていました。

//---

現在、0に 設定すると、コンパイルが〜25倍速くなりました。

0 error(s), 0 warning(s), compile time: 668 msec                1       1
 
Anatoli Kazharski:

もちろん、MetaTrader 5の 最も複雑なプロジェクトも、コンパイルに長い時間がかかっています。最大で11 秒かかることさえある。全く同じバージョンですが、MetaTrader 4では 最大25 倍高速化することができます。

MT5では、コンパイラがより進化し、コードを最適化することで、最大10倍高速に動作するようになりました。以前にも記事にし、解説しています。

MQL5コンパイラは、互換性のために、古い32ビット版(完全最適化なし)と64ビット用の最大最適化版の2つのコードのコピーを作成する必要があります。64ビットでこそ、MQL5の実力は発揮されるのです。

 
Renat Fatkhullin:

MT5のコンパイラはより高度で、コードを最適化し、MT5よりも最大10倍速く動作するようにします。

さらに、コンパイラは互換性のために、古い32ビット版(完全最適化なし)と64ビット用の最大最適化版の2つのコードのコピーを作成する必要があります。64ビットでこそ、MQL5の実力は発揮されるのです。

ありがとうございます。このようなことが議論されたスレッドについては、すでに記憶を呼び覚ましています。

コンパイルを行うことが多く、10 秒待つのは非常に面倒なので、開発時は0に する予定です。そして、最終的な総集編の前の最終製品に、1を つける。

 
Renat Fatkhullin:

MT5では、コンパイラがより進化し、コードを最適化することで、最大10倍高速に動作するようになりました。以前にも書いて説明したことがあります。

MQL5コンパイラは、互換性のために、古い32ビット版(完全最適化なし)と64ビット用の最大最適化版の2つのコードのコピーを作成する必要があります。64ビットでこそ、MQL5の実力は発揮されるのです。

MetaEditorの実行中にOPTIMIZE パラメータを変更した場合、設定を受け入れるためにリロードする必要があるのかない のか?
 
coderex:
MetaEditorの実行中にOPTIMIZE パラメータを変更した場合、設定を受け入れるためにリロードする必要があるのかない のか?
自分でやってみるのが手っ取り早いですからね。今、テストしてみました。エディタを再起動する必要はありません。