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

 
fxsaber :

참조로 전달할 수 있다는 것이 포인트입니다.

문자열 과 마찬가지로 개발자는 실제로 변수를 복사하지 않고 참조로 모든 것을 전달할 수 있는 옵션(아직 없는 경우)이 있습니다.

 void f()
{
         MqlTick tick;
         SymbolInfoTick ( NULL , tick );
        g( tick );
}
 inline void SymbolInfoTick ( string symbol, MqlTick& tick )
{
       tick = _LastTick; //л енивое программирование: а не будем ничего копировать,
                        //пока _LastTick не изменится
}


그리고 이것은 하나의 특정 MqlTick 구조가 아니라 모든 경우에 대한 솔루션이 될 것입니다.

 
A100 :

_ Digits, _P oint, _Period, _LastError 등을 직접 사용하는 것은 의미가 없음을 다시 한 번 확인합니다. 아니요(심지어 _Symbol도 NULL로 대체될 수 있음). 사실 그들은 const volatile로 선언되어야 합니다.

그리고 당신은 반대로이 시리즈를 보완 할 것을 제안합니다.

당신이 옳았지만 IsStopped 플래그를 제외하고는 거의 휘발성입니다. 100% 휘발성입니다. 모든 IsStopped 읽기는 100% 메모리 읽기입니다.
나머지의 경우 거의 휘발성은 컴파일러가 변수에 처음 액세스할 때 레지스터의 변수 값을 캐시하고 다음에 그러한 변수에 액세스할 때 캐시된 값을 사용할 수 있음을 의미합니다. 그러나 다음과 같은 경우 동일한 함수 또는 호출 분기 내에서만 그들은 동일한 기능으로 인라인됩니다.
이것은 MQL 진입점(OnXXX 함수) 내에서 미리 정의된 변수 (IsStopped 제외)의 변경이 발생할 수 없기 때문에 가능하고 필요합니다.

const VARIABLE MODIFIER와 관련하여 const 는 프로그래머가 프로그래머를 위해 사용한다고 가정해 보겠습니다.
알다시피 캐스트는 변수의 constness를 변경할 수 있으므로 컴파일러는 const 수정자로 신뢰할 수 없습니다.
컴파일러가 변수가 값을 변경하지 않고 상수로 초기화되었음을 확인하면 const 수정자가 없어도 해당 변수를 즉시 값(ImmediateValue)으로 바꿉니다.

_LastTick에 대해 논의 중이지만...
이는 단순 원자형이 아닌 구조로, 값을 받는 경우를 포함하여 MQL 프로그램의 어느 시점에서든 갑자기 변경될 수 있습니다.
이 구조를 해결하려면 동기화 장치를 도입해야 합니다.

우리는 특히 이 때문에 빌드 릴리스 빈도가 높기 때문에 성능에 대해 지속적으로 노력하고 있습니다.
MQL 코드의 작업 속도를 높이기 위해 많은 작업이 계획되어 있습니다.

Документация по MQL5: Предопределенные переменные
Документация по MQL5: Предопределенные переменные
  • www.mql5.com
Для каждой выполняющейся mql5-программы поддерживается ряд предопределенных переменных, которые отражают состояние текущего ценового графика на момент запуска программы - эксперта, скрипта или пользовательского индикатора. Значение предопределенным переменным устанавливает клиентский терминал перед запуском mql5-программы на выполнение...
 
Ilyas :

_LastTick에 대해 논의 중이지만...

이는 단순 원자형이 아닌 구조로, 값을 받는 경우를 포함하여 MQL 프로그램의 어느 시점에서든 갑자기 변경될 수 있습니다.
이 구조를 해결하려면 동기화 장치를 도입해야 합니다.

그러나 테스터에서 _LastTick은 MQL 프로그램의 어느 시점에서도 변경할 수 없습니까?

그렇다면 계산 속도가 가장 중요한 테스터에게만 그러한 솔루션을 제공하십시오.

 
Igor Makanu :

그러나 테스터에서 _LastTick은 MQL 프로그램의 어느 시점에서도 변경할 수 없습니까?

그렇다면 계산 속도가 가장 중요한 테스터에게만 그러한 솔루션을 제공하십시오.

그렇다면 OnTick 핸들러에서 이 틱을 한 번 요청한 다음 수신된 데이터로 작업하는 것을 방지하는 것은 무엇입니까? 비용은 거의 들지 않습니다. 이전에 제공된 테스트에서와 같이 100번을 요구하는 이유는 인위적으로 갑자기 브레이크를 생성하는 것입니다. 저것들. Expert Advisor의 비뚤어진 코드 문제는 MT의 내부 작업을 복잡하게 만들어 해결하자는 제안이다. 아니면 정상적인 측정이 있습니까?
 
Alexey Navoykov :
그렇다면 OnTick 핸들러에서 이 틱을 한 번 요청한 다음 수신된 데이터로 작업하는 것을 방지하는 것은 무엇입니까?

