int SokolovDelRetry(int &array[], constint val)
{
int total = ArraySize(array);
intin = -1, count = 0, diff = 0;
for(int i = 0; i < total; i++)
{
diff++;
if(array[i] == val)
{
diff--;
if(in != -1)
{
if(diff>0)
{
ArrayCopy(array, array, in, i-diff, diff);
in = in + diff;
diff = 0;
}
count++;
}
else
{
in = i;
diff = 0;
count++;
}
}
}
if(diff > 0)
ArrayCopy(array, array, in, total - diff, diff);
ArrayResize(array, total - count);
return total - count;
}
の結果です。
2018.11.1416:20:15.293 ArrayDeleteValue__6 (FORTS-USDRUB,H1) вариант Pastushak: Контрольная сумма = 495345526; элементов - 998956; время выполнения = 89383 микросекунд
2018.11.1416:20:15.313 ArrayDeleteValue__6 (FORTS-USDRUB,H1) вариант Korotky: Контрольная сумма = 495345526; элементов - 998956; время выполнения = 18148 микросекунд
2018.11.1416:20:15.337 ArrayDeleteValue__6 (FORTS-USDRUB,H1) вариант Fedoseev: Контрольная сумма = 495345526; элементов - 998956; время выполнения = 15637 микросекунд
2018.11.1416:20:15.347 ArrayDeleteValue__6 (FORTS-USDRUB,H1) вариант Semko: Контрольная сумма = 495345526; элементов - 998956; время выполнения = 4626 микросекунд
2018.11.1416:20:15.367 ArrayDeleteValue__6 (FORTS-USDRUB,H1) вариант Pavlov: Контрольная сумма = 495345526; элементов - 998956; время выполнения = 16976 микросекунд
2018.11.1416:20:15.407 ArrayDeleteValue__6 (FORTS-USDRUB,H1) вариант Nikitin: Контрольная сумма = 495345526; элементов - 997945; время выполнения = 27381 микросекунд
2018.11.1416:20:15.427 ArrayDeleteValue__6 (FORTS-USDRUB,H1) вариант Vladimir: Контрольная сумма = 495345526; элементов - 998956; время выполнения = 16178 микросекунд
2018.11.1416:20:15.457 ArrayDeleteValue__6 (FORTS-USDRUB,H1) вариант Peter: Контрольная сумма = 495345526; элементов - 998956; время выполнения = 19618 микросекунд
2018.11.1416:20:15.477 ArrayDeleteValue__6 (FORTS-USDRUB,H1) вариант Sokolov: Контрольная сумма = 495345526; элементов - 998956; время выполнения = 11058 микросекунд
mql4で複数のEAで大量のオープンポジション/注文がある場合、私見ですが、check for symbolやmagicianで全てのオープンポジションを試すより、チケットで配列を保持し、配列を経由して注文が成立しているか確認する方が簡単だと思います。ですから、注文がクローズされた場合は、配列から「クロスアウト」されるはずです。そのような場合、以前は配列を「自分の中に」コピーして、配列のサイズを1つ小さくしていたのです。Vasiliy Sokolovから 提案されたもので、ありがとうございます。なぜ、いくつもの等しい要素を取り除くことが課題だったのかは、また別の問題ですが......。
mql4で複数のEAで大量のオープンポジション/注文がある場合、私見ですが、check for symbolやmagicianで全てのオープンポジションを試すより、チケットで配列を保持し、配列を経由して注文が成立しているか確認する方が簡単だと思います。ですから、注文がクローズされた場合は、配列から「クロスアウト」されるはずです。そのような場合、以前は配列を「自分の中に」コピーして、配列のサイズを1つ小さくしていたのです。Vasiliy Sokolovから 提案されたもので、ありがとうございます。なぜ、いくつもの等しい要素を取り除くことが課題だったのかは、また別の問題ですが......。
ブラボー!いくつかのエラーを修正した後、ArrayCopyを使わなくても、私を台座から叩き落としましたね。チェックメイト:))
for(;;)
まで
ブレークで まだ終了
追伸:ちょっと面白いので、アレイ全体をダイレクトコピーしてみました。変更する価値があると思われます
まで
ブレークで まだ終了
よりも遅く動作する。
もし、何のルールもなくこのコンテストに参加するのであれば、「リーダー」(現在はKuznetsov)のコードをコピーして、上記のシステムの動作にしたがって改造する必要があります。
これにより、最初の740msecの実行時間から約20msecの安定した利得が得られる。
ところで、元の配列が系列である場合、結果がどう変わるのか気になります。ArraySetAsSeries(arr,true)です。
このコンテストをルール無しとするならば、「リーダー」(現在はクズネツォフ)のコードをコピーして、上記のシステムの動作に従って修正する。
元の実行時間740msから約20msの安定したゲインが得られています。
加える価値がある。配列要素の 並びを気にしない場合。そうですね、優秀なバリアントです。一貫性を保つことが重要なら、別の何かが必要です。
ついでに、私のバージョンもご紹介しましょう。
の結果です。
S.S. 原則、制限速度に達している。次のステップは、マイクロ最適化とforループをいじるだけです。
ニコライの結果は、こうしたミクロの最適化を巧みに利用したものだと思います。
1,2,3,6,9,5,6,3,25,6,8,7,4 型のデータセットを含む配列があり、例えば値 3 を削除して、出力に 3 と空白のない同じ配列を得る必要があります。
不要な値の配列を最速でクリアする方法を探しているのですが・・・。
次のような例が思い浮かびます。
もっと安くて早い方法があるのでは?
ウラジミール、なぜこれが必要なんだ?
私の理解では、インジケーターバッファーで 行う必要があります。しかし、空の値や「不要な」値を前の値や、例えば極値の算術平均に置き換える方が論理的ではありませんか?そうすれば、より高速になり、配列の次元も変わりません。
ウラジミール、なぜこれが必要なんだ?
私の理解では、インジケーターバッファーで 行う必要があります。しかし、空の値や「不要な」値を、前の値や、例えば極値の算術平均で置き換える方が論理的ではありませんか?そうすれば、より高速になり、配列の次元も変わりません。
ウラジミール、なぜこれが必要なんだ?
私の理解では、インジケーターバッファーで やるしかないのでは?しかし、例えば、空の値や「不要な」値を、前の値や極値の算術平均で置き換える方が論理的ではありませんか?そうすれば、より高速になり、配列の次元も変わりません。
mql4で複数のEAで大量のオープンポジション/注文がある場合、私見ですが、check for symbolやmagicianで全てのオープンポジションを試すより、チケットで配列を保持し、配列を経由して注文が成立しているか確認する方が簡単だと思います。ですから、注文がクローズされた場合は、配列から「クロスアウト」されるはずです。そのような場合、以前は配列を「自分の中に」コピーして、配列のサイズを1つ小さくしていたのです。Vasiliy Sokolovから 提案されたもので、ありがとうございます。なぜ、いくつもの等しい要素を取り除くことが課題だったのかは、また別の問題ですが......。
ps これを書いている間に、もう答えは出ている。だから質問もすでに間違っている... )))))mql4で複数のEAで大量のオープンポジション/注文がある場合、私見ですが、check for symbolやmagicianで全てのオープンポジションを試すより、チケットで配列を保持し、配列を経由して注文が成立しているか確認する方が簡単だと思います。ですから、注文がクローズされた場合は、配列から「クロスアウト」されるはずです。そのような場合、以前は配列を「自分の中に」コピーして、配列のサイズを1つ小さくしていたのです。Vasiliy Sokolovから 提案されたもので、ありがとうございます。なぜ、いくつもの等しい要素を取り除くことが課題だったのかは、また別の問題ですが......。
ps 書いているうちに、もう答えが出てきました。質問もすでに間違っていることが判明・・・ )))))そのとき、だいたいわかったんです。
配列の順番は重要ではないので、配列の残りの要素を 動かさないように、「穴」を配列の上の方の値で埋めるクズネツォフの変法を使う方が合理的です。もちろんこちらの方が速いです。