iClose/iOpen 시계열 등에 대한 액세스 작업 시 MQL5 버그 - 페이지 4

 
Renat Fatkhullin :

코드와 작업에서 바로:

  1. 표시기의 CopyXXX 기능은 데이터의 완전한 동기 다운로드를 기다리지 않고 사용 가능한 것을 반환합니다. 그렇지 않으면 표시기가 모든 것을 완전히 느리게 합니다.

  2. 처음에 모든 데이터가 동기화되지 않은 경우 후속 작업에 문제가 있는 것 같습니다.
    "성공적인 이력서를 조심스럽게 기다리겠습니다" 스페어 모드로 변경해야 합니다. 예를 들어 OnCalculate는 호출되지 않습니다.

  3. 최대 부하로 전역 초기화가 OnInit으로 이동하여 표시기가 매우 오랜 시간 동안 카운트 및 대기하는 것은 좋지 않습니다.
    동시에 이 기호의 차트 업데이트가 차단되고 다른 많은 참가자는 기다려야 하며 새로운 데이터를 받지 못합니다. 표시기는 오랫동안 리소스를 사용하지 않아야 합니다. 긴 초기화를 OnCalculate의 단계별/문자별 초기화로 균등하게 확장하여 조각으로 계산하는 것이 좋습니다.

  4. 이 표시기는 동기화를 위해 네트워크를 통해 약 800MB의 기록 데이터를 다운로드했습니다.

  5. 표시기는 메모리가 가장 명시적인 방식으로 할당되는 512개의 드로잉 라인을 요구합니다. 이것은 비용이 많이 듭니다. 총 100개의 라인이 사용됩니다.

  6. 코드를 읽기 어렵다

1. 예, 따라서 일시 중지로 여러 번 호출하거나 표시기를 여러 번 수동으로 다시 시작해야하지만 항상 도움이되는 것은 아니며 잠시 후 표시기가 계산을 멈 춥니 다.

2. 현재 버전이 최적이 아니라는 점을 충분히 인정합니다. 설명서의 권장 기능("데이터 액세스 구성" 섹션)을 포함하여 다양한 옵션을 시도했지만 마지막 버전에서는 약간 단순화했으며 아마도 최적이 아닐 수도 있습니다. iBarShift 함수를 여러 번 호출하게 되지만, 반면에 이를 거부하면 동기화된 데이터 를 준비하기 위한 특수 함수를 만들어야 하는데 아직 작성하지 못한 것이 매우 번거롭고 표준 기능이 없으며 언어가 이미 인덱스별로 시간을 요청하고 시간별로 바 인덱스를 요청하는 정규 기능을 제공하더라도 이 기회를 사용하는 것이 논리적일 것입니다.

3. OnInit에서는 포트폴리오 조합의 정의와 버퍼 할당만 하고 OnInit에서는 요청이 없고 선택적으로 캐시가 사라지는 것을 방지하기 위해 백그라운드에서 모든 M1 악기의 차트를 열려고 시도했는데 도움이 될 것 같습니다 , 물론 최대 로드 시 28개의 차트는 모두 끔찍합니다. 첫 번째 데이터 요청은 이미 OnCalculate에 들어갑니다. 여기서 저는 데이터가 캐시되고 시리즈 모든 악기가 수집되고 호출(SetupIntervals, CalculateEquity 및 기타)이 발생하고 모든 데이터가 준비되고 iBarShift 및 iClose 및 기타 유용한 함수에 대한 모든 호출이 캐시된 데이터를 반환하는 방식으로 계산했습니다. 이것이 항상 작동하지 않는 이유

4. 이것은 아마도 800mb 틱 데이터일까요?... 하지만 28개 악기의 포트폴리오를 구성하는 다른 방법을 모르겠습니다. 기간은 별도로 존재합니다)

5. 사실 지표는 많은 포트폴리오 조합이 사용될 수 있다고 가정하고, 이제 420개 라인 + 서비스 라인(모든 종류의 카드, 채널 등)으로 사전 구성된 조합이 있습니다. 이론적으로 사용자는 모든 포트폴리오를 요청할 수 있습니다. 512 라인, #property Indicators_buffers를 사용하여 버퍼 수를 제한하는 것은 불가능합니다. 왜냐하면 사용자가 얼마나 요청할지는 알 수 없습니다. MT4에서는 최대 부하에서 속도가 느려지지만 작동합니다.

