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

 
예를 들어 개발자가 아키텍처 및 속도 최적화의 에이스라는 점은 의심할 여지가 없는 전문가이므로 이러한 기능을 가장 정확한 방법으로 작성 하고 표준 라이브러리 에 포함시키는 것은 어렵지 않을 것입니다. 그들에게.
 
Renat Fatkhullin :

지표가 틱의 수신/중첩 속도를 뻔뻔하게 늦추고 틱당 수백 밀리초 또는 심지어 몇 초를 소비할 때 데이터를 사용할 수 있는 위치(특히 보장됨)에 대해 생각해 보십시오. 결과적으로 CPU가 시간에 따라 틱을 처리하기에 충분하지 않아 적자가 누적되고 이에 따라 차트 기록이 느려집니다.

'보증금'을 물으신다면 '아무것도 알고 싶지 않고, 계속 쓰고 싶은 대로, 성능과 잠금은 생각하지 않고, 그냥 줘'라고 하는 요청일 가능성이 큽니다.


수백만 개의 막대를 사용할 수 있을 때 자신과 다른 사람의 지표의 성과에 대해 생각해 보십시오. 잘못 쓰여지고 값비싼 지표는 해당 기호 차트의 업데이트 속도를 쉽게 늦출 수 있습니다.

시작하려면 OnCalculate가 실행되는 시간을 마이크로초 단위로 측정하십시오. 그런 다음 1초를 평균 틱 시간으로 나누어 표시기의 최대 처리량(초당 틱 수)을 구합니다.

이것은 즉시 정신을 차리게 합니다.

제안된 버전의 표시기에 의한 새로운 유형의 데이터 처리에 대해 0 막대와 0 막대의 성배의 다중 재계산을 좋아하는 사람은 누구든지 기존 버전에 앉히도록 하려면 하나의 틱(새 막대)만 남겨두자. 새로운 기능 iOnCalculate를 OnInit에 추가합니다. iCustom과 같은 표시기의 TF 기능/Symbol OnCalculate에 대한 핸들입니다. 조금 더 가까워지면 OnCalculate의 표시기 버퍼 가 iOnCalculate 핸들에 연결됩니다. OnCalculate 유형 표시기 기능에서 새 막대 눈금만 보냅니다. 터미널에 대한 변경 사항은 없으며 OnCalculate 작업의 모든 주요 논리는 동일하며 표시기의 본체(예: OnMain)가 추가됩니다.(이제 모든 것은 기본 표시기에 연결된 표시기에 의해 수행됩니다. 새 막대에서 호출).

 
transcendreamer :


슈퍼 속도가 항상 필요한 것은 아니며 작업의 편의성도 매우 중요합니다. 이제 다중 통화 표시기 를 작성하는 것은 "수동 일몰"입니다. MT4에서도 i-function을 통해 항상 느리지 만 통과 할 수 있기 때문에 더 쉬웠습니다. 그러나 얻을 수 있지만 MT5 데이터에는 존재하지 않으며 여전히 특수 코드를 직접 차단해야 합니다.

이론을 가지지 맙시다.

재현할 예를 제공하면 귀하의 케이스 주변에 어떤 공포가 있는지 알 수 있습니다. 지금까지 모든 것이 성능을 완전히 무시하고 킬러 브레이크 표시기를 숨기고 그림자를 드리우려는 것처럼 보입니다.

 
Renat Fatkhullin :

이론을 가지지 맙시다.

재현할 예를 제공하면 귀하의 케이스 주변에 어떤 공포가 있는지 알 수 있습니다. 지금까지 모든 것이 성능을 완전히 무시하고 킬러 브레이크 표시기를 숨기고 그림자를 드리우려는 것처럼 보입니다.


첨부파일에 예시가 있는데 아직 완성된 코드가 아니고 어떤 곳은 미완성이지만 실행하시면 됩니다 편의를 위해 템플릿도 첨부해드리니,

꾸지람을 예상하면서, 나는 프로그래머가 아니며 아마도 최적의 코드가 아닐 것이라고 즉시 말할 것입니다. 저는 일반적으로 인도주의적 경제학자입니다. 저는 MT5에서 많이 고통받고 MT4에서 덜 고통받았습니다.

위에서 설명한 대로 동기화된 배열을 구축하는 간단하고 안정적인 기능이 정말 필요합니다. https://www.mql5.com/en/forum/289897/page2#comment_9363454

이것은 필요한 데이터를 명확하게 제공할 것이고, 나는 불평하지 않고 당신이 나를 위해 내 지표를 쓰도록 요구하지 않습니다. 나는 단지 (나 뿐만 아니라) 편리한 표준 기능을 원할 뿐입니다.


편집: 고정 첨부 파일

Баг MQL5 при работе c доступом к таймсериям iClose/iOpen и т.д.
Баг MQL5 при работе c доступом к таймсериям iClose/iOpen и т.д.
  • 2018.11.14
  • www.mql5.com
Общее обсуждение: Баг MQL5 при работе c доступом к таймсериям iClose/iOpen и т.д.
파일:
 
