MT版アーカイブ。

 

親愛なる皆さん、私はここにMT版のアーカイブを作ることを提案します。アップデートの際に予期せぬエラーが発生し、以前のバージョンにロールバックしなければならないことがあります...。

今すぐビルド2007が欲しい持っていますか?シェアしてください。

 
Сергей Таболин:

親愛なる皆さん、私はここにMT版のアーカイブを作ることを提案します。アップデートの際に予期せぬエラーが発生し、以前のバージョンにロールバックしなければならないことがあります...。

今すぐビルド2007が欲しい持っていますか?シェアしてください。

ここにコレクションを集めている人がいる。ただ、私の記憶では、MT版アーカイブへのリンクがある彼の書き込みは、進行が遅くならないように削除されることもあるようです。))

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

MetaTrader 5 build 2007の新バージョン:経済カレンダー、MQL5-programs as a service

アンドレイ・ハチムリアンスキー, 2019.03.15 23:03

別のgoogleアカウントに移行しました。新しいリンクはこちら です。

他のビルドが必要なら声を上げてください、たくさんいますよ。

 


私のリンクはここで潰れました。

開発者は、検証済みのソースのみからダウンロードすることを推奨しています。

もし、私のビルドを危険にさらしたければ、私にラインを送って ください。

ポータルやアーカイブで作業を安定させたまま、意識的にテストビルドにアップグレードする必要があります。

最新のビルドに更新することを強く意識してください。

 
Fast235:

私のリンクはここで潰れました。

開発者は、検証済みのソースのみからダウンロードすることを推奨しています。

もし、私のビルドを危険にさらしたければ、私にラインを送って ください。

ポータルやアーカイブで作業を安定させたまま、意識的にテストビルドにアップグレードする必要があります。

ポータブルまたはアーカイブで作業を安定させ、一般的にテストビルドのアップデートに注意する必要があります。

古いバージョンを削除するのは正しいことだ。

普通のプログラムを書かなければならない。警告を無視しないでください。変数を初期化し、グローバルなものはなるべく使わない。コード内の危険な断片を避ける。

私は何万行ものコードを持っていますが、strict-modeでは一度も警告が出ません。私のコードベースプロジェクトの半分は、何千行も含まれていないにもかかわらず、strictなしでも警告が表示されます。そして、「古いビルドではすべて動いていたのに、新しいビルドでは動かなくなった」と文句を言い始める......。

 
Georgiy Merts:

古いバージョンを削除するのは正しいことだ。

プログラムをきちんと書く必要がある。警告を無視しないでください。変数を初期化し、グローバルなものは極力使用しない。安全でない可能性のあるコードの断片を避ける。

strict-modeで数万行のコードで 警告が一度も出ていないのです。私のコードベースプロジェクトの半分は、1000個も文字列が含まれていないにもかかわらず、strictなしでも警告を報告します。そして、「古いビルドではすべて動いていたのに、新しいビルドでは動かなくなった」と文句を言い始める......。

これが火星探査機計画ですか?これだけの行数で何が表現できるのか?

 
Sergey Basov:

ここに、コレクションを構築している人がいます。しかし、私の記憶では、彼のMT版アーカイブへのリンクのある投稿は、進行が遅くならないように削除されることもあるようです。))

ありがとうございます。ダウンロードしました。

Fast235 です。

リンクが切れてしまいました。

開発者は、検証済みのソースからのダウンロードのみを推奨しています。

もし、私のビルドを危険にさらしたければ、私にラインを送って ください。

ポータルやアーカイブで作業を安定させたまま、意識的にテストビルドにアップグレードする必要があります。

今、2007年のビルドでDCにいるんだ。

テストビルドでの更新はしていません。でも、これからはセーブします)))。

ゲオルギー・メルツ

古いバージョンを削除するのは正しいことだ。

ちゃんとプログラムを書かないといけない。警告を無視しないでください。変数を初期化し、グローバルなものはなるべく使わない。安全でない可能性のあるコードの断片を避ける。

数万行のコードがあるのですが、strict-modeでは全く警告が出ません。私のコードベースのダミーの半分は、1000個も文字列が含まれていないにもかかわらず、strictなしでも警告が表示されます。そして、「古いビルドではすべて動いていたのに、新しいビルドでは動かなくなった」と文句を言い始める......。

