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

 
vikulin:

これは同じ結果です!これらのポイントの入力パラメータは同じです。

説明してください。これらの点の入力パラメータは同じである」というのがよくわからないのですが。私が理解する限り、オプティマイザーの動作は、各パスが固有の入力パラメータのセットに対応しています。それとも、遺伝的アルゴリズムを 使用する場合、1つの入力パラメータを何度もオプティマイザで処理できる場合がある、ということでしょうか?

...まあ、そうですね、まさにその通りなんですが。すると、それ以降の「キャッシュから」のポイントはすべてフィクションであり、最適化結果の視覚的な認識を歪めていることが判明したのですね。

 
sultanm:

不思議ですね。今回で3回目です。グラフ上では値が近い点が2つあるが、結果的には1つしかない。

ヒント:要求された値でソートし、表の縦スクロールバーを表示することを忘れないでください。

 

この問題は解決されるのでしょうか?

この話をするのは3回目なんですが、反応がないんですよね~。


 
vikulin:


ところで、requotesのモデリングを選択した場合、このキャッシュは使用しない方が良いように思うのですが、開発者の方は どのようにお考えでしょうか?

縦方向には正しく拡大縮小され、より高い結果が得られたことが理解できますが、横方向には更新されません。まるで、ポイントが右側のどこかに追加され、すでにグラフの外側にあるかのようです。

servicedeskにお書きください。そして、ポイント2は、完全な情報に興味があることです。EA、ターミナルビルド、最適化設定...。
 
コード
int symbols = SymbolsTotal(false);
for (int i=0; i<symbols; i++) {
   Print("Символ №"+i+" значение="+SymbolName(i,false));
}

端末では、その結果

2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №11 значение=GBPJPY
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №10 значение=GBPCHF
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №9 значение=EURJPY
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №8 значение=EURCHF
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №7 значение=EURAUD
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №6 значение=EURGBP
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №5 значение=AUDUSD
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №4 значение=USDCAD
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №3 значение=USDJPY
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №2 значение=USDCHF
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №1 значение=GBPUSD
2010.12.06 13:18:49   Expert (EURUSD,H1)    Символ №0 значение=EURUSD

テスターでの結果。

2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №11 значение=USDJPY
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №10 значение=USDCHF
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №9 значение=USDCAD
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №8 значение=GBPUSD
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №7 значение=GBPJPY
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №6 значение=GBPCHF
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №5 значение=EURUSD
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №4 значение=EURJPY
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №3 значение=EURGBP
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №2 значение=EURCHF
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №1 значение=EURAUD
2010.12.06 13:21:20     Core 1  2010.11.01 00:00:00   Символ №0 значение=AUDUSD

SymbolName(i)関数の美しさはすべて失われている

 
vyv:

開発者へのお願いです。MT5での作業は煮詰まっており、まだまだ変更が必要ですが、最適化パスの数を増やしていただけると非常にありがたいです。

私が理解した限りでは、多くのタスクの解は約1万個のバリアントで見つかりますが、それより少し多いか少ないかもしれません。1つのプロセッサで数時間検索して、最適なバリエーションが見つかりました。

MQL5+OP+Multicoreテストの汎用性により、MT5ツールを使用して解決できるタスク(例:パターンの検索)の新しい地平を見ることができます。

しかし、ここで困ったことになる。

あなたのサイトに掲載されている記事には、遺伝的アルゴリズムhttps://www.mql5.com/ru/articles/55 の例があり、100本のバーに関する探索問題を解くのに3^100のフォワードブルートフォースを要しました - まあLongIntより少し多いですね :) 一方、17 000回の繰り返しで解が見つかりました。遺伝的アルゴリズムでは、LongIntよりもはるかに多くのバリエーションに対して解を求めることができます。そして、この制限はまったく根拠がなく、時代遅れです。まあ、このMT5の最終段階では、それが難しいということを除けばね。

開発者の方に大変なお願いなのですが、もし難しいことでなければ、パスの数を最低でも2^LongInt(2の累乗)にしてください。

誰か答えを教えてくれませんか?
 

コード

//+------------------------------------------------------------------+
//|                                                      testInd.mq5 |
//|                                                                  |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright ""
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
   int handle1 = iMA(NULL,0,17,0,MODE_LWMA, PRICE_CLOSE); //
   int handle2 = iMA(NULL,0,17,0,MODE_LWMA, PRICE_CLOSE); //абсолютно идентичные параметры
   if(handle1 == INVALID_HANDLE) {
                Print("Error Creating Handles for indicators",GetLastError());
        } else {
                Print("Handle1 ="+handle1);
        }
        if(handle2 == INVALID_HANDLE) {
                Print("Error Creating Handles for indicators",GetLastError());
        } else {
                Print("Handle2 ="+handle2);
        }
        
   IndicatorRelease(handle2);
   handle2 = INVALID_HANDLE; //добавил для "надежности"
   handle2 = iMA(NULL,0,33,0,MODE_LWMA, PRICE_CLOSE); //другой период
        if(handle2 == INVALID_HANDLE) {
                Print("Error Creating Handles for indicators",GetLastError());
        } else {
                Print("Измененный? Handle2 ="+handle2); //все обращения к данным handle2 возвращают данные с handle1
        }
   
   
