MT版アーカイブ。 - ページ 3

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

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);

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

そして、これがあなたが見たかったオプションです。

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

その中で、チェックはできないのでしょうか?

また、すでに起動している場合、強制終了を防ぐ/解除する方法は?あなたの例はちょっと違いますね。
 
Alexey Viktorov:
また、すでに起動している場合の強制終了の防止・解除はどうするのですか?あなたの例は少し違いますね。

強制終了を誘発しないように。それなら解約する必要はない。

おそらく、すでに実行中の強制終了は、ソフトウェアの不具合の可能性があるため、キャンセルしても意味がないと思います。
そのため、そのような可能性はないと思われます。何とも言えませんね。
つまり、強制終了した後に実行中のコードに再び戻る必要がないように、論理的にコードを配置する必要があるのです。
辞めたら辞めたで、露骨に辞めるんです。

 
Roman:

すでに発動している強制終了を、ソフトウェアの不具合の可能性を理由にキャンセルする意味はないと思われます。
したがって、そのような選択肢はないのでしょう。はっきりとは言えません。
つまり、強制終了した後に実行中のコードに再び戻る必要がないように、論理的にコードを配置する必要があるのです。
辞めたら辞めたで、露骨に辞めるんです。

なんとなくですが、このトピックのすべてを読んでいない印象を受けます。何か、目の前の問題に対するあなたの意見と、全く一致しないのですが。

ps; ないけど。このスレッドの最初の投稿で、あなたは私の言葉を正確に引用したようですが、完全ではありません。そのおかげで、問題意識全体がシフトしたのかもしれません。
 
どんな質問であれ、それが答えになるのです。自分たちで話してみてください。問題に踏み込もうとすると、やはり嫌われるんですね。問題が見つかると良いですね。
 
Alexey Viktorov:

そして、これがあなたが見たかったバージョンです。

そうなんです。

しかし、そうではありません。

if(недопустимый параметр)          tester_stop = TesterStop();

よりシンプルに、よりクリアに...

if(недопустимый параметр)
       {
        TesterStop();
        tester_stop = true;
        return;
       }

?

しかし、今はアドバイスしていただいた通りにしています。

 
Roman:
そんな疑問と答え。自分たちで議論してもよい。問題に首を突っ込もうとすると、やはり嫌われるんですね。問題が見つかると良いですね。

気を悪くしないことです。文章を全部読まないと理解できないほどでした。

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

MT版アーカイブ。

アレクセイ・ビクトロフ, 2019.06.16 15:25

セルゲイ 想定外ということはないですね。逆に言えば、すべてが論理的で一貫しているのです。さまざまなケースがあります。エキスパートアドバイザーが作業を終える前にイベントの処理を完了しなければならない場合もあれば、あなたのケースのように緊急に処理を終えなければならない場合もあります。 開発者は、イベント処理を終える必要のある人の不満を招いてすぐに止めるか、イベント処理の完了後に止めるか、どちらが正しいかという 問題に直面する。プログラマなら誰でも持っているリターン演算子ですが、強制終了の場合は何もありません。

また、なぜboolのvoid型を変更する必要があるかというと、やはりプログラマの武器として、TesterStop()の前か後に変更できる静的変数があり、原則的にすべてが思い通りになるからです。しかし、あなたはなぜか私の例からそれを省いていますね。

で、あなたは最初の部分に注意を払わず、2番目の部分を文脈から取り出しただけです。
 
Сергей Таболин:

そうなんです。

しかし、そうではありません。

よりシンプルに、よりクリアに...

?

でも、今はアドバイスしていただいた通りにしています。

よりシンプルでわかりやすいかもしれませんが、自分で簡単に書けるものを開発者に要求するのは間違っています。なぜか、C++と要求される言語についての加筆は書かれていないように思います。そして、その発言は、多くの人にとって十分なものであることは間違いない。

 
Alexey Viktorov:

その方がシンプルで分かりやすいかもしれませんが、自分で簡単に書けるものを開発者に要求するのは間違っています。なぜか、C++と要求される言語についての加筆は書かれていないように思います。そして、その発言は、多くの人にとって十分なものであることは間違いない。

ここで、オプションの確認です。このようなメッセージで終了しました。

2019.06.16 18:49:25.464 Core 1  TesterStop() called on 0% of testing interval

行き止まりだ...。

 
Alexey Viktorov:

気を悪くしないことです。全フレーズを持っていないと、理解できないのです。

で、あなたは最初の部分に注意を払わず、2番目の部分を文脈から取り出しただけです。

IsStopped()を使った例をあげることで、最初の部分に答えようとしたのです。
EAを完成させる前にイベントの処理を完了させる必要がある場合もあれば、今回のように急を要する場合もあります。
この関数IsStopped() の説明をドキュメントで読むと、何かヒントがあるかもしれません。
しかし、あなたにはそれが別の方向から見えるようです。もしそうなら、可能な限りの推測で申し訳ありません。
しかし、彼らは可能な提案で言うように、そして問題を解決します。
誰も彼のコードのすべてのロジックを知らないので、明確な解決策は、誰にも言わないだろうし、おそらくそれを掘り下げることはありません。