ジョージ、このスレッドの私の最後の投稿を読んでください。問題の原因がわかりました。私のコードにはないんです。

 
Сергей Таболин:

ありがとうございます。ダウンロードしました。

テスト用のものにはアップデートしない。でも、これからはセーブします)))。

ジョージ、このスレッドの私の最後の投稿を読んでください。原因がわかりました。私のコードにはないんです。

読みました。

問題の根源は、開発者とあなたのアプローチの仕方が微妙に違っていたことです。ですから、私は、曖昧な部分を除いて、常に非常にシンプルで明確なコードでなければならないと主張しています。

そういえば、MT5が出始めの頃、変数にゼロが入ると思って初期化せずに使っている人がいて、びっくりしたことがあります。

あるジョークを 思い出さずにはいられない。

ピノキオはりんごを3つあげました。2つ食べた。リンゴは何個残っていますか?

プログラマーN1:
- 何人いるかわからないでしょ。彼が以前、いくつのリンゴを持っていたか、誰も知らないのです。

モラル:初期変数をクリアする。


プログラマーN2
- 何人かは不明です。もしかしたら、マルビナがリンゴを配っている間に、ピエロがリンゴを食べていたのかも?

道徳グローバル変数を 使用しないこと。

プログラマー N3
- 数は不明。ピノキオがきっちりリンゴを食べたとは書かれておらず、2個食べたと書かれていますが、何がそうなのかは不明です。 また、「ピノキオ」という名前が断られていないことから、ピノキオとピノキオは異なる変数であると考えられます。


モラル:構文に注意

 
Сергей Таболин:

ありがとうございます。ダウンロードしました。

テスト用のものにはアップデートしない。でも、これからは保存します ))))

ジョージ、このスレッドの私の最後の投稿を読んでください。原因がわかりました。私のコードには ありません。

そして、問題の原因は「ドキュメントを読まなかった」ことであり、新しいビルドではありません。だから、自分のコードじゃないと言ってずるずるしているんですね。

1:

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

では、次にやりたいことは?

セルゲイ・タボリン, 2019.06.16 00:17

この暴挙の理由を見つけた。

そのことは、こうです。

//--- пропустить бесполезные проходы оптимизации
//*
   if(!check_init && (MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)))
   {
      if(period_HMA7C == 0 && move_profit)                                                            TesterStop();
      if(period_HMA7C == 0 && move_stop)                                                              TesterStop();
      if(period_HMA7C == 0 && shift_correction_HMA7C != 5)                                            TesterStop();
      if(indent_channel_line_a0 == 0.0 && indent_channel_line_a4 != 0.0)                              TesterStop();
      if(indent_channel_line_a4 == 0.0 && indent_channel_line_a0 != 0.0)                              TesterStop();
      if((stop_loss_buy > 0 && stop_loss_buy < 700) || (stop_loss_sell > 0 && stop_loss_sell < 700))  TesterStop();
      check_init = true;
   }
//*/

TesterStop()の後、本来は起動しないはずのOnTester()も新リリースでは起動することが判明しました。

当然、データは用意されておらず、そのような状態です。

MT2085のせいである。

2:

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

次に何をすればいいのでしょうか?

セルゲイ・タボリン, 2019.06.16 09:02

