確かに無限ループですが、それがアイデアなのです。
すべてのシンボルを循環させ続けるためです。
以下のコードは3秒ごとに実行されます。
以下はコードの断片です(デモのため、すべて1つのメソッドになっています)。
void OnTimer() { // Find next symbol long symbolsTotal = SymbolsTotal(false); long count = GlobalVariableGet("testmem"); if(count >= symbolsTotal) { count = 0; } string newSymbol = SymbolName(count, false); SymbolSelect(newSymbol, true); count++; GlobalVariableSet("testmem", count); // Change chart symbol ChartSetSymbolPeriod(0, newSymbol, Period()); // Remove other symbols from Market Watch CArrayString *symbols = new CArrayString(); for(int i = 0; i < SymbolsTotal(true); i++) { string symbol = SymbolName(i, true); // Get name from local market watch symbols.Add(symbol); } int total = symbols.Total(); for(int i = 0; i < total; i++) { string symbolToRemove = symbols.At(i); // Is the symbol not the current chart or about to // be added? if(newSymbol != symbolToRemove) { // Remove from Market Watch SymbolSelect(symbolToRemove, false); } } delete symbols; }
シンボル」が何を意味するのかわかりませんが、上記のコードはExecuteTimer()が3秒に設定された新しいExpert Advisorの中に入っています。
以下はそのコードです(これはEA内のものです)。
int OnInit()
{
//--- タイマーを作成する
EventSetTimer(3);
//---
return(INIT_SUCCEEDED);
}
スクリプトの全容は添付ファイル「ForumQuestion1.mq5」をご覧ください。
エラーを再現する手順
- Metatrader5用の添付のスクリプトをMetaeditorで開く(安全です)。
- Windowsのタスクマネージャーを開く
- Metatrader 5 Client Terminal "を探し、メモリ量を記録する。
- スクリプトを実行し、タスク・マネージャのメモリ・カラムを確認します。
スクリプトがシンボルを循環するにつれて、メモリはゆっくりと増加します。
こんにちは。
添付ファイルの "ForumQuestion1.mq5 "にスクリプトの全容を追加しました。
エラーを再現する手順
- Metatrader5用の添付のスクリプトをMetaeditorで開く(安全です)。
- Windowsのタスクマネージャーを開く
- Metatrader 5 Client Terminal "を探し、メモリ量を記録する。
- スクリプトを実行し、タスク・マネージャのメモリ・カラムを確認します。
スクリプトがシンボルを循環するにつれて、メモリはゆっくりと増加します。
あなたのコードを試しましたが、メモリの問題はありません。
MT5 Build 1325です。
Alainさん、こんにちは。
回答ありがとうございます。
私も同じビルドでやっています。メモリの増設は遅いです。数分かかります。基本的には徐々に増えていきます。
添付ファイルの "Memory increase.docx.png "をご覧ください。時間の経過とともに蓄積されていく様子を示すスクリーンショットがいくつか含まれています。
同じビルドの "MT5 Build 1325 "を使用しています。
マシン情報です。
- Windows 8.1 Enterprise
- 64ビットOS
- 16Gb RAM
- i7プロセッサ
ありがとうございます。
アランさん、こんにちは。
回答ありがとうございます。
私も同じビルドでやっています。メモリの増設は遅いです。数分かかります。基本的には徐々に増えていきます。
添付ファイルの "Memory increase.docx.png "をご覧ください。時間が経つにつれて増えていく様子がわかるスクリーンショットがいくつかあります。
同じビルドの "MT5 Build 1325 "を使用しています。
マシン情報
- Windows 8.1 Enterprise
- 64ビットOS
- 16Gb RAM
- i7プロセッサ
ありがとうございます。
私はWindows 10を使用しています。
あなたのスクリプトは、私の前の投稿の数分前から実行されています。現在、メモリ使用量は起動時よりも少なくなっています(300Mbに対して280Mb)。
EDIT: 今もう一度確認 したら、189 Mb になっていました!!まだ減っています :D
EDIT2: Metaquotes Demo-Server で実行中です。
フィードバックありがとうございます。
Windows 10にアップグレードして、違いがあるかどうか見てみようと思います。
Windows Server 12 R2に乗せたら、これもメモリが押し上げられました。
しばらく監視して、このスレッドにフィードバックさせてください。

- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
Expert Advisorでシンボルを循環させるように設定しているのですが、メモリを大量に消費してしまいます。
これは、シンボルがMarket Watchにロードされたりアウトされたりするときに、徐々に増加することに気づきました。 つまり、Market Watchの既存のアイテムを通じてチャートが循環するのではなく、新しいシンボルがロードされたり削除されたりするときに、より多くなるのです。
以下のように設定されています。
カスタムコードをできるだけ削除し、上記の手順で利用可能なシンボルを通してチャートを循環させると、私のマシンのメモリ使用量が増え続けていることに気づきました。
CPUは一定ですが、メモリはどんどん増えていきます。
質問
(例えば、ChartSetSymbolPeriod()で既存のチャートを使用する代わりに、ChartOpen()で新しいチャートを開くなど)
(つまり、これは単に動作する方法なのでしょうか)
ありがとうございました。