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

 

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

Android용 MetaTrader 4 및 MetaTrader 5 모바일 애플리케이션이 업데이트되었습니다.

pav36krs , 2014.12.20 10:21

친구들 도와줘!!! 메타 트레이더를 다운로드했지만 32비트가 시작되지 않고 Windows 64비트가 처음으로 발생했습니다. 알파 외환에서 메타 트레이더를 설치하기 전에 이 문제가 처음 발생했습니다. 모든 것이 잘 작동했습니다. 문제를 해결하는 방법을 아는 사람이 있을 수 있습니다. 다른 방법을 시도했지만 관리자를 대신하여 실행할 수 없습니다. 도와 주시면 감사하겠습니다.

 

비트 연산의 오류.

 Print ( int ( 1 )<< 34 );

우리는 4를 얻었지만 그것은 0이어야 합니다. 몇 년 동안 그들이 MT를 갈았고 여전히 그런 실수를 했습니다.

 

그리고 컴파일러는 그러한 오프셋 때문에 저주하지 않았습니까? 나는 의심한다.

그들이 원하는 것이 무엇이든, 그들은 그것을 얻었다

 00000000000000000000000000000001 << 34
00000000000000000000000000000100
 
GVladimir :

그리고 컴파일러는 그러한 오프셋 때문에 저주하지 않았습니까? 나는 의심한다.

그들이 원하는 것이 무엇이든, 그들은 그것을 얻었다

비트 시프트가 어떻게 작동하는지 아마 모를 것입니다. 낮은 계급에서는 아무 것도 일어날 수 없습니다. 확신이 서지 않는다면 C++가 도움이 될 것입니다.
 
meat :
낮은 계급에서는 아무 것도 일어날 수 없습니다.
MQL에서는 모든 비트 시프트가 순환(ROL/ROR)으로 구현되는 것 같습니다. (C와 C++ 모두 이러한 상황에 대해 알지 못하기 때문에 아마 모를 것입니다)
 
GVladimir :
MQL에서는 모든 비트 시프트가 순환(ROL/ROR)으로 구현되는 것 같습니다. (C와 C++ 모두 이러한 상황에 대해 모르기 때문에 아마 모를 것입니다)

MQL 문서에는 순환 시프트에 대한 설명이 없으므로 일반 시프트가 가정됩니다. 사실 저는 이 문장을 찾았습니다.

이러한 연산의 결과가 정의되어 있지 않기 때문에 시프트되는 변수의 비트 너비보다 크거나 같은 비트 수만큼 시프트를 수행하지 않는 것이 좋습니다.

이것은 사실이 아닙니다. 비트 연산은 정의되지 않은 결과를 가질 수 없습니다. 나가는 비트가 특수 플래그에 저장되거나 저장되지 않을 뿐이지만 이는 시프트 연산 알고리즘에 영향을 미치지 않습니다. 오른쪽의 비트는 어쨌든 0으로 채워집니다. 순환 시프트인 경우 명시적으로 지정해야 합니다(C ++과 호환되는 일반 시프트가 더 정확하지만).

 

이전 빌드로 컴파일된 지표를 리소스로 다른 지표에 연결할 수 있습니까?

무언가가 작동하지 않으면 다음을 수행합니다.

........ 

#resource "\\Indicators\\тфьу.ex4"

........ 

int OnCalculate(const int rates_total,

                const int prev_calculated,

                const datetime &time[],

                const double &open[],

                const double &high[],

                const double &low[],

                const double &close[],

                const long &tick_volume[],

                const long &volume[],

                const int &spread[])

  {

........ 

ExtLimeBuffer[i]=iCustom(_Symbol,0,"::Indicators\\тьфу.ex4",pr1,pr2,pr3,pr4,pr5,pr6,pr7,2,i);

........ 

  return(rates_total);

}


 

컴파일러는 다음과 같이 씁니다.

unknown resource type 'C:\Program Files\MT4\MQL4\Indicators\тфьу.ex4' тфьу1.mq4 10 1

 

 


 
meat :

MQL 문서에는 순환 시프트에 대한 설명이 없으므로 일반 시프트가 가정됩니다. 실제로 다음 문장을 찾았습니다.

이것은 사실이 아닙니다. 비트 연산은 정의되지 않은 결과를 가질 수 없습니다. 나가는 비트가 특수 플래그에 저장되거나 저장되지 않을 뿐이지만 이는 시프트 연산 알고리즘에 영향을 미치지 않습니다. 오른쪽의 비트는 어쨌든 0으로 채워집니다. 순환 시프트인 경우 명시적으로 지정해야 합니다(C ++과 호환되는 일반 시프트가 더 정확하지만).

아마도.

시프트 연산은 32비트 정수의 경우 5비트 이하(64비트 정수의 경우 6비트)를 포함해야 합니다. 시프트 값이 5(또는 6) 비트 이상을 사용하는 경우 다른 프로세서는 이 상황을 다르게 처리합니다. 설명서에서 이 사실을 표시 하여 작업 결과 가 정의되지 않았다고 했습니다.

Документация по MQL5: Торговые функции / OrderCalcProfit
Документация по MQL5: Торговые функции / OrderCalcProfit
  • www.mql5.com
Торговые функции / OrderCalcProfit - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
sanyooooook :

...
컴파일러는 다음과 같이 씁니다.

unknown resource type 'C:\Program Files\MT4\MQL4\Indicators\тфьу.ex4' тфьу1.mq4 10 1

분명히 컴파일러는 보이는 것보다 똑똑합니다. 그는 소스 tfy1.mq4를 찾은 다음 리소스로 첨부하려고 합니다.