Renat Fatkhullin :

제가 제안한 대로 해주세요.

그렇지 않으면 100% 재생산을 위해 완전한 재료가 필요합니다.

버그 보고서와 이상한 관계가 있습니다. 그들은 뭔가를 증명하기 위해 나에게 돈을 지불하지 않는 것과 같습니다. 나는 가능한 한 상황을 설명했다.

문제는 나에게만 있는 것이 아니라 30번째 업데이트 이후에 문제가 나타났지만 여전히 당신은 내가 바보이고 일부 느린 지표가 탓임을 암시하고 있습니다.

그리고 그 전에는 일년 내내 브레이크를 밟지 않았습니까?

다음은 M30에서 실행된 지 25분 후에 충돌한 코드의 예입니다.

 //+------------------------------------------------------------------+
//|                                                      Feezzzz.mq5 |
//|                                   Copyright 2018, Dray Stanislav |
//|                               https://www.mql5.com/ru/users/fan9 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, Dray Stanislav"
#property link        "https://www.mql5.com/ru/users/fan9"
#property version    "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
     datetime CM1_T[ 1 ];
     if ( CopyTime ( _Symbol , PERIOD_M1 , 0 , 1 ,CM1_T)==- 1 ){
       Comment ( "\n\n CopyTime return -1" );
       return ;
    }
     Comment ( "\n\n CopyTime : " + TimeToString (CM1_T[ 0 ], TIME_DATE | TIME_SECONDS ));   
  }
//+------------------------------------------------------------------+
//| Trade function                                                   |
//+------------------------------------------------------------------+
void OnTrade ()
  {
//---
   
  }
//+------------------------------------------------------------------+

결과는 다음과 같습니다.

하나

 
transcendreamer :


첨부파일에 예시가 있는데 아직 완성된 코드가 아니고 어떤 곳은 미완성이지만 실행하시면 됩니다 편의를 위해 템플릿도 첨부해드리니,

꾸지람을 예상하면서, 나는 프로그래머가 아니며 아마도 최적의 코드가 아닐 것이라고 즉시 말할 것입니다. 저는 일반적으로 인도주의적 경제학자입니다. 저는 MT5에서 많이 고통받고 MT4에서 덜 고통받았습니다.

위에서 설명한 대로 동기화된 배열을 구축하는 간단하고 안정적인 기능이 정말 필요합니다. https://www.mql5.com/en/forum/289897/page2#comment_9363454

필요한 데이터를 명확하게 생성하고,

나는 불평하지 않고 당신이 나를 위해 내 지표를 쓰도록 요청하지 않습니다. 나는 단지 (나뿐만 아니라) 편리한 표준 기능을 원합니다.


편집: 고정 첨부 파일

감사합니다. 지금 확인하겠습니다.
 
Stanislav Dray :

버그 보고서와 이상한 관계가 있습니다. 그들은 뭔가를 증명하기 위해 나에게 돈을 지불하지 않는 것과 같습니다. 나는 가능한 한 상황을 설명했다.

이 항목의 앞부분에서 작성된 버그 보고서는 절대 아닙니다.

기술적인 세부 사항 없이 모든 것이 불만 사항 계획에 따라 진행되었습니다. 그리고 내가 문의한 후에야 세부 사항이 나타나기 시작했습니다.

 
Stanislav Dray :

버그 보고서와 이상한 관계가 있습니다. 그들은 뭔가를 증명하기 위해 나에게 돈을 지불하지 않는 것과 같습니다. 나는 가능한 한 상황을 설명했다.

문제는 나에게만 있는 것이 아니라 30번째 업데이트 이후에 문제가 나타났지만 여전히 당신은 내가 바보이고 일부 느린 지표가 탓임을 암시하고 있습니다.

그리고 그 전에는 일년 내내 브레이크를 밟지 않았습니까?

다음은 M30에서 실행된 후 25분 후에 정지되는 코드의 예입니다.

결과는 다음과 같습니다.


짐을 실은

 2018.11 . 14 17 : 33 : 32.570 Experts expert Feezzzz (USDCHF,M30) loaded successfully

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


 
transcendreamer :


첨부파일에 예시가 있는데 아직 완성된 코드가 아니고 어떤 곳은 미완성이지만 실행하시면 됩니다 편의를 위해 템플릿도 첨부해드리니,

코드와 작업에서 바로:

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

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

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

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

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

  6. 코드를 읽기 어렵다


 
Stanislav Dray :

버그 보고서와 이상한 관계가 있습니다. 그들은 뭔가를 증명하기 위해 나에게 돈을 지불하지 않는 것과 같습니다. 나는 가능한 한 상황을 설명했다.

문제는 나에게만 있는 것이 아니라 30번째 업데이트 이후에 문제가 나타났지만 여전히 당신은 내가 바보이고 일부 느린 지표가 탓임을 암시하고 있습니다.

그리고 그 전에는 일년 내내 브레이크를 밟지 않았습니까?

다음은 M30에서 실행된 지 25분 후에 충돌한 코드의 예입니다.

결과는 다음과 같습니다.

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

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