同じ動作をさせる条件において、多くの "or"(|)を避けることは可能でしょうか? - ページ 3

 
alsu:
さらに加速して、例えば、条件AがCより平均的に多く満たされ、CがBより多く満たされることが分かっている場合、次のように順番に並べることができる。 if(!a){if(!c)if{(!b) M=false;}} 。

例えば、起こる確率と計算時間の逆数の積を基準とすると、最初にチェックされる条件は、最も確率が高く、計算量が少ないもの、つまり、与えられた基準の値が最も大きいものである。
 
TarasBY:

また、この方法で計算を最適化することもできます。

あるいは、こんな風にやってみるのもいいかもしれませんね。

    bool M = false;

    if (A) M = true; else if (B) M = true; else if (C) M = true; else if (D) M = true; else if (E) M = true;
    if (M == true) Action;

ありがとうございました。

 
alsu:

例えば、実行確率と計算時間の逆数の積を基準として、最も確率が高く、計算量が少ない条件、つまり基準の値が最も大きい条件を最初にチェックすることで、さらに高速化することができる。

ずいぶん前にこの順番にしたんです。しかし、複数の条件を満たしたとしても、最初に出てきた条件が満たされることになります。

そして、最終的な条件はすべてのバリエーションで共通なので、問題ありません。

 
alsu:

例えば、実行確率と計算時間の逆数の積を基準として、最も確率が高く、計算量の少ない条件、つまり設定した基準の値が最も大きい条件を最初にチェックすることで、さらに高速化できる。
アレクセイ、もう一度言いますが、アクションの実行速度に影響を与える条件を入れ替えるという提案に答えましょう。そして、見つけたのがこちら!最も複雑な計算は、必要な様々なマーケットデータやオープンポジションを1ティックごとにチェックする機能に比べれば、それほど遅くはありません。フォーラムメンバーのアドバイスで、これらの機能をかなり簡略化し、私の場合は不要なものをすべて捨てて、ほぼ2倍の速度になりました。このモードでは、本当に可能な結果に対してより良い近似値を得ることができると、私は以前から確信していました。そこで、計算、指標チェック、現在値チェックを全て行った上で、これらの機能を実装したところ、スピードが倍増し、半年間のテスターでの稼働時間は7分、年間では14分となりました。必要なチェックを行う機能は、前の条件が許すなら手放せません。今度は、&&を)if(.)に変更して、コードの最適化を図ってみます。他にもコードの最適 化の可能性があれば教えていただければ幸いです。ありがとうございました!そして皆さん、お疲れ様でした
 
borilunad:

どのオペレーターもフィットしない。if(A || B || C || D || E) Action; を使わずに、他の方法はないのでしょうか?

私はモデレーターに、私が考えている質問の重要性とより合理的な解決策が見つからないため、一般質問者スレッドに送信しないようにお願いします。ありがとうございました。


if(A || B || C || D || E) Action; 私ならこう するif((A + B + C + D + E) > 0) Action;Actionが少なくとも3つのシグナルを必要とするなら、0ではなく2を書けば よい。

スピードは測っていません。

 
pako:


if(A || B || C || D || E) Action; 私ならこう するif((A + B + C + D + E) > 0) Action;Actionが少なくとも3つのシグナルを必要とするなら、0ではなく2を書けば よい。

スピードは、測定していません。


スピードは凄まじいものがあるでしょうね。ソリューションがとても斬新
 
A,B,C,Dが関数だとすると、簡単なものから順にカウントアップし、常に真偽を確認する必要があります。この方が早く効きます。
 
Vinin:

その加速度はすさまじいものになるでしょう。その解決策はとても独創的です。
入荷しましたパコさん、ありがとうございました。ビクターさん、ありがとうございました。これから昼食をとって、試してみます
 
FION:
A,B,C,Dが関数だとすると、簡単なものから順に複雑さを数えていき、常に真偽を確認する必要があるのです。その方が早く効きます。

ご参加ありがとうございました。A、B、C ...関数ではなく、関数を含む条件と含まない条件があり、さらに相互に排他的ですそして、一つの条件だけで、すでにアクションのきっかけとなる他の条件にジャンプすることができるのです。機能だけなら問題ないのですが。

double A =function1(); double B = function2(); double C = function3(); double D = function4(); double E = function5(); そして、Pakoさんの提案の通り。

if((A + B + C + D + E) > 0)

{バイまたはセルを閉じるためにミラーリングされた方向を持つ別の条件}アクションBUT

そして、A=条件1、B=条件2、C=条件3、D=条件4、E=条件5が必要です。可能なのか、不可能なのか!それとも、無理でそれっきりなのか!?

例えば、こんな感じです。

bool a = true;

//или
double a;

а = (isCloseLastPosByTake() == True && Profit > ProClo / clo - GetProfitCloseLastPosByTake() * clo);

何を試せばいいのかわからない!

 
borilunad:

そして、A=条件1、B=条件2、C=条件3、D=条件4、E=条件5が必要なんです。可能なのか、不可能なのか!それとも、無理でそれっきりなのか!?

bool a = true;

//или
double a;

а = (isCloseLastPosByTake() == True && Profit > ProClo / clo - GetProfitCloseLastPosByTake() * clo); <---   10,444 = 8,087 > 3,908 эт на каком языке? 

bool a = false;

if (isCloseLastPosByTake() == True && Profit > ProClo / (clo - GetProfitCloseLastPosByTake() * clo)) a = true;