문제. GetTickCount() 와 같은 함수 가 있습니다. 시스템이 시작된 후 경과 된 밀리초 수를 반환합니다 . 메모에는 "카운터는 시스템 타이머의 해상도에 의해 제한됩니다. 시간은 부호 없는 정수로 저장되기 때문에 컴퓨터가 계속 실행될 때 49.7일마다 오버플 로됩니다."
카운터가 넘친 후에는 어떻게 됩니까? 0으로 재설정되고 새 카운트다운이 시작됩니까? 아니면 시스템이 멈추나요?
문제. switch(expression){...} 문의 설명에는 " switch 문의 표현 은 정수 유형이어야 합니다"라고 나와 있습니다. 인터넷에서 다른 유형의 표현으로 이 연산자에 대한 설명을 만났습니다. switch 문의 사용이 문자열 유형 표현식을 포함하도록 확장됩니까?
문제. switch(expression){...} 문의 설명에는 " switch 문의 표현 은 정수 유형이어야 합니다"라고 나와 있습니다. 인터넷에서 다른 유형의 표현으로 이 연산자에 대한 설명을 만났습니다. switch 문의 사용이 문자열 유형 표현식을 포함하도록 확장됩니까?
아니요, 불행히도 그렇지 않습니다. 문자열 유형의 경우에만 ... else if ... else
스위치에서 정수 유형 을 사용하기 때문에 다음과 비교할 때 몇 배의 속도 향상이 달성됩니다.
문제. StringConcatenate() 함수에 대한 설명은 " 임시 문자열 변수를 사용하지 않기 때문에 덧셈 연산을 사용하여 문자열을 연결하는 것보다 StringConcatenate() 함수가 더 빠르고 메모리 효율적입니다."라고 말합니다. 핸드북의 예제를 약간 변경하여 사용했습니다.
string a= "a" ,b= "b" ,c;
uint start,stop;
long i,length= 10000000 ;
//--- первый способ
start= GetTickCount ();
for (i= 0 ;i<length;i++)
{
c=a+b;
}
stop= GetTickCount ();
Print ( "time for 'c = a + b' = " ,(stop-start), " milliseconds, i = " ,i);
//--- второй способ
a= "a" ; // заново инициализируем переменную a
start= GetTickCount ();
for (i= 0 ;i<length;i++)
{
StringAdd (a,b);
}
stop= GetTickCount ();
Print ( "time for 'StringAdd(a,b)' = " ,(stop-start), " milliseconds, i = " ,i);
//--- третий способ
a= "a" ;c= "" ;
start= GetTickCount ();
for (i= 0 ;i<length;i++)
{
int k= StringConcatenate (c,a,b);
//c=""; //с такой строчкой работает ещё дольше.
}
stop= GetTickCount ();
Print ( "time for 'StringConcatenate(c,a,b)' = " ,(stop-start), " milliseconds, i = " ,i);
내가 얻은 출력에서 :
DR 0 DoubleToString (EURGBP,M1) 22 : 15 : 55 time for'c = a + b' = 2359 milliseconds, i = 10000000
QE 0 DoubleToString (EURGBP,M1) 22 : 15 : 56 time for'StringAdd(a,b)' = 1031 milliseconds, i = 10000000
FE 0 DoubleToString (EURGBP,M1) 22 : 16 : 00 time for'StringConcatenate(c,a,b)' = 3891 milliseconds, i = 10000000
StringConcatenate 는 더하기 연산을 사용하여 문자열을 연결하는 것보다 느린 것으로 나타났습니다. 캐치 뭔데?
문제. StringConcatenate() 함수에 대한 설명은 " 임시 문자열 변수를 사용하지 않기 때문에 덧셈 연산을 사용하여 문자열을 연결하는 것보다 StringConcatenate() 함수가 더 빠르고 메모리 효율적입니다."라고 말합니다. 핸드북의 예제를 약간 변경하여 사용했습니다.
내가 얻은 출력에서 :
StringConcatenate 는 더하기 연산을 사용하여 문자열을 연결하는 것보다 느린 것으로 나타났습니다. 캐치 뭔데?
확인하는 것은 약간 다릅니다(모든 것을 올바르게 이해한 경우). 기능의 기능은 다른 ...
이 코드와 같은 것
////////////////////////////////////////////////////////////////////////////////// Global variables, used in working the trade system //////////////////////////////////////////////////////////////////////////////////string a= "Пример" ;
double b= 1.26 ,c = 1.27 ;
string d;
uint start,stop;
long i,length= 10000000 ;
////////////////////////////////////////////////////////////////////////////////voidOnStart ()
{
//----------------------------------------------------------------------------////Work variables//----------------------------------------------------------------------------//
start= GetTickCount ();
for (i= 0 ;i<length;i++)
{
d=a+( string )b+( string )c;
}
stop= GetTickCount ();
Print ( "time for 'd = a + b + c' = " ,(stop-start), " milliseconds, i = " ,i);
//Второй способ
d= "" ;
start= GetTickCount ();
for (i= 0 ;i<length;i++)
{
StringAdd (d,a);
StringAdd (d,( string )b);
StringAdd (d,( string )c);
}
stop= GetTickCount ();
Print ( "time for 'StringAdd()' = " ,(stop-start), " milliseconds, i = " ,i);
//Третий способ
d= "" ;
start= GetTickCount ();
for (i= 0 ;i<length;i++)
{
int k= StringConcatenate (d,a,b,c);
}
stop= GetTickCount ();
Print ( "time for 'StringConcatenate(d,a,b,c)' = " ,(stop-start), " milliseconds, i = " ,i);
//----------------------------------------------------------------------------//
}
////////////////////////////////////////////////////////////////////////////////
그리고 그러한 결과
2011.04 . 1515 : 28 : 58123 (EURUSD,D1) time for'd = a + b + c' = 81094 milliseconds, i = 100000002011.04 . 1515 : 30 : 24123 (EURUSD,D1) time for'StringAdd()' = 85828 milliseconds, i = 100000002011.04 . 1515 : 31 : 46123 (EURUSD,D1) time for'StringConcatenate(d,a,b,c)' = 81812 milliseconds, i = 100000002011.04 . 1515 : 33 : 36123 (EURUSD,D1) time for'd = a + b + c' = 82938 milliseconds, i = 100000002011.04 . 1515 : 35 : 00123 (EURUSD,D1) time for'StringAdd()' = 83859 milliseconds, i = 100000002011.04 . 1515 : 36 : 21123 (EURUSD,D1) time for'StringConcatenate(d,a,b,c)' = 80719 milliseconds, i = 10000000
추신
대부분의 경우 d= "" 줄은 for 루프에 배치되어야 하지만 이 캔트는 결과에 실제로 영향을 미치지 않는다고 생각합니다.
기이한. 사이트에 이미 있어야 하는 MQL5의 코드가 필요합니다. 그냥 볼 가치가 있습니다. 그게 바로 우리가 말하는 것입니다.
그러나 그것은 당신에게 달려 있습니다.
검색은 매우 지루합니다. 누군가가 즉시 말할 수 있다는 것뿐입니다.
그건 그렇고, 나는이 코드를 mql5로 변경했습니다. 누군가에게 유용할 수도 있습니다.
의견을 부탁합니다:
ENUM_TRADE_RETURN_CODES
코드 식별자 설명
10004 TRADE_RETCODE_REQUOTE 인용
10006 TRADE_RETCODE_REJECT 요청이 거부되었습니다.
...
코드 없음 10005 . 이거 실수 아니야?
감사합니다...
문제. GetTickCount() 와 같은 함수 가 있습니다. 시스템이 시작된 후 경과 된 밀리초 수를 반환합니다 . 메모에는 " 카운터는 시스템 타이머의 해상도에 의해 제한됩니다. 시간은 부호 없는 정수로 저장되기 때문에 컴퓨터가 계속 실행될 때 49.7일마다 오버플 로됩니다."
카운터가 넘친 후에는 어떻게 됩니까? 0으로 재설정되고 새 카운트다운이 시작됩니까? 아니면 시스템이 멈추나요?
Yedelkin :
카운터가 넘친 후에는 어떻게 됩니까? 0으로 재설정되고 새 카운트다운이 시작됩니까? 아니면 시스템이 멈추나요?
오버플로 및 처음부터 시작합니다.
문제. switch(expression){...} 문의 설명에는 " switch 문의 표현 은 정수 유형이어야 합니다"라고 나와 있습니다. 인터넷에서 다른 유형의 표현으로 이 연산자에 대한 설명을 만났습니다. switch 문의 사용이 문자열 유형 표현식을 포함하도록 확장됩니까?
문제. switch(expression){...} 문의 설명에는 " switch 문의 표현 은 정수 유형이어야 합니다"라고 나와 있습니다. 인터넷에서 다른 유형의 표현으로 이 연산자에 대한 설명을 만났습니다. switch 문의 사용이 문자열 유형 표현식을 포함하도록 확장됩니까?
아니요, 불행히도 그렇지 않습니다. 문자열 유형의 경우에만 ... else if ... else
스위치에서 정수 유형 을 사용하기 때문에 다음과 비교할 때 몇 배의 속도 향상이 달성됩니다.
아니요, 불행히도 그렇지 않습니다. 문자열 유형의 경우에만 ... else if ... else
스위치에서 정수 유형 을 사용하기 때문에 다음과 비교할 때 몇 배의 속도 향상이 달성됩니다.
문제. StringConcatenate() 함수에 대한 설명은 " 임시 문자열 변수를 사용하지 않기 때문에 덧셈 연산을 사용하여 문자열을 연결하는 것보다 StringConcatenate() 함수가 더 빠르고 메모리 효율적입니다."라고 말합니다. 핸드북의 예제를 약간 변경하여 사용했습니다.
내가 얻은 출력에서 :StringConcatenate 는 더하기 연산을 사용하여 문자열을 연결하는 것보다 느린 것으로 나타났습니다. 캐치 뭔데?
문제. StringConcatenate() 함수에 대한 설명은 " 임시 문자열 변수를 사용하지 않기 때문에 덧셈 연산을 사용하여 문자열을 연결하는 것보다 StringConcatenate() 함수가 더 빠르고 메모리 효율적입니다."라고 말합니다. 핸드북의 예제를 약간 변경하여 사용했습니다.
내가 얻은 출력에서 :StringConcatenate 는 더하기 연산을 사용하여 문자열을 연결하는 것보다 느린 것으로 나타났습니다. 캐치 뭔데?
확인하는 것은 약간 다릅니다(모든 것을 올바르게 이해한 경우). 기능의 기능은 다른 ...
이 코드와 같은 것
그리고 그러한 결과
추신
대부분의 경우 d= "" 줄은 for 루프에 배치되어야 하지만 이 캔트는 결과에 실제로 영향을 미치지 않는다고 생각합니다.