6. 필요하면 댓글 달겠습니다


추신: 처음에 실수를 해서 다른 버전을 게시한 다음 첨부 파일을 수정했기 때문에 잘못된 버전을 다운로드한 것 같습니다.

PPS 이 기회에 종합 차트의 기능을 명확히 하고 싶은데, 이 기능이 어떻게든 개발될까요? 예를 들어, 공식 지수뿐만 아니라 상품 그룹의 매수/매도 포지션을 시뮬레이션하고 싶은데 포인트 가치를 고려하기 위해 번거로운 공식을 작성해야 하기 때문에 지금은 이 작업을 수행하기가 어렵습니다. 그리고 계약의 규모와 포인트의 가치는 역사적으로 변하지 않습니다...

 

Renat Fatkhullin :

표시기는 오랫동안 리소스를 사용하지 않아야 합니다. 긴 초기화를 OnCalculate의 단계별/문자별 초기화로 균등하게 늘리고 조각으로 계산하는 것이 좋습니다.

이것은 터미널의 다른 프로그램의 속도를 늦추지 않도록 이해할 수 있지만 여기에 모순이 발생합니다. 포트폴리오 모델을 계산할 때 포트폴리오의 자산이 계산되기 때문에 지표에는 모든 데이터 시리즈가 한 번에 필요합니다. 기성 데이터가 없으면 아무 것도 계산할 수 없는 것처럼 포트폴리오의 경우 모든 구성 요소가 한 번에 필요하고 여러 포트폴리오가 있고 포트폴리오 간에 비교 또는 요약이 있으면 여러 포트폴리오에 대해 한 번, 그리고 나서 특별히 늘어나지는 않습니다. 왜냐하면 이것은 부분적으로 계산할 수 있는 슬라이딩 윈도우가 아니기 때문입니다. 여기서 모델이 먼저 계산되고 히스토리에 그리기(그리고 각 눈금으로 마지막 막대 업데이트) - 그런 다음 문제가 발생합니다. 일반적으로 MT5에서 이러한 지표를 작성하는 방법은 무엇입니까? - 그래서 내가 계산을 위해 동기화된 데이터 배열을 적절하게 준비하는 범용 표준 함수에 대한 질문을 제기한 것입니다.

 
Vladimir Karputov :

짐을 실은

이제 18.10 모든 것이 작동합니다.


축하합니다. 당신은 운이 좋고 프로세서, 메모리, OS 또는 기타 구성이 잘못되어 있습니다.

그것은 아주 현실적이며 나에게서만 나타나는 것이 아닙니다.

 
transcendreamer :

이것은 터미널의 다른 프로그램의 속도를 늦추지 않도록 이해할 수 있지만 여기에 모순이 발생합니다. 포트폴리오 모델을 계산할 때 포트폴리오의 자산이 계산되기 때문에 지표에는 모든 데이터 시리즈가 한 번에 필요합니다. 기성 데이터가 없으면 아무 것도 계산할 수 없는 것처럼 포트폴리오의 경우 모든 구성 요소가 한 번에 필요하고 여러 포트폴리오가 있고 포트폴리오 간에 비교 또는 요약이 있으면 여러 포트폴리오에 대해 한 번 , 그리고 나서 특별히 늘어나지는 않습니다. 왜냐하면 이것은 부분적으로 계산할 수 있는 슬라이딩 윈도우가 아니기 때문입니다. 여기서 모델이 먼저 계산되고 히스토리에 그리기(그리고 각 눈금으로 마지막 막대 업데이트) - 그런 다음 문제가 발생합니다. 일반적으로 MT5에서 이러한 지표를 작성하는 방법은 무엇입니까? - 그래서 내가 계산을 위해 동기화된 데이터 배열을 적절하게 준비하는 범용 표준 함수에 대한 질문을 제기한 것입니다.

이것이 주요 단점입니다. 나도 같은 문제가있어.

MT4에서는 계산 및 표시가 즉시 작동하지만 MT5에서는 가격을 얻는 데 필요한 모든 차트가 지속적으로 열려 있지만 지표는 완전한 재앙입니다. 단일 버퍼 MA(

 

확실히 버그가 있습니다:

1) Hyper-V x64, IE 10, RDP, UAC, Intel Xeon E5-2687W v2 @ 3.40GHz의 Server 2012(빌드 9200), 메모리: 3033/3839Mb, 디스크: 96/107Gb, GMT-5