Market과 Cloud에 의해 부하되는 어드바이저 생성자의 낮은 자격이 방해합니다.

 
Alexey Navoykov :
그렇다면 OnTick 핸들러에서 이 틱을 한 번 요청한 다음 수신된 데이터로 작업하는 것을 방지하는 것은 무엇입니까? 비용은 거의 들지 않습니다. 이전에 제공된 테스트에서와 같이 100번을 요구하는 이유는 인위적으로 갑자기 브레이크를 생성하는 것입니다. 저것들. Expert Advisor의 비뚤어진 코드 문제는 MT의 내부 작업을 복잡하게 만들어 해결하자는 제안이다. 아니면 정상적인 측정이 있습니까?

"OnTick"이 처리할 이벤트는 외부에서 일부 우선 순위 대기열로 들어옵니다. 다른 핸들러에서는 그러한 새로운 이벤트가 도착하지 않았는지 확인하는 것이 불필요하지 않습니다. 그렇지 않으면 이전 틱의 데이터가 유효하지 않거나 구식입니다.

 
Alexey Navoykov :
그렇다면 OnTick 핸들러에서 이 틱을 한 번 요청한 다음 수신된 데이터로 작업하는 것을 방지하는 것은 무엇입니까? 비용은 거의 들지 않습니다. 이전에 제공된 테스트에서와 같이 100번을 요구하는 이유는 인위적으로 갑자기 브레이크를 생성하는 것입니다.

나는 테스터에서 이것을 정확히 한다

알렉세이 나보이코프 :
저것들. Expert Advisor의 비뚤어진 코드 문제는 MT의 내부 작업을 복잡하게 만들어 해결하자는 제안이다. 아니면 정상적인 측정이 있습니까?

음, 말하자면, 코드의 곡률은 확립된 코드 작성 방법에 의해 결정됩니다. 이 예제에서 KB와 SB의 사용을 살펴보십시오.

SB 안쓰고 프로파일러 로 측정하고 몇달동안 해결책을 찾다가 속도 테스트에 대한 주제가 있었는데 부분적으로 대안을 던졌습니다

측정 정상? 이것은 심각하게 다루어야 할 미끄러운 주제입니다. 제 EA는 최적화에 적합합니다. 패스가 18개월 6초, 이제 2.5초, IMHO 스스로 잘했습니다)))

 
자료에 따르면 ... 다음 고려 사항이 발생했습니다.
UninitializeReason()이 프로그램의 모든 부분, 특히 OnInit()에서 호출될 수 있다는 점을 고려하면(이러한 호출이 의도되지 않은 경우 응용 프로그램의 경계를 확장할 수 있음)
제공:

OnDeinit() 함수를 호출하기 전에 _UninitReason 변수의 값이 형성되면,
이전 EA 초기화 해제 이유를 확인할 수 없는 경우(REASON_PROGRAM, REASON_REMOVE 등)
그런 다음 이 호출 전에 정의되지 않아야 합니다(-1). 이제 0, 즉 실제로 REASON_PROGRAM

EA가 완전히 다시 시작되면( REASON_RECOMPILE , REASON_ACCOUNT , REASON_CLOSE 등),
프로그램의 새 복사본(REASON_RECOMPILE, REASON_ACCOUNT, REASON_CLOSE 등)을 시작할 때 _UninitReason 변수를 적절한 값으로 설정하는 것이 가능한 것 같습니다.

그리고 지금은 0이 아닙니다. 실제로 REASON_PROGRAM

Expert Advisor가 부분적으로 다시 시작되면(REASON_CHARTCHANGE 등), OnInit()의 _UninitReason 변수는 해당 값(REASON_CHARTCHANGE 등)과 같으며,
변경 사항이 필요하지 않습니다.
 
클래스 템플릿 메서드의 정방향 선언에 대한 MT5 버그(빌드 2450) 컴파일 오류 입니다.

 template < typename T>
class A{};


class B{
public :
   template < typename T>
   void test(A<T> &a);
};

template < typename T>
void B::test(A<T> &a){}   // 'test' - member function already defined with different parameters 


void OnStart (){ 
   B b;
} 
 

터미널이 다시 시작되면 지속적으로 논스톱으로 로그에 항목을 씁니다.

2020.05.24 03:36:03.342 HistoryBase     'GBPUSD' 1 invalid bars removed

기록에서 기록 막대의 시간이 지속적으로 증가하고 있습니다. GBPUSD 일일 차트 가 열리고 트위칭 - 0, 첫 번째 및 두 번째 막대가 삭제/생성됩니다. 등등이 원 안에 있습니다.

여기 내가 기다리고 있습니다. 이 로그로 전체 SSD를 막거나 마침내 중지됩니다 ...

어제 트레일러의 로그입니다.

파일:
20200523.zip  304 kb