//---
   return(0);
  }

ログです。

2010.12.06 18:07:52:52 testInd (EURUSD,H1) Modified?Handle2 =10
2010.12.06 18:07:52 testInd (EURUSD,H1) Handle2 =10
2010.12.06 18:07:52 testInd (EURUSD,H1) Handle1 =10

したがって、handle2へのすべてのデータの呼び出しは、期間が変更されたにもかかわらず、handle1への呼び出しと同等である。

Expert Advisor が動作している場合、同じ特性を持つインディケータを作成 することが可能であり、1つのハンドルに対するこのような最適化は合理的ですが、このようなハンドルが変数に「固着」することは非常に迷惑な話です。

P.S. 原因がわかりました。このバグは、1つのハンドル番号に最適化した結果です。

IndicatorRelease(handle2); //уменьшает счетчик хендлов на единицу и в итоге следующий созданный хэндл(с любой переменной) - опять 10
 
Vigor:

コード

ログです。

2010.12.06 18:07:52 testInd (EURUSD,H1) Modified?ハンドルネーム2 =10
2010.12.06 18:07:52 testInd (EURUSD,H1) ハンドル2 =10
2010.12.06 18:07:52 testInd (EURUSD,H1) ハンドル1 =10

したがって、handle2への呼び出しは、周期は変わるものの、すべてhandle1への呼び出しと同じである。

EAを運用する中で、同じ特性を持つインジケータを作成することは否定できませんし、1つのハンドルに対する最適化は合理的ですが、このようにハンドルが変数に「張り付く」ことは非常に迷惑なことなのです。

P.S. 原因がわかりました。これはバグであり、1つのハンドル番号に最適化した結果である。

なぜ、バグだと思うのですか?

 
alexvd:

なぜ、バグだと思うのですか?

よかったです。機能である。しかし、あなたがよく知るべきは1つ。

ユーザーがインターフェイスからMAの期間値を入力し、指標のハンドルを作成し、指標バッファの値を使用する場合、同じ特性を持つ2つの指標(それらのハンドルはオブジェクトラッパーに格納されている)を作成した(例えば、私はこのフォームのデフォルト設定)、その人はこの機能により、最初の指標のハンドル番号を受け取ります。

以下のような連鎖が考えられます。

状況1.それは最初のインジケータを削除します(そしてプログラムはIndicatorReleaseを実行します)。その結果、2番目のインジケータは自動的に動作しません - バッファコピーエラー。

状況2.2番目のインジケータを取り除き(プログラムではIndicatorRelease)、ハンドホイールカウンタを減少させる。最初の1台は順調です。異なる周期で3つ目の インジケータが作成されます。ハンドルカウント+1、つまり削除されたばかりのインジケータのハンドル番号を受け取ります。結局、最悪なのは、作成に成功した 異なる 期間の3番目のインジケータが、まだ削除されていない最初の インジケータの値をバッファに与えて しまうことです。

ハンドル番号のグルーイング機能で、グルーイングされた2つのうち1つを削除し、新しいものを作成すると、あいまいな状況になることがある。

//+------------------------------------------------------------------+
//|                                                      testInd.mq5 |
//|                                                                  |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright ""
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
   int handle1 = iMA(NULL,0,17,0,MODE_LWMA, PRICE_CLOSE); //
   int handle2 = iMA(NULL,0,17,0,MODE_LWMA, PRICE_CLOSE); //абсолютно идентичные параметры
   if(handle1 == INVALID_HANDLE) {
                Print("Error Creating Handles for indicators",GetLastError());
        } else {
                Print("Handle1 ="+handle1);
        }
        if(handle2 == INVALID_HANDLE) {
                Print("Error Creating Handles for indicators",GetLastError());
        } else {
                Print("Handle2 ="+handle2);
        }
        
   IndicatorRelease(handle2);

   handle3 = iMA(NULL,0,33,0,MODE_LWMA, PRICE_CLOSE); //другой период
        if(handle3 == INVALID_HANDLE) {
                Print("Error Creating Handles for indicators",GetLastError());
        } else {
                Print("Новый handle3 ="+handle3); //все обращения к данным handle3 возвращают данные с handle1
        }
   
   
//---
   return(0);
  }
 
vyv:
誰か答えてくれないかな?

ここでも話題になっていますね。https://www.mql5.com/ru/forum/1997/page6/#comment_31644。

質問はそちらに移したほうがいいかもしれませんね--提案です。

Оптимизация в Тестере стратегий
Оптимизация в Тестере стратегий
  • www.mql5.com
из которых ТОЛЬКО 546 ms было затрачено именно на тестирование эксперта.