MQL5에서 함께 배우고 쓰기 - 페이지 14

 

궁금해서 확인했습니다. 얻은 결과는

 2011.04 . 15 15 : 50 : 34      123 (EURUSD,D1) time for 'd = a + b + c' = 84453 milliseconds, i = 10000000
2011.04 . 15 15 : 51 : 54      123 (EURUSD,D1) time for 'StringAdd()' = 80906 milliseconds, i = 10000000
2011.04 . 15 15 : 53 : 22      123 (EURUSD,D1) time for 'StringConcatenate(d,a,b,c)' = 87359 milliseconds, i = 10000000
2011.04 . 15 15 : 55 : 11      123 (EURUSD,D1) time for 'd = a + b + c' = 83266 milliseconds, i = 10000000
2011.04 . 15 15 : 56 : 39      123 (EURUSD,D1) time for 'StringAdd()' = 88390 milliseconds, i = 10000000
2011.04 . 15 15 : 58 : 12      123 (EURUSD,D1) time for 'StringConcatenate(d,a,b,c)' = 93391 milliseconds, i = 10000000

그러나 여기에 일종의 잼이있는 것 같습니다 (검증 알고리즘이 있습니다) ...

 

Yedelkin :

StringConcatenate 는 더하기 연산을 사용하여 문자열을 연결하는 것보다 느린 것으로 나타났습니다. 캐치 뭔데?

행 기능.
첫 번째 패스의 경우 추가 및 문자열 변환 결과를 저장하는 데 필요한 버퍼 크기를 얻습니다. 문자열 d,( string )b 및 ( string )c 에 대한 버퍼 재배치가 발생하지 않습니다.
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы ввода/вывода / Использование кодовой страницы
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы ввода/вывода / Использование кодовой страницы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы ввода/вывода / Использование кодовой страницы - Документация по MQL5
 
mql5 :
행 기능.
첫 번째 패스의 경우 추가 및 문자열 변환 결과를 저장하는 데 필요한 버퍼 크기를 얻습니다. 문자열 d,( string )b 및 ( string )c 에 대한 버퍼 재배치가 발생하지 않습니다.

다양한 비교 변형을 시도했습니다. 원하는 결과를 얻지 못했습니다. 이 코드에 도달했습니다.

   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
 
문제. OrdersTotal () 함수는 거래 계정에 대한 총 활성 주문 수를 반환합니다. 특정 기호에 대한 활성 주문 수를 쉽게 얻을 수 있는 방법이 있습니까?
 
Yedelkin :
문제. OrdersTotal () 함수는 거래 계정에 대한 총 활성 주문 수를 반환합니다. 특정 기호에 대한 활성 주문 수를 쉽게 얻을 수 있는 방법이 있습니까?
전체 스토리를 확인하고 선택하세요.
 
Urain :
전체 스토리를 확인하고 선택하세요.
확인. 그래서 쉬운 방법은 없습니다.
 

문제. HistorySelect() 및 HistorySelectByPosition() 함수는 주문 내역과 거래 내역 을 쿼리합니다. 거래 목록이 오름차순으로 정렬되어 있는 디렉토리에서 설명 스크립트를 시작했습니다. 그냥 우연입니까, 아니면 HistorySelect() 및 HistorySelectByPosition() 함수가 목록을 오름차순으로 반환하도록 프로그래밍되어 있습니까?

 
Yedelkin :

문제. HistorySelect() 및 HistorySelectByPosition() 함수는 주문 내역과 거래 내역 을 쿼리합니다. 거래 목록이 오름차순으로 정렬되어 있는 디렉토리에서 설명 스크립트를 시작했습니다. 그냥 우연입니까, 아니면 HistorySelect() 및 HistorySelectByPosition() 함수가 목록을 오름차순으로 반환하도록 프로그래밍되어 있습니까?

실험을 하지 않은 결과가 몇 개인지, 특정 방식으로 정렬된 목록이 반환됩니다.

한 번은 레코드가 어떻게 정렬되어야 하는지를 나타내는 추가 매개변수에 대한 요청을 작성하고 싶었습니다.

그러나 나는 잘 생각하고 그것이 가치가 없다고 결정했습니다 (그들은 당신이 그것을 스스로 분류한다고 대답 할 수 있습니다). 비록 내가 그것을 쓰지 않은 것이 헛된 것일 수도 있지만 ...

 
Interesting :

... 자신과 그 모든 것을 정렬

미리 설치된 강제 정렬이 있는 경우 이것이 한 가지이지만 수동으로 추가 정렬을 만드는 것은 또 다른 것입니다.
 
Yedelkin :
미리 설치된 강제 정렬이 있는 경우 이것이 한 가지이지만 수동으로 추가 정렬을 만드는 것은 또 다른 것입니다.

MT4에서 수동으로 정렬(및 필터링도 수행)했습니다. 실수가 아니라면 "거품"으로 정렬했습니다.

나는 이것을 명확히 할 수 있도록 로컬 데이터베이스에서 정렬 코드를 가져왔습니다.

그러나 기록 쿼리가 더 이상 "기록" 탭에 연결되지 않는다는 것을 이해하기 때문에 MQL5에서 가장 잘 정렬하는 방법을 아직 결정하지 못했습니다(정렬 및 콘텐츠는 사용자가 탭에서 수행하는 작업에 의존하지 않음).