오류, 버그, 질문 - 페이지 2723

 
Aleksey Mavrin :

누가 무엇이 문제이고 일정 업데이트 속도를 높이는 방법을 알려줄까요? Expert Advisor에서 ChartRedraw 함수를 호출하지만 여전히 몇 분 지연됩니다.

ChartRedraw는 그래픽 개체를 그리기(업데이트)할 때만 필요하며 표시기 버퍼 로 그리는 일반 표시기에는 ChartRedraw가 필요하지 않습니다.

IMHO, 표시기에서 문제를 찾으십시오. 각 틱에서 버퍼 계산이 잘못되었을 수 있습니다. 매 틱마다 전체 기록을 계산하는 "저자"가 있습니다.

추신: 장담할 수는 없지만 ChartRedraw가 기록 동기화로 전체 차트를 업데이트할 수 있습니다. 그렇다면 일반적으로 전체 기록을 완전히 계산하여 매번 표시기를 다시 시작합니다.

UPD: 차트의 기록을 더 적은 수의 막대로 제한합니다. 10,000개면 충분합니다. MT4에서는 무거운 표시기가 모든 메모리를 "고비"한 다음 EA가 올바르게 작동하지 않는 이유를 찾는 경우가 있었습니다. 작동하지 않았다). MT5에서는 모든 메모리가 사용된 것 같지는 않지만 .... 글쎄, 어떤 일이 일어날 수 있습니다

 
Igor Makanu :

ChartRedraw는 그래픽 개체를 그리기(업데이트)할 때만 필요하며 표시기 버퍼 로 그리는 일반 표시기에는 ChartRedraw가 필요하지 않습니다.

IMHO, 표시기에서 문제를 찾으십시오. 각 틱에서 버퍼 계산이 잘못되었을 수 있습니다. 매 틱마다 전체 기록을 계산하는 "저자"가 있습니다.

추신: 장담할 수는 없지만 ChartRedraw가 기록 동기화로 전체 차트를 업데이트할 수 있습니다. 그렇다면 일반적으로 전체 기록을 완전히 계산하여 매번 표시기를 다시 시작합니다.

UPD: 차트의 기록을 더 적은 수의 막대로 제한합니다. 10,000개면 충분합니다. MT4에서는 무거운 표시기가 모든 메모리를 "고비"한 다음 EA가 올바르게 작동하지 않는 이유를 찾는 경우가 있었습니다. 작동하지 않았다). MT5에서는 모든 메모리가 사용된 것 같지는 않지만 .... 글쎄, 어떤 일이 일어날 수 있습니다

또한 계산을 최적화하고 테스트를 위해 세련된 칠면조 버전을 배치하는 데 즉시 도움이 되었습니다. 그 전에는 1000개의 막대마다 틱을 세었는데 이제 새 막대가 열리기를 기다리고 있습니다.

이 때문에 여전히 매우 놀랄 가치가 있습니다. 그다지 강력하지 않은 계산의 1k 막대가 차트 그리기를 2분 동안 느리게 합니까? ..

 
Aleksey Mavrin :

이 때문에 여전히 매우 놀랄 가치가 있습니다. 그다지 강력하지 않은 계산의 1k 막대가 차트 그리기를 2분 동안 느리게 합니까? ..

이것은 불가능합니다. 제 생각에는 터미널이 " xxx 표시기의 계산 이 너무 깁니다"라는 메시지와 함께 표시기를 언로드합니다.

MT(4/5)의 속도는 매우 빠르며 물론 동일한 데이터를 여러 번 셀 수 있지만 IMHO, 여전히 시도해야 합니다.

나는 지표의 작성자가 지표 버퍼의 경제적인 계산에 익숙하지 않다고 생각하고 마지막 막대를 올바르게 계산하는 것을 잊어버렸습니다... 지표 작성 방법을 연구하기 위해 시급히 KB에서;)

 
Slava :

이 두 프로그램이 동일한 터미널에 있습니까 아니면 두 개의 다른 프로그램에 있습니까?

다음은 문제를 재현하는 코드입니다. https://www.mql5.com/en/forum/332849

이를 재현하려면 코드를 2번 이상 실행해야 합니다.

File-Sharing ... my next "Sometimes-Bug" in MT5?
File-Sharing ... my next "Sometimes-Bug" in MT5?
  • 2020.02.16
  • www.mql5.com
FILE_SHARE_READ and FILE_SHARE_WRITE do not work proper. MQL creates buffers with different contents for the same file. Please watch the example...
 
Alexey Navoykov :

전혀 필요하지 않습니다. 왜 시시해? C#은 어떻습니까? - 의미에서 다시 한 번 그에게.

아마도 C++이 유사하고 C의 구조가 거기에 왔기 때문일 것입니다.

구조의 수동성에 대한 모든 이야기는 모두 구식 아이디어, IMHO입니다.