申し訳ございません。説明には、その後にOnTester()が呼ばれると書いてあるだけです。(((

そこでもチェックをしなければならない。ExpertRemove()で置き換えて みる...。

そして、また「やってみる」。そして、その試みが失敗したら、またMQのせい?

思い出せないのですが、「悪い」パスをスキップするための特別な機能があるように思います。そして、ちょうどあなたが試したいこと、開発者はそれを使うことを推奨していませんでした-再び-私の記憶が正しければですが。

しかし、私のメッセージで重要なのは、開発者に責任を転嫁する前に、まずドキュメントを読み、フォーラムで解決策を求め、その上で、本当にエラーが見つかった場合にのみ、それを再現する最小限のコードとともにバグレポートを書くということなのです。それはそれで深刻ですが、それ以外は...。

 
Artyom Trishkin:

そして、問題の原因は「ドキュメントを読まなかった」ことであり、新しいビルドではありません。だから、コードが自分のものでないというのは嘘なんですね。

1:

2:

そして、また「やってみる」ことに...。そして、試行錯誤がうまくいかなかったら、またMQのせいにするんですか?

思い出せないのですが、「悪い」パスをスキップするための特別な機能があるような気がします。そして、ちょうどあなたが試したいこと、開発者は使用を推奨していませんでした-また、私の記憶が正しければですが-。

しかし、私のメッセージで重要なのは、開発者に責任を押し付ける前に、まずドキュメントを読み、フォーラムで解決策を求め、そして本当に見つかったバグの場合のみ、最小限のコードで再現してバグレポートを書くべきだということなのです。それはそれで深刻ですが、それ以外は...。

アルチョム、問題は新しいビルドにある!

教えてください、ここであなたは、エラーなしで動作するコードを書きました。長く使える。そして、新しいMTのリリース後、突然、大量のエラーでクラッシュしてしまうのです。誰のせいだ?ましてや、多くの人が知っているように、ドキュメントは常に技術革新に追いついているわけではありません。

というわけで、私のコードはエラーなく動作しました。

これを使いました。

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

INIT_PARAMETERS_INCORRECTを何に置き換えたらいいのでしょうか?解決策を発見 )))

セルゲイ・タボリン, 2019.04.24 08:48

スレッドの中に自分の疑問の答えが見つかりました。

それは、とてもシンプルなことでした。無効なパラメータのチェックをOnInit()からOnTick()に移すだけで十分です。

bool                 check_init              = false;                // флаг проверки входных параметров
..........
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
//--- пропустить бесполезные проходы оптимизации
//*
   if(!check_init && (MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)))
   {
      if(period_HMA7C == 0 && move_profit)                                 ExpertRemove();
      if(period_HMA7C == 0 && move_stop)                                   ExpertRemove();
      if(period_HMA7C == 0 && shift_correction_HMA7C != 5)                 ExpertRemove();
      check_init = true;
   }
//*/ 
//+------------------------------------------------------------------+ 

チェック済みです。効くんです。遺伝は失敗しない ))))

現在、問題発生後、2行ほど追加しています。

bool                 check_init              = false;                // флаг проверки входных параметров
bool                 tester_stop             = true;                 // флаг проверки выхода по TesterStop
.............
void OnTick()
{
//--- пропустить бесполезные проходы оптимизации
//*
   if(!check_init && (MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)))
   {
      if(period_HMA7C == 0 && move_profit)                                                            TesterStop();
      if(period_HMA7C == 0 && move_stop)                                                              TesterStop();
      if(period_HMA7C == 0 && shift_correction_HMA7C != 5)                                            TesterStop();
      if(indent_channel_line_a0 == 0.0 && indent_channel_line_a4 != 0.0)                              TesterStop();
      if(indent_channel_line_a4 == 0.0 && indent_channel_line_a0 != 0.0)                              TesterStop();
      if((stop_loss_buy > 0 && stop_loss_buy < 700) || (stop_loss_sell > 0 && stop_loss_sell < 700))
      {
         Print("Результат в OnTester() должен быть -99999999999.99");
         TesterStop();
      }
      check_init  = true;
      tester_stop = false;
   }
//*/
.........
}
Вызов TesterStop() считается нормальным завершением тестирования, и поэтому будет вызвана функция OnTester() 
с отдачей тестеру стратегий всей накопленной торговой статистики и значения критерия оптимизации.

理屈では、残りのコードを実行せずに、すぐに転送を実行すべきとされている。そうだろ?

そして実際、TesterStop() はテストを全く止めません!

