작업 순서: Script 'Test_s.ex5'를 M15 차트(EURUSD 기호)에 여러 번 첨부합니다.
결과:
2017.02.05 15:17:59.076 온스타트 1차 가입 2017.02.05 15:18:03.293 온스타트 2차 가입 2017.02.05 15:18:07.760 온스타트 3차 가입 2017.02.05 15:18:07.778 온이니트 2017.02.05 15:18:07.781 OnDeinit:1 2017.02.05 15:18:16.891 온스타트 4차 가입
조인 결과가 다릅니다. 결과가 무작위라는 점을 제외하고는 다르지 않을 것으로 예상되었습니다. OnInit\OnDeinit가 있는 행은 첫 번째부터 나타날 수 있고 아마도 10번째부터 나타날 수 있습니다.
또한, 시간 프레임을 변경할 때 표시기가 이 시간 프레임에서 즉시 언로드되지 않습니다. 지표의 새 복사본이 새 기간에 생성되는 동안. 생성자 소멸자에 지문이 표시됩니다. 소멸자가 즉시 호출된다고 가정합니까? 아니, 넌 잘못 되었어. 소멸자는 표시기가 언로드될 때 호출되고 표시기는 표시기가 언로드된 후 몇 초 만에 언로드됩니다.
Slawa : 로그를 표시합니다. 시간을 보려면. 차트에 지표를 추가하고 차트에서 지표를 제거하는 것은 비동기식 작업이라는 점을 추가해야 합니다. 또한, 시간 프레임을 변경할 때 표시기가 이 시간 프레임에서 즉시 언로드되지 않습니다. 지표의 새 복사본이 새 기간에 생성되는 동안. 생성자 소멸자에 지문이 표시됩니다. 소멸자가 즉시 호출된다고 가정합니까? 아니, 넌 잘못 되었어. 소멸자는 표시기가 언로드될 때 호출되고 표시기는 표시기가 언로드된 후 몇 초 만에 언로드됩니다.
비동기식은 단계 내에서 다른 순서의 함수 호출에만 영향을 줍니다(단계 #3 및 #5에서 볼 수 있음).
보시다시피 차트 기간의 모든 후속 변경은 첫 번째 변경(2단계: 출력 2줄)을 제외하고 예상대로 발생합니다(3단계: 출력 4줄과 유사). 그리고 차트 기간의 첫 번째 변경이 다른 모든 것과 달라야 하는 이유는 무엇입니까? 더 나은/나쁜 방법은 무엇입니까? 2단계(그리고 그것에서만) 출력의 누락된 두 줄이 왜 7단계(빨간색으로 강조 표시됨)로 이동했습니까?
비동기식은 단계 내에서 다른 순서의 함수 호출에만 영향을 줍니다(단계 #3 및 #5에서 볼 수 있음).
보시다시피 차트 기간의 첫 번째 변경(2단계)을 제외한 모든 후속 변경은 예상대로 발생합니다(3단계와 유사). 그리고 차트 기간의 첫 번째 변경이 다른 모든 것과 달라야 하는 이유는 무엇입니까? 더 나은/나쁜 방법은 무엇입니까?
나는 다시 설명하려고 노력할 것이다
M5 차트에 몇 가지 지표가 있습니다. 기간을 M5에서 M15로 변경하면 동일한 지표의 두 번째 사본이 생성됩니다. 첫 번째는 M5 Deinit에서, 두 번째는 M15 Init에서 두 표시기로 명령이 전송됩니다. 동시에 이러한 명령 중 어느 것이 다른 명령보다 먼저 실행될지는 미리 알 수 없습니다. 여기에는 서로 다른 스레드 간에 고전적인 경쟁이 있습니다.
그 후 첫 번째 지표에 대한 사용량 카운터가 감소합니다. 사용량 카운터가 0이 된 후 몇 초 후에 표시기가 차트에서 언로드됩니다. 이 경우 이 표시기의 전역 개체 소멸자가 호출됩니다.
M5 차트에 몇 가지 지표가 있습니다. 기간을 M5에서 M15로 변경하면 동일한 지표의 두 번째 사본이 생성됩니다. 첫 번째는 M5 Deinit에서, 두 번째는 M15 Init에서 두 표시기로 명령이 전송됩니다. 동시에 이러한 명령 중 어느 것이 다른 명령보다 먼저 실행될지는 미리 알 수 없습니다. 여기에는 서로 다른 스레드 간에 고전적인 경쟁이 있습니다.
그 후 첫 번째 지표에 대한 사용량 카운터가 감소합니다. 사용량 카운터가 0이 된 후 몇 초 후에 표시기가 차트에서 언로드됩니다. 이 경우 이 표시기의 전역 개체 소멸자가 호출됩니다.
나는 M5에서 M15로 기간을 변경할 때 M5 Deinit 명령이 첫 번째 표시기로 전송되지 않고(이 경우 M5에만) 다음까지 사용자가 전문가를 삭제합니다.
'Test_i.ex5'의 구조체 I이 제외되면(영향을 미치지 않음) 출력이 단순화됩니다.
2017.02.05 20:49:06.842 OnInit->M5 2017.02.05 20:49:21.253 OnInit->M15(*) 기간 변경 M5 -> M15: 표시기 M5 가 언로드되지 않음 2017.02.05 20:56:40.001 OnDeinit->M15:3기간 변경 M15 -> M30:표시기 M15가 즉시 언로드 됨 2017.02.05 20:56:40.132 OnInit->M30
M5 차트에 몇 가지 지표가 있습니다. 기간을 M5에서 M15로 변경하면 동일한 지표의 두 번째 사본이 생성됩니다. 첫 번째는 M5 Deinit에서, 두 번째는 M15 Init에서 두 표시기로 명령이 전송됩니다. 동시에 이러한 명령 중 어느 것이 다른 명령보다 먼저 실행될지는 미리 알 수 없습니다 . 여기에는 서로 다른 스레드 간에 고전적인 경쟁이 있습니다.
그 후 첫 번째 지표에 대한 사용량 카운터가 감소합니다. 사용량 카운터가 0이 된 후 몇 초 후에 표시기가 차트에서 언로드됩니다. 이 경우 이 표시기의 전역 개체 소멸자가 호출됩니다.
당신이 말하는 스트림을 설명할 수 있습니까? 한 문자의 모든 표시기가 같은 스레드에서 실행되지 않습니까?
불안정한 실행
작업 순서: Script 'Test_s.ex5'를 M15 차트(EURUSD 기호)에 여러 번 첨부합니다.
결과:
2017.02.05 15:17:59.076 온스타트 1차 가입
2017.02.05 15:18:03.293 온스타트 2차 가입
2017.02.05 15:18:07.760 온스타트 3차 가입
2017.02.05 15:18:07.778 온이니트
2017.02.05 15:18:07.781 OnDeinit:1
2017.02.05 15:18:16.891 온스타트 4차 가입
조인 결과가 다릅니다. 결과가 무작위라는 점을 제외하고는 다르지 않을 것으로 예상되었습니다. OnInit\OnDeinit가 있는 행은 첫 번째부터 나타날 수 있고 아마도 10번째부터 나타날 수 있습니다.
void OnInit () { Print ( __FUNCTION__ ); }
void OnDeinit ( const int reason ) { Print ( __FUNCTION__ , ":" , reason ); }
int OnCalculate ( const int , const int , const int , const double & [] ) { return 0 ; }
#import "..\\Experts\\Test.ex5"
void OnInit ();
#import
void OnStart ()
{
Print ( __FUNCTION__ );
OnInit ();
}
전문가 파일이 첨부되어 있습니다(실제로는 라이브러리로 사용됨), 코드는 여기 https://www.mql5.com/en/forum/1111/page1801#comment_4059227
제 잘못인지 단말기 탓인지 모르겠습니다.
5번째 표지판에서{
double A= 1.11111 ;
double B= 1.11111 ;
double C= 1.11111 ;
long CalcX=
NormalizeDouble (A, Digits )* MathPow ( 10 ,( Digits + 1 )* 3 - 1 )+
NormalizeDouble (B, Digits )* MathPow ( 10 ,( Digits + 1 )* 2 - 1 )+
NormalizeDouble (C, Digits )* MathPow ( 10 ,( Digits + 1 )* 1 - 1 );
Print ( "CalcX=" ,CalcX);
}
CalcX=111111111111111104 예상 값 CalcX=111111111111111111을 인쇄합니다.
차트 기간 변경 시 함수 호출 순서가 잘못됨
시퀀싱:
차트에 지표를 추가하고 차트에서 지표를 제거하는 것은 비동기식 작업이라는 점을 추가해야 합니다.
또한, 시간 프레임을 변경할 때 표시기가 이 시간 프레임에서 즉시 언로드되지 않습니다. 지표의 새 복사본이 새 기간에 생성되는 동안. 생성자 소멸자에 지문이 표시됩니다. 소멸자가 즉시 호출된다고 가정합니까? 아니, 넌 잘못 되었어. 소멸자는 표시기가 언로드될 때 호출되고 표시기는 표시기가 언로드된 후 몇 초 만에 언로드됩니다.
로그를 표시합니다. 시간을 보려면.
차트에 지표를 추가하고 차트에서 지표를 제거하는 것은 비동기식 작업이라는 점을 추가해야 합니다.
또한, 시간 프레임을 변경할 때 표시기가 이 시간 프레임에서 즉시 언로드되지 않습니다. 지표의 새 복사본이 새 기간에 생성되는 동안. 생성자 소멸자에 지문이 표시됩니다. 소멸자가 즉시 호출된다고 가정합니까? 아니, 넌 잘못 되었어. 소멸자는 표시기가 언로드될 때 호출되고 표시기는 표시기가 언로드된 후 몇 초 만에 언로드됩니다.
단계 사이에 충분한 시간이 경과한다고 가정합니다(차트 기간의 변경).
2017.02.05 19:49:49.984 I::I->M5 #1단계: 붙이기
2017.02.05 19:49:49.984 OnInit->M5
2017.02.05 19:51:39.853 I::I->M15 #2단계: 변경주기 M5 ->M15
2017.02.05 19:51:39.853 OnInit->M15
2017.02.05 19:53:29.813 OnDeinit->M15:3 #3단계: 변경 주기 M15->M30
2017.02.05 19:53:29.813 아이::~아이->M15
2017.02.05 19:53:29.864 아이::아이->M30
2017.02.05 19:53:29.864 OnInit->M30
2017.02.05 19:54:03.245 OnDeinit->M30:3 #4단계: 변경 주기 M30->H1
2017.02.05 19:54:03.245 아이::~아이->M30
2017.02.05 19:54:03.286 I::I->H1
2017.02.05 19:54:03.286 OnInit->H1
2017.02.05 19:55:02.984 I::I->H4 #5단계: 주기 H1 -> H4 변경
2017.02.05 19:55:02.984 OnInit->H4
2017.02.05 19:55:02.984 OnDeinit->H1:3
2017.02.05 19:55:02.984 I::~I->H1
2017.02.05 19:55:50.697 I::I->D1 #6단계: 변경 기간 H4 ->D1
2017.02.05 19:55:50.697 OnInit->D1
2017.02.05 19:55:50.697 OnDeinit->H4:3
2017.02.05 19:55:50.697 I::~I->H4
2017.02.05 19:56:11.122 OnDeinit->M5: 1 #7단계: 삭제
2017.02.05 19:56:11.122 아이::~아이->엠5
2017.02.05 19:56:11.122 OnDeinit->D1:1
2017.02.05 19:56:11.123 아이::~아이->디1
비동기식은 단계 내에서 다른 순서의 함수 호출에만 영향을 줍니다(단계 #3 및 #5에서 볼 수 있음).
보시다시피 차트 기간의 모든 후속 변경은 첫 번째 변경(2단계: 출력 2줄)을 제외하고 예상대로 발생합니다(3단계: 출력 4줄과 유사). 그리고 차트 기간의 첫 번째 변경이 다른 모든 것과 달라야 하는 이유는 무엇입니까? 더 나은/나쁜 방법은 무엇입니까? 2단계(그리고 그것에서만) 출력의 누락된 두 줄이 왜 7단계(빨간색으로 강조 표시됨)로 이동했습니까?
제 잘못인지 단말기 탓인지 모르겠습니다.
CalcX=111111111111111104 예상 값 CalcX=111111111111111111을 인쇄합니다.
단계 사이에 충분한 시간이 경과한다고 가정합니다(차트 기간의 변경).
2017.02.05 19:49:49.984 I::I->M5 #1단계: 붙이기
2017.02.05 19:49:49.984 OnInit->M5
2017.02.05 19:51:39.853 I::I->M15 #2단계: 변경주기 M5 ->M15
2017.02.05 19:51:39.853 OnInit->M15
2017.02.05 19:53:29.813 OnDeinit->M15:3 #3단계: 변경 주기 M15->M30
2017.02.05 19:53:29.813 아이::~아이->M15
2017.02.05 19:53:29.864 아이::아이->M30
2017.02.05 19:53:29.864 OnInit->M30
2017.02.05 19:54:03.245 OnDeinit->M30:3 #4단계: 변경 주기 M30->H1
2017.02.05 19:54:03.245 아이::~아이->M30
2017.02.05 19:54:03.286 I::I->H1
2017.02.05 19:54:03.286 OnInit->H1
2017.02.05 19:55:02.984 I::I->H4 #5단계: 주기 H1 -> H4 변경
2017.02.05 19:55:02.984 OnInit->H4
2017.02.05 19:55:02.984 OnDeinit->H1:3
2017.02.05 19:55:02.984 I::~I->H1
2017.02.05 19:55:50.697 I::I->D1 #6단계: 변경 기간 H4 ->D1
2017.02.05 19:55:50.697 OnInit->D1
2017.02.05 19:55:50.697 OnDeinit->H4:3
2017.02.05 19:55:50.697 I::~I->H4
2017.02.05 19:56:11.122 OnDeinit->M5:1 #7단계: 삭제
2017.02.05 19:56:11.122 아이::~아이->엠5
2017.02.05 19:56:11.122 OnDeinit->D1:1
2017.02.05 19:56:11.123 아이::~아이->디1
비동기식은 단계 내에서 다른 순서의 함수 호출에만 영향을 줍니다(단계 #3 및 #5에서 볼 수 있음).
보시다시피 차트 기간의 첫 번째 변경(2단계)을 제외한 모든 후속 변경은 예상대로 발생합니다(3단계와 유사). 그리고 차트 기간의 첫 번째 변경이 다른 모든 것과 달라야 하는 이유는 무엇입니까? 더 나은/나쁜 방법은 무엇입니까?
M5 차트에 몇 가지 지표가 있습니다. 기간을 M5에서 M15로 변경하면 동일한 지표의 두 번째 사본이 생성됩니다. 첫 번째는 M5 Deinit에서, 두 번째는 M15 Init에서 두 표시기로 명령이 전송됩니다. 동시에 이러한 명령 중 어느 것이 다른 명령보다 먼저 실행될지는 미리 알 수 없습니다. 여기에는 서로 다른 스레드 간에 고전적인 경쟁이 있습니다.
그 후 첫 번째 지표에 대한 사용량 카운터가 감소합니다. 사용량 카운터가 0이 된 후 몇 초 후에 표시기가 차트에서 언로드됩니다. 이 경우 이 표시기의 전역 개체 소멸자가 호출됩니다.
나는 다시 설명하려고 노력할 것이다
M5 차트에 몇 가지 지표가 있습니다. 기간을 M5에서 M15로 변경하면 동일한 지표의 두 번째 사본이 생성됩니다. 첫 번째는 M5 Deinit에서, 두 번째는 M15 Init에서 두 표시기로 명령이 전송됩니다. 동시에 이러한 명령 중 어느 것이 다른 명령보다 먼저 실행될지는 미리 알 수 없습니다. 여기에는 서로 다른 스레드 간에 고전적인 경쟁이 있습니다.
그 후 첫 번째 지표에 대한 사용량 카운터가 감소합니다. 사용량 카운터가 0이 된 후 몇 초 후에 표시기가 차트에서 언로드됩니다. 이 경우 이 표시기의 전역 개체 소멸자가 호출됩니다.
나는 M5에서 M15로 기간을 변경할 때 M5 Deinit 명령이 첫 번째 표시기로 전송되지 않고(이 경우 M5에만) 다음까지 사용자가 전문가를 삭제합니다.
'Test_i.ex5'의 구조체 I이 제외되면(영향을 미치지 않음) 출력이 단순화됩니다.
2017.02.05 20:49:06.842 OnInit->M5
2017.02.05 20:49:21.253 OnInit->M15 (*) 기간 변경 M5 -> M15: 표시기 M5 가 언로드되지 않음
2017.02.05 20:56:40.001 OnDeinit->M15:3 기간 변경 M15 -> M30: 표시기 M15가 즉시 언로드 됨
2017.02.05 20:56:40.132 OnInit->M30
(*) 이후 5분 이상 경과하고 M5 표시기 가 언로드되지 않음
차트에서 전문가 제거
2017.02.05 20:57:35.176 OnDeinit->M5:1 표시기 M5는 전문가 삭제 후에만 언로드됨
2017.02.05 20:57:35.177 OnDeinit->M30:1
나는 다시 설명하려고 노력할 것이다
M5 차트에 몇 가지 지표가 있습니다. 기간을 M5에서 M15로 변경하면 동일한 지표의 두 번째 사본이 생성됩니다. 첫 번째는 M5 Deinit에서, 두 번째는 M15 Init에서 두 표시기로 명령이 전송됩니다. 동시에 이러한 명령 중 어느 것이 다른 명령보다 먼저 실행될지는 미리 알 수 없습니다 . 여기에는 서로 다른 스레드 간에 고전적인 경쟁이 있습니다.
그 후 첫 번째 지표에 대한 사용량 카운터가 감소합니다. 사용량 카운터가 0이 된 후 몇 초 후에 표시기가 차트에서 언로드됩니다. 이 경우 이 표시기의 전역 개체 소멸자가 호출됩니다.
Bill Williams의 표시기 설치 시 결함
프랙탈 넣어 - 넣어
AO를 넣어 - ADX를 넣어
빌드 1031
유효 소수점 이하 자릿수의 두 배 > DBL_DIG=15 이면 일반적인 규칙 - 작동하지 않음
그리고 어떤 것이 작동합니까?
도움말은 오랫동안 최대값 이 9223372036854775807이라고 말합니다.