2) Windows Server 2012 R2(빌드 9600) x64, IE 11, RDP, UAC, QEMU 가상 버전(cpu64-rhel6), 메모리: 1340/2047 Mb, 디스크: 15/28 Gb, GMT+2


 
Stanislav Dray :

확실히 버그가 있습니다:

1) Hyper-V x64, IE 10, RDP, UAC, Intel Xeon E5-2687W v2 @ 3.40GHz의 Server 2012(빌드 9200), 메모리: 3033/3839Mb, 디스크: 96/107Gb, GMT-5

2) Windows Server 2012 R2(빌드 9600) x64, IE 11, RDP, UAC, QEMU 가상 버전(cpu64-rhel6), 메모리: 1340/2047 Mb, 디스크: 15/28 Gb, GMT+2

글쎄, 나는 이것을 가지고있다 :

Windows 7 서비스 팩 1(빌드 7601) x64, IE 11, Intel Core i5-2400 @ 3.10GHz, 메모리: 469 / 8182 Mb, 디스크: 96 / 148 Gb, GMT+2

 
transcendreamer :

이것은 터미널의 다른 프로그램의 속도를 늦추지 않도록 이해할 수 있지만 여기에 모순이 발생합니다. 포트폴리오 모델을 계산할 때 포트폴리오의 자산이 계산되기 때문에 지표에는 모든 데이터 시리즈가 한 번에 필요합니다. 기성 데이터가 없으면 아무 것도 계산할 수 없는 것처럼 포트폴리오의 경우 모든 구성 요소가 한 번에 필요하고 여러 포트폴리오가 있고 포트폴리오 간에 비교 또는 요약이 있으면 여러 포트폴리오에 대해 한 번, 그리고 나서 특별히 늘어나지는 않습니다. 왜냐하면 이것은 부분적으로 계산할 수 있는 슬라이딩 윈도우가 아니기 때문입니다. 여기서 모델이 먼저 계산되고 히스토리에 그리기(그리고 각 눈금으로 마지막 막대 업데이트) - 그런 다음 문제가 발생합니다. 일반적으로 MT5에서 이러한 지표를 작성하는 방법은 무엇입니까? - 그래서 내가 계산을 위해 동기화된 데이터 배열을 적절하게 준비하는 범용 표준 함수에 대한 질문을 제기한 것입니다.

즉시 모든 것을 얻을 수는 없다는 점을 분명히 이해하고 지표를 작성해야 합니다.

OnInit에서 CopyXXX에 대한 단일 호출로 필요한 기기의 기록 로드를 자극해야 하지만 OnCalculate에서 완전한 초기화를 기다려야 합니다.

오류가 있는 초기화 단계에서 데이터를 잘못 기다리다가 차단됩니다.

 
Renat Fatkhullin :

코드를 작동시키십시오. 지금은 괜찮습니다.

그런데 본문이 없는 파일입니다.

2시간 동안 모든 것이 정상이고 타이머가 원하는 날짜로 댓글을 똑딱거리고 있습니다.
 
Vitaly Muzichenko :

이것이 주요 단점입니다. 나도 같은 문제가있어.

MT4에서는 계산 및 표시가 즉시 작동하지만 MT5에서는 가격을 얻는 데 필요한 모든 차트가 지속적으로 열려 있지만 지표는 완전한 재앙입니다. 단일 버퍼 MA(

개인적으로 나는 편리하고 보편적 인 방법이 보이지 않습니다. 터미널과 그 안에있는 프로그램의 속도를 위해 모든 것이 그런 방식으로 배열되어 있음을 이해합니다. 개발자에게 문의하십시오. 프로그래밍 방식으로 가능하게하십시오. 단말이 특정 TF의 특정 심볼과 해당 심볼 의 틱 이력 을 독립적으로 유지하도록 단말을 요청합니다.

 
Vitaly Muzichenko :

이것이 주요 단점입니다. 나도 같은 문제가있어.

MT4에서는 계산 및 표시가 즉시 작동하지만 MT5에서는 가격을 얻는 데 필요한 모든 차트가 지속적으로 열려 있지만 지표는 완전한 재앙입니다. 단일 버퍼 MA(

우리는 코드를 살펴볼 필요가 있습니다.

여기 위의 코드에서 논리적 및 리소스 문제의 꽃다발이 분명히 있습니다.