double OnTester()
{
   if(tester_stop) return(-99999999999.99);
   
   double   equity_dd_percent             = TesterStatistics(STAT_EQUITY_DDREL_PERCENT);
   if(equity_dd_percent > 0.0)
   {
      equity_dd_percent = 100.0 / equity_dd_percent;
   }
   else     equity_dd_percent    = 1.0;
   
   double   param                         = 0.0;
   double   profit                        = TesterStatistics(STAT_PROFIT);
   double   stability                     = 0.0;
   int      balance_arr_size              = ArraySize(balance_arr) - 1;
   int      alpha_size                    = balance_arr_size - 1;
   int      beta_size                     = alpha_size - 1;
   double   trade2time                    = ratioTrades2Time(TesterStatistics(STAT_TRADES));
   double   max_balance                   = balance_arr[0];
//+-------------------   
   if(balance_arr[balance_arr_size-1] - balance_arr[0] == 0.0) return(-99999999999.88);
//+-------------------   

無効な」パラメータを入力したところ、このような結果になりました。

LL      0       11:30:20.816    Core 1  2016.10.01 00:00:00   Советник получил MAGIC = 153128312914612747.
QN      0       11:30:20.816    Core 1  2016.10.03 00:00:00   Результат в OnTester() должен быть -99999999999.99
NJ      3       11:30:20.816    Core 1  TesterStop() called on 0% of testing interval
CD      0       11:30:20.816    Core 1  final balance 10000.00 USD
QF      0       11:30:20.816    Core 1  OnTester result -99999999999.88

だからこれはバグなんだ! そしてこれはまさにMQのバグなんだ。

TesterStop()とExpertRemove()は、すぐにOnTester()に制御を渡せない場合は、trueを返すべきだと思います。このような場合、例えばこのように何とか対応することが可能でしょう。

bool                 tester_stop = false;                 // флаг проверки выхода по TesterStop
.......
void OnTick()
{
//--- пропустить бесполезные проходы оптимизации
   if(!check_init && (MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)))
   {
      if(недопустимый параметр)          tester_stop = TesterStop();
........
}
double OnTester()
{
   if(tester_stop) return(-99999999999.99);

この場合、テストを止めた結果、理論的に起こりうるすべてのエラーを予見して踊るのではなく、論理的に期待される結果を正確に得ることができます。

 
Сергей Таболин:

アルチョム、問題は新しいビルドにある!

教えてください、あなたはここで、エラーなしで動作するコードを書きました。長く使える。そして、新しいMTのリリース後、突然、大量のエラーでクラッシュしてしまうのです。誰のせいだ?ましてや、多くの人が知っているように、ドキュメントは常に技術革新に追いついているわけではありません。

というわけで、私のコードはエラーなく動作しました。

私はこれを使いました。

さて、悩んだ末に、さらに2行ほど追加しました。

転送は、賢いことに、残りのコードを実行することなく、すぐに行われることになっています。そうだろ?

しかし、実際には TesterStop() はテストを全く止めません!

無効な」パラメータを入力したところ、このような結果になりました。

だからこれはバグなんだ! そしてこれはまさにMQのバグなんだ。

TesterStop()とExpertRemove()は、すぐにOnTester()に制御を渡せない場合は、trueを返すべきだと思います。例えばこんな風に、なんとなく反応することができるようになるのです。

この場合、テストを止めた結果、理論上起こりうるすべてのエラーを予見して踊るのではなく、論理的に期待される結果を正確に得ることができるようになるのです。

あなたの計算やテストはすべて、私に見せるのではなく、ある種の皮肉や苛立ちを込めて、「エラー、バグ、質問」スレッドでドライに、簡潔に行うべきです。もちろん、自分の意見を聞いてほしい、答えを出してほしいという場合は別ですが。

ZS.そして、できればバグレポートの「バグ」「フォルト」「タンバリンで踊る」などの「クソコード」のような言葉は忘れてください - すべての人、そしてあなたに間違いがないわけではないのです。それに「精神病」発言はとても真面目で建設的とは思えません。

 
Artyom Trishkin:

あなたの計算やテストはすべて、私に見せるのではなく、ある種の皮肉や苛立ちを込めて、「バグ、バグ、質問」スレッドでドライに、簡潔に行うべきです。もちろん、自分の意見を聞いてほしい、答えを出してほしいという場合は別ですが。

そう思われたのなら、申し訳ありません。もちろん苛立ちもありますが、いきなり問題が発生するのですから、ないわけはないでしょう。そして皮肉なことに...。- それよりも、明らかな失敗作と思われるものに戸惑いを感じます。))

問題のトピックについては、何か、そこで質問が「迷子」になりやすいような気がするのです。では、具体的な問題提起をした新しいトピックの方が効果的だと思うのですが?それとも違うのでしょうか?

いずれにせよ、モデレータとして、あなた自身が問題の存在を確信しているのであれば、むしろ開発者の注意を引くことができます ))) 。

そこに質問を加えてみる・・・。

理由: