2011.04.1515:50:34123 (EURUSD,D1) time for'd = a + b + c' = 84453 milliseconds, i = 100000002011.04.1515:51:54123 (EURUSD,D1) time for'StringAdd()' = 80906 milliseconds, i = 100000002011.04.1515:53:22123 (EURUSD,D1) time for'StringConcatenate(d,a,b,c)' = 87359 milliseconds, i = 100000002011.04.1515:55:11123 (EURUSD,D1) time for'd = a + b + c' = 83266 milliseconds, i = 100000002011.04.1515:56:39123 (EURUSD,D1) time for'StringAdd()' = 88390 milliseconds, i = 100000002011.04.1515:58:12123 (EURUSD,D1) time for'StringConcatenate(d,a,b,c)' = 93391 milliseconds, i = 10000000
uint start,stop;
long i,length=1000000;
string a1[1000000]; for(i=0;i<length;i++) a1[i]="Пример";
string a2[1000000]; for(i=0;i<length;i++) a2[i]="Пример";
string a3[1000000]; for(i=0;i<length;i++) a3[i]="Пример";
double b1[1000000]; ArrayInitialize(b1,1.26);
double b2[1000000]; ArrayInitialize(b2,1.26);
double b3[1000000]; ArrayInitialize(b3,1.26);
double c1[1000000]; ArrayInitialize(c1,1.27);
double c2[1000000]; ArrayInitialize(c2,1.27);
double c3[1000000]; ArrayInitialize(c3,1.27);
string d1[1000000]; for(i=0;i<length;i++) d1[i]=NULL;
string d2[1000000]; for(i=0;i<length;i++) d2[i]=NULL;
string d3[1000000]; for(i=0;i<length;i++) d3[i]=NULL;
//////////////////////////////////////////////////////////////////////////////////----------------------------------------------------------------------------////Work variables//----------------------------------------------------------------------------//
start=GetTickCount();
for(i=0;i<length;i++)
{
d1[i]=a1[i]+(string)b1[i]+(string)c1[i];
}
stop=GetTickCount();
Print("time for 'd = a + b + c' = ",(stop-start)," milliseconds, i = ",i);
//Второй способ
start=GetTickCount();
for(i=0;i<length;i++)
{
StringAdd(d2[i],a2[i]);
StringAdd(d2[i],(string)b2[i]);
StringAdd(d2[i],(string)c2[i]);
}
stop=GetTickCount();
Print("time for 'StringAdd()' = ",(stop-start)," milliseconds, i = ",i);
//Третий способ
start=GetTickCount();
for(i=0;i<length;i++)
{
StringConcatenate(d3[i],a3[i],b3[i],c3[i]);
}
stop=GetTickCount();
Print("time for 'StringConcatenate(d,a,b,c)' = ",(stop-start)," milliseconds, i = ",i);
結果
KL 0 DoubleToString (EURGBP,M1) 23:53:01 time for'd = a + b + c' = 15766 milliseconds, i = 1000000
HD 0 DoubleToString (EURGBP,M1) 23:53:26 time for'StringAdd()' = 25390 milliseconds, i = 1000000
FK 0 DoubleToString (EURGBP,M1) 23:54:03 time for'StringConcatenate(d,a,b,c)' = 36516 milliseconds, i = 1000000
KS 0 DoubleToString (EURGBP,M1) 23:54:56 time for'd = a + b + c' = 15781 milliseconds, i = 1000000
FL 0 DoubleToString (EURGBP,M1) 23:55:21 time for'StringAdd()' = 25375 milliseconds, i = 1000000
OR 0 DoubleToString (EURGBP,M1) 23:55:57 time for'StringConcatenate(d,a,b,c)' = 35828 milliseconds, i = 1000000
興味本位で調べてみた。結果は以下の通りです。
でも、ここ(アルゴリズムのチェックという意味)がおかしいような気がするのですが・・・。
Yedelkin:
StringConcatenateは 加算演算を用いた文字列結合よりも遅いことが判明した。何が引っかかるのか?
最初のパスでは、文字列の 加算と変換の 結果を格納するのに適したバッファサイズを取得します。つまり、文字列d、(文字列)b、(文字列)cに対するバッファの再配置はありません。
特徴的な文字列。
最初のパスでは、文字列の 加算と変換の 結果を格納するための正しいバッファサイズを取得します。つまり、文字列d、(文字列)b、(文字列)cに対するバッファの再配置は起こりません。
様々な比較方法を試してみたが、思うような結果が得られない。このコードに行き着いたのです。
結果
質問です。OrdersTotal() 関数は、取引口座の有効な注文の合計数を返します。あるシンボルの有効注文数を簡単に取得する方法はありますか?
全容を把握し、サンプリングを行う。
質問です。HistorySelect() 関数とHistorySelectByPosition() 関数は、注文の履歴と取引の履歴 を 要求 します。 ガイドに掲載されている解説スクリプトを実行したところ、その案件リストが昇順に並びました。それとも、関数HistorySelect() とHistorySelectByPosition() は、昇順で並べられたリストを返すようにプログラムされて いるのでしょうか?
質問です。HistorySelect() 関数とHistorySelectByPosition() 関数は、注文の履歴と取引の履歴 を 要求 します。 ガイドに掲載されている解説スクリプトを実行したところ、その案件リストが昇順に並びました。それとも、HistorySelect()とHistorySelectByPosition() 関数が 昇順でリストを返すようにプログラム されているのでしょうか?
何度実験しても結果は同じで、ある方法で並べられたリストが返されるのです。
一度は、エントリーのソート方法を正確に指定する追加パラメータのリクエストを書きたいと思ったこともあります。
でも、よくよく考えてみると、書いても意味がない(彼らは自分でその分類に答えるかもしれないし)、書かないのは間違いかもしれないが...と判断しました。
自分で解決する
ただ、プリセットの強制振り分けがあるのと、手動で追加の振り分けを作るのは別の話です。
ただ、MT4では手動でソートして(フィルタリングも)、私の記憶違いでなければ「バブル」でソートしていました。
そこでデータベースからソートコードを取得したので、それを明確にすることができます。
また、MQL5では履歴クエリが履歴タブに紐付かないことが理解できたので、ソートの方法は決めていません(ソートや内容は、ユーザーがタブで行ったことに依存しない)。