생성자가 필요합니다. 클래스를 사용하거나 샤프에 오신 것을 환영합니다. 왜 그러한 함축의 구조를 박탈합니까? 프로그램은 이것에서 더 표현력이 될 것입니다. 여기서 나는 누군가의 코드를 가져갈 것입니다. 클래스 대신 구조체를 참조하십시오. 단 한 단어에서 많은 정보를 얻을 수 있습니다. 당신은 아무 것도 얻지 못할 것입니다. 당신은 내가 한 순간에 얻은 것과 같은 결과를 얻기 위해 부지런히 소스 코드를 연구할 것입니다. 내 경험에 따르면, 구조에 대한 이러한 동의는 존중됩니다. 글쎄, 어쩌면 약간의 허무주의적 주변주의일 수도 있습니다.

적어도 모든 유형에는 생성자가 있어야 한다고 생각합니다. 초기화되지 않은 필드는 좋지 않으므로 피해야 합니다.

거기에는 악이 없다고 생각합니다. 그들은 심지어 그것을 표준으로 확장했습니다. 초기화되지 않은 unsigned char 및 std:: byte를 읽는 것은 정의되지 않은 동작이 아닙니다. POD에 대한 집계 초기화가 가능합니다. 그리고 잊지 마세요. 이 모든 초기화는 무료가 아니며 리소스(CPU, 메모리, 실행 파일 크기)의 실제 비용입니다. 이것을 넘버 크러셔로 장착하면 일부 마이크로 컨트롤러의 경우 이것이 중요할 수 있습니다. 결국 C/C++는 단순히 나사처럼 날카롭게 때리는 것이 아니다.

 unsigned char fn() { unsigned char q; return q + 2 ;}
int main() {
    fn();
}
0000000000001119 <fn>:
     1119 :       55                       push   %rbp
     111 a:       48 89 e5                mov    %rsp,%rbp
     111 d:       0 f b6 45 ff             movzbl - 0x1 (%rbp),%eax
     1121 :       83 c0 02                 add    $ 0x2 ,%eax
     1124 :       5 d                      pop    %rbp
     1125 :       c3                      retq           

unsigned char fn2() { unsigned char q = 5 ; return q + 2 ;}
int main() {
    fn();
}
0000000000001119 <fn2>:
     1119 :       55                       push   %rbp
     111 a:       48 89 e5                mov    %rsp,%rbp
     111 d:       c6 45 ff 05              movb   $ 0x5 ,- 0x1 (%rbp)
     1121 :       0 f b6 45 ff             movzbl - 0x1 (%rbp),%eax
     1125 :       83 c0 02                 add    $ 0x2 ,%eax
     1128 :       5 d                      pop    %rbp
     1129 :       c3                      retq
변수 하나를 초기화하는 것만으로도 명령어 크기가 30% 증가했습니다.
 
Stanislav Korotky :

하나의 터미널에서. 전문가는 데이터를 쓰고 지표를 읽습니다. 그들은 다른 차트에 매달렸지만 하나에 있을 수 있다는 것은 분명합니다(중요한 경우). 빌드 2380.

파일을 읽는 Expert Advisor는 파일을 닫은 상태로 유지해야 합니다.

MQL5에서 파일 구현의 특징은 자체 버퍼에 있는 파일의 데이터를 최대로 유지한다는 것입니다. 정보의 양이 너무 커서 버퍼에 맞지 않으면 포인터를 파일의 시작 부분으로 이동한 다음 끝 부분으로 이동하는 트릭이 작동할 수 있습니다.

그래서 지금 은 파일을 열고 내용을 확인한 다음 다시 닫습니다.

 
Slava :

파일을 읽는 Expert Advisor는 파일을 닫은 상태로 유지해야 합니다.

MQL5에서 파일 구현의 특징은 자체 버퍼에 있는 파일의 데이터를 최대로 유지한다는 것입니다. 정보의 양이 너무 커서 버퍼에 맞지 않으면 포인터를 파일의 시작 부분으로 이동한 다음 끝 부분으로 이동하는 트릭이 작동할 수 있습니다.

그래서 지금 은 파일을 열고 내용을 확인한 다음 다시 닫습니다.

그래서 FileFlush()는 쓸모가 없습니까?
 
Alain Verleyen :
그래서 FileFlush()는 쓸모가 없습니까?

아니요. 다른 사람이 수정된 파일을 읽을 수 있도록 하려면 FileFlush가 필수입니다.

문제는 MQL5 프로그램이 파일을 열 때 자체 버퍼로 파일을 읽는다는 것입니다. 그리고 파일을 다시 읽을 때까지 파일에서 무언가가 변경되었다는 사실에 대해 아무것도 알지 못합니다. 이 파일을 닫았다가 열 때만 파일을 다시 읽을 수 있습니다.

 
Slava :
아니요. 다른 사람이 수정된 파일을 읽을 수 있도록 하려면 FileFlush가 필수입니다.

파일을 닫아도 ?

 
Andrey Barinov :

파일을 닫아도 ?

그게 바로 내가 말하는 것입니다. 닫았다가 다시 엽니다

아니면 파일을 닫기 전에 FileFlush를 의미합니까?