エラー、バグ、質問 - ページ 12 1...5678910111213141516171819...3185 新しいコメント Prival 2010.06.18 11:00 #111 夜中、バーの開始時刻がエラーで反映されてしまうという、とても不思議なことに気づきました。今度はそれを確認したいので、テスト用のインジケータを作りました #property indicator_chart_window datetime old_time=0; int MaxBars=10; // ограничение //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() {return(0);} //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime& time[], const double& open[], const double& high[], const double& low[], const double& close[], const long& tick_volume[], const long& volume[], const int& spread[]) { if(rates_total<10) return(0); // ничего не считаем и ничего не рисуем на графике int start_pos, // точка старта count_tick; MqlDateTime str1,str2; if(prev_calculated==0) { old_time=0; count_tick=0; start_pos=rates_total-3; } else start_pos=prev_calculated-1; //--- расчет for(int i=start_pos;i<rates_total;i++) { TimeToStruct(TimeCurrent(),str1); // время сервера TimeToStruct(time[i], str2); // время бара if(str1.min!=str2.min) { // Сбой - тик принадлежит не своему бару count_tick++; Print("тик №=",count_tick," i=", i," c=",close[i]," time[i]=",time[i]," time=",TimeCurrent()," delta=",str1.sec); } } // end for(... return(rates_total); } ログ2010.06.18 10:42:03 prov_tick (EURUSD,M1) tick #=6 i=50558 c=1.23797 time[i]=2010.06.18 08:41:00 time=2010.06.18 08:42:05 delta=52010.06.18 10:40:59 prov_tick (EURUSD,M1) tick #=5 i=50557 c=1.23848 time[i]=2010.06.18 08:40:00 time=2010.06.18 08:41:01delta=1 です。 2010.06.18 10:40:01 prov_tick (EURUSD,M1) tick #=4 i=50556 c=1.23862 time[i]=2010.06.18 08:39:00 time=2010.06.18 08:40:04delta=4。 2010.06.18 10:39:03 prov_tick (EURUSD,M1) tick #=3 i=50555 c=1.23881 time[i]=2010.06.18 08:38:00 time=2010.06.18 08:39:05delta=5を 設定。 2010.06.18 10:38:30 prov_tick (EURUSD,M1) tick#2 i=50554 c=1.23859 time[i]=2010.06.18 08:37:00 time=2010.06.18 08:38:31 delta=31 2010.06.18 10:38:30 prov_tick (EURUSD,M1) tick#1 i=50553 c=1.23858 time[i]=2010.06.18 08:36:00 time=2010.06.18 08:38:31 delta=31 最初の2ティックがはっきりしているのは、インジケータースタートですね。しかし、次のものは・・・。サーバーの時間に従って新しいバーが 存在し、このティックは古いバーに属していることが判明しました。夜、このデルタは悪夢のようだ...。 開発者への質問は、バグですか? それとも、そう考えられていたのですか? ログにそう書きながらZ.I. 2010.06.18 10:45:09 prov_tick (EURUSD,M1) tick #=9 i=50561 c=1.23787 time[i]=2010.06.18 08:44:00 time=2010.06.18 08:45:12delta=12 ファイル: prov_tick.mq5 2 kb Errors, bugs, questions PREDICT time period static array ? Test Account 2010.06.18 11:54 #112 Prival:夜中、バーの開始時刻がエラーで反映されてしまうという、とても不思議なことに気づきました。今度はそれを確認しようと思い、テスト用のインジケータを作成しました rates_totalの値をoutputに追加すると、現在のバーの分と前のバーの分を比較するときにエラーが発生することがわかります。2010.06.18 11:53:18 prov_tick_src (EURUSD,M1) тик №=4 i=51420 rates_total=51422 c=1.23997 time[i]=2010.06.18 09:51:00 time=2010.06.18 09:52:06 delta=6 2010.06.18 11:52:12 prov_tick_src (EURUSD,M1) тик №=3 i=51419 rates_total=51421 c=1.24061 time[i]=2010.06.18 09:50:00 time=2010.06.18 09:51:00 delta=0 すなわち、time[rates_total-2]である。また、デルタの出力も完全にはわからない。https://www.mql5.com/ru/docs/basis/function/events#oncalculate。パラメータ open[]、high[]、low[]、close[]には、現在のタイムフレームの始値、最大値、最小値、終値を表す配列が格納されます。パラメータtime[]はオープン時間の値の配列を含み、パラメータspread[]はスプレッドの履歴の配列を含みます(取引商品にスプレッドが指定されている場合)。パラメータ volume[] と tick_volume[] には、それぞれ取引量と呼値の履歴が格納される。 Документация по MQL5: Основы языка / Функции / Функции обработки событий www.mql5.com Основы языка / Функции / Функции обработки событий - Документация по MQL5 Slava 2010.06.18 11:54 #113 Prival: 夜中、バーの開始時刻がエラーで反映されてしまうという、とても不思議なことに気づきました。今すぐ確認しようと思い、テスト用のインジケータを作りました ログ2010.06.18 10:42:03 prov_tick (EURUSD,M1) tick #=6 i=50558 c=1.23797 time[i]=2010.06.18 08:41:00 time=2010.06.18 08:42:05 delta=5 2010.06.18 10:40:59 prov_tick (EURUSD,M1) tick #=5 i=50557 c=1.23848 time[i]=2010.06.18 08:40:00 time=2010.06.18 08:41:01delta=1。 2010.06.18 10:40:01 prov_tick (EURUSD,M1) tick #=4 i=50556 c=1.23862 time[i]=2010.06.18 08:39:00 time=2010.06.18 08:40:04delta=4。 2010.06.18 10:39:03 prov_tick (EURUSD,M1) tick #=3 i=50555 c=1.23881 time[i]=2010.06.18 08:38:00 time=2010.06.18 08:39:05delta=5。 2010.06.18 10:38:30 prov_tick (EURUSD,M1) tick #=2 i=50554 c=1.23859 time[i]=2010.06.18 08:37:00 time=2010.06.18 08:38:31delta=31。 2010.06.18 10:38:30 prov_tick (EURUSD,M1) tick #1 i=50553 c=1.23858 time[i]=2010.06.18 08:36:00 time=2010.06.18 08:38:31delta=31。 最初の2ティックがはっきりしているのは、インジケータースタートですね。しかし、次のものは・・・。サーバーの時間に従って新しいバーが存在し、このティックは古いバーに属していることが判明しました。夜、このデルタは悪夢のようだ...。 開発者に質問ですが、これはバグですか、それともそのように設計されているのですか? Z.I.を書きながら、ログに表示されるのはこんな感じです。 2010.06.18 10:45:09 prov_tick (EURUSD,M1) tick #=9 i=50561 c=1.23787 time[i]=2010.06.18 08:44:00 time=2010.06.18 08:45:12delta=12 以下のようにテストしてみてください。ループなし。 TimeToStruct(TimeCurrent(), str1); // время сервера TimeToStruct(time[rates_total-1],str2); // время последнего бара さらに本文に。 Prival 2010.06.18 13:20 #114 stringo: 以下のように確認してみてください。サイクルなし。次は本文です。おっと、了解です、ありがとうございますループ内のチェックを行いました。 if(old_time<time[i]) { Print("НОВЫЙ бар"); old_time=time[i]; //... } // а нужно вот так if(old_time<time[rates_total-1]) // работаем только по завершенным барам { Print("НОВЫЙ бар"); old_time=time[rates_total-1]; //... } 新バーiの時点では変わっていない。経済的ではなく、同じデータを繰り返し計算しています。とはいえ...https://book.mql4.com/ru/samples/icustom fig.119はMQL5では除外されているのでしょうか? そしてこのインジケーターテンプレートは常に正しい終値を出力するのでしょうか? それとも何か落とし穴があるのでしょうか?input int MaxBars=240; datetime old_time=0; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() {return(0);} //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime& time[], const double& open[], const double& high[], const double& low[], const double& close[], const long& tick_volume[], const long& volume[], const int& spread[]) { //--- if(prev_calculated==0) { //... расчитать историю //... old_time=time[rates_total-1]; } // работаем только по завершенным барам if(old_time<time[rates_total-1]) { old_time=time[rates_total-1]; Print("НОВЫЙ бар close[1]=", close[rates_total-2]); } //--- return value of prev_calculated for next call return(rates_total); } 追伸:科学をありがとう Создание пользовательских индикаторов - Простые программы на MQL4 - Учебник по MQL4 book.mql4.com Создание пользовательских индикаторов - Простые программы на MQL4 - Учебник по MQL4 削除済み 2010.06.19 15:01 #115 sergey1294: EAを実行し始めると、テスターではターミナル全体がクラッシュしてしまいますが、チャートに表示させるとすべてうまくいきます。約110のパラメータを消化できることが経験上証明されている(質問もある)。120で、Expert Advisorをテスターで指定すると端末がクラッシュします。すでに非公開でいくつかの解決策を示しましたが、何かあれば開発者に聞くこともできます。この制限に対応してくれるかもしれない...。 Sergey Gritsay 2010.06.19 19:21 #116 Interesting:約110のパラメータを消化できることが経験上証明されている(質問もある)。120では、Expert Advisorをテスターで指定すると端末がクラッシュします。すでに非公開でいくつかの解決策を示しましたが、何かあれば、開発者に聞いてみてください。この制限に対応してくれるかもしれない...。 もちろん、このような制限がテスターに影響するのは不思議なことです。例えば、クアッドでは、そのような問題はありません Prival 2010.06.20 00:29 #117 スクリプトを実行すると、週末の相場が表示されなくなります。Print(TimeCurrent())を実行します。出来栄え 2010.06.20 00:26:06 00 (usdjpy,m1) 2010.06.18 22:35:52最後のバーには2010.06.18 23:00:00の時刻が表示されていますがというのは不思議なもので、ある機能の正しさをテストするのにとても不便なのです。 Andrey Dik 2010.06.20 01:04 #118 インジケーター設定ウィンドウの「適用」ボタンが見当たらない。 Slava 2010.06.23 11:31 #119 Interesting: 約110のパラメータを消化できることが経験上証明されている(質問もある)。120では、Expert Advisorをテスターで指定すると端末がクラッシュします。 すでに非公開でいくつかの解決策を示しましたが、何かあれば、開発者に聞いてみてください。この制限に対応してくれるかもしれない...。 最大64個のパラメータを最適化することができます。 削除済み 2010.06.23 11:39 #120 stringo: 最大64個のパラメータを最適化することができます。64を 最適化し、テスターで約110を 使用(最適化なし)。もちろん、110というのはExpert Advisorにとってすでに「悪夢」のようなパラメータ数ですが(でも、よくあることです)...。 1...5678910111213141516171819...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
夜中、バーの開始時刻がエラーで反映されてしまうという、とても不思議なことに気づきました。今度はそれを確認したいので、テスト用のインジケータを作りました
ログ2010.06.18 10:42:03 prov_tick (EURUSD,M1) tick #=6 i=50558 c=1.23797 time[i]=2010.06.18 08:41:00 time=2010.06.18 08:42:05 delta=5
2010.06.18 10:40:59 prov_tick (EURUSD,M1) tick #=5 i=50557 c=1.23848 time[i]=2010.06.18 08:40:00 time=2010.06.18 08:41:01delta=1 です。
2010.06.18 10:40:01 prov_tick (EURUSD,M1) tick #=4 i=50556 c=1.23862 time[i]=2010.06.18 08:39:00 time=2010.06.18 08:40:04delta=4。
2010.06.18 10:39:03 prov_tick (EURUSD,M1) tick #=3 i=50555 c=1.23881 time[i]=2010.06.18 08:38:00 time=2010.06.18 08:39:05delta=5を 設定。
2010.06.18 10:38:30 prov_tick (EURUSD,M1) tick#2 i=50554 c=1.23859 time[i]=2010.06.18 08:37:00 time=2010.06.18 08:38:31 delta=31
2010.06.18 10:38:30 prov_tick (EURUSD,M1) tick#1 i=50553 c=1.23858 time[i]=2010.06.18 08:36:00 time=2010.06.18 08:38:31 delta=31
最初の2ティックがはっきりしているのは、インジケータースタートですね。しかし、次のものは・・・。サーバーの時間に従って新しいバーが 存在し、このティックは古いバーに属していることが判明しました。夜、このデルタは悪夢のようだ...。
開発者への質問は、バグですか? それとも、そう考えられていたのですか?
ログにそう書きながらZ.I.
2010.06.18 10:45:09 prov_tick (EURUSD,M1) tick #=9 i=50561 c=1.23787 time[i]=2010.06.18 08:44:00 time=2010.06.18 08:45:12delta=12
夜中、バーの開始時刻がエラーで反映されてしまうという、とても不思議なことに気づきました。今度はそれを確認しようと思い、テスト用のインジケータを作成しました
rates_totalの値をoutputに追加すると、現在のバーの分と前のバーの分を比較するときにエラーが発生することがわかります。
すなわち、time[rates_total-2]である。
また、デルタの出力も完全にはわからない。
https://www.mql5.com/ru/docs/basis/function/events#oncalculate。
パラメータ open[]、high[]、low[]、close[]には、現在のタイムフレームの始値、最大値、最小値、終値を表す配列が格納されます。パラメータtime[]はオープン時間の値の配列を含み、パラメータspread[]はスプレッドの履歴の配列を含みます(取引商品にスプレッドが指定されている場合)。パラメータ volume[] と tick_volume[] には、それぞれ取引量と呼値の履歴が格納される。
夜中、バーの開始時刻がエラーで反映されてしまうという、とても不思議なことに気づきました。今すぐ確認しようと思い、テスト用のインジケータを作りました
ログ2010.06.18 10:42:03 prov_tick (EURUSD,M1) tick #=6 i=50558 c=1.23797 time[i]=2010.06.18 08:41:00 time=2010.06.18 08:42:05 delta=5
2010.06.18 10:40:59 prov_tick (EURUSD,M1) tick #=5 i=50557 c=1.23848 time[i]=2010.06.18 08:40:00 time=2010.06.18 08:41:01delta=1。
2010.06.18 10:40:01 prov_tick (EURUSD,M1) tick #=4 i=50556 c=1.23862 time[i]=2010.06.18 08:39:00 time=2010.06.18 08:40:04delta=4。
2010.06.18 10:39:03 prov_tick (EURUSD,M1) tick #=3 i=50555 c=1.23881 time[i]=2010.06.18 08:38:00 time=2010.06.18 08:39:05delta=5。
2010.06.18 10:38:30 prov_tick (EURUSD,M1) tick #=2 i=50554 c=1.23859 time[i]=2010.06.18 08:37:00 time=2010.06.18 08:38:31delta=31。
2010.06.18 10:38:30 prov_tick (EURUSD,M1) tick #1 i=50553 c=1.23858 time[i]=2010.06.18 08:36:00 time=2010.06.18 08:38:31delta=31。
最初の2ティックがはっきりしているのは、インジケータースタートですね。しかし、次のものは・・・。サーバーの時間に従って新しいバーが存在し、このティックは古いバーに属していることが判明しました。夜、このデルタは悪夢のようだ...。
開発者に質問ですが、これはバグですか、それともそのように設計されているのですか?
Z.I.を書きながら、ログに表示されるのはこんな感じです。
2010.06.18 10:45:09 prov_tick (EURUSD,M1) tick #=9 i=50561 c=1.23787 time[i]=2010.06.18 08:44:00 time=2010.06.18 08:45:12delta=12
以下のようにテストしてみてください。ループなし。
さらに本文に。
以下のように確認してみてください。サイクルなし。
次は本文です。
おっと、了解です、ありがとうございますループ内のチェックを行いました。
新バーiの時点では変わっていない。経済的ではなく、同じデータを繰り返し計算しています。とはいえ...
https://book.mql4.com/ru/samples/icustom fig.119はMQL5では除外されているのでしょうか? そしてこのインジケーターテンプレートは常に正しい終値を出力するのでしょうか? それとも何か落とし穴があるのでしょうか?
追伸:科学をありがとうEAを実行し始めると、テスターではターミナル全体がクラッシュしてしまいますが、チャートに表示させるとすべてうまくいきます。
約110のパラメータを消化できることが経験上証明されている(質問もある)。120で、Expert Advisorをテスターで指定すると端末がクラッシュします。
すでに非公開でいくつかの解決策を示しましたが、何かあれば開発者に聞くこともできます。この制限に対応してくれるかもしれない...。
約110のパラメータを消化できることが経験上証明されている(質問もある)。120では、Expert Advisorをテスターで指定すると端末がクラッシュします。
すでに非公開でいくつかの解決策を示しましたが、何かあれば、開発者に聞いてみてください。この制限に対応してくれるかもしれない...。
スクリプトを実行すると、週末の相場が表示されなくなります。
Print(TimeCurrent())を実行します。
出来栄え
2010.06.20 00:26:06 00 (usdjpy,m1) 2010.06.18 22:35:52
最後のバーには2010.06.18 23:00:00の時刻が表示されていますが
というのは不思議なもので、ある機能の正しさをテストするのにとても不便なのです。
インジケーター設定ウィンドウの「適用」ボタンが見当たらない。
約110のパラメータを消化できることが経験上証明されている(質問もある)。120では、Expert Advisorをテスターで指定すると端末がクラッシュします。
すでに非公開でいくつかの解決策を示しましたが、何かあれば、開発者に聞いてみてください。この制限に対応してくれるかもしれない...。
最大64個のパラメータを最適化することができます。