[ARCHIVE] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 3. - 페이지 82

 
wolf05632 :

고마워, 하지만 그것은 나를 위해 작동하지 않습니다. 오프셋은 필요하지 않습니다. 위에 썼습니다. 첫 번째 양초에 대해 buffer[1]=Hight[1], 세 번째 양초에 대해 buffer[3]=Hight[3], 두 번째 양초에 대해 다음과 같이 계산해야 한다고 가정해 보겠습니다. buffer[2]=MathAbs(Higth[ 1]-Hight[3])/ 2 그림에서 내가 원하는 것을 얻습니다.
내 버전이 마음에 들지 않은 이유는 무엇입니까? :)) 훨씬 쉽고 적은 계산. 아니면 각 막대의 버퍼에 남아 있는 값이 필요합니까?
 

wolf05632 :

추신: 칠면조를 작동시키는 방법, 즉 특정 기간(h1)에만 계산(작동했지만 표시되지 않음)을 했습니까?

계산을 현재 기간이 아니라 H1에 연결해야 합니다! :)) 즉, Open[], Close[], High[], Low[], Time[] 배열이 아니라 iOpen() , iClose(), iHigh(), iLow(), iTime 함수를 사용하십시오. () 해당 매개변수로...
 
MaxZ :
내 버전이 마음에 들지 않은 이유는 무엇입니까? :)) 훨씬 쉽고 적은 계산. 아니면 각 막대의 버퍼에 남아 있는 값이 필요합니까?

감사합니다. 시도했지만 작동하지 않았습니다. 차트에 아무것도 표시되지 않았습니다. 아마도 뭔가 오해? 내가 이해한 유일한 것은 중요한 것입니다. 버퍼의 요소는 순차적으로(1,2,3 ...) 이동해야 합니다. 즉, 공백 없이(1,3,5...) 그리고 모두! 버퍼 요소 에 값을 할당 해야 합니다! :-)
 

로만님 답변 감사합니다..... 아쉽게도 1분도 이해를 못했습니다. 자습서, https://book.mql4.com/ru/basics/expressions의 " 유형 캐스팅 . 옵션 4.1. 정수 유형의 결과가 계산됩니다.

옵션 4.2. 실제 유형의 값으로 결과를 찾을 때도 비슷한 상황이 발생합니다." 동일한 공식이 제공되지만 한 경우에는 변수 F의 유형이 int로 표시됩니다.

   double A = 2.0 ;                      // Количество карандашей у Васи
   int    Y = 3 ;                        // Количество ответов Пети
   int    F = A + Y ;                    // Общее количество

두 번째 예에서 변수는 이미 두 배입니다.

   double A = 2.0 ;                   // Количество карандашей у Васи
   int    Y = 3 ;                     // Количество ответов Пети
   double F = A + Y ;                 // Общее количество

불행히도 나는 변환의 논리를 이해하지 못했습니다. 첫 번째 변형에서 int가 변수 F에 할당된 이유가 일반적으로 분명하다면(즉, 암시적 유형 변환 규칙에 따라) 이것이 두 번째 변형에서 double이 할당된 이유입니다.

여기 설명에서 내가 놓친 부분을 설명해 주시겠습니까?

미리 감사드립니다.

 
wolf05632 :

감사합니다. 시도했지만 작동하지 않았습니다. 차트에 아무것도 표시되지 않았습니다. 아마도 뭔가 오해?

전체 코드를 복사했습니까, 아니면 start() 함수에 있던 것만 복사했습니까? 그것은 중요하다!

늑대05632 :

내가 이해한 유일한 것은 중요한 것입니다. 버퍼의 요소는 순차적으로(1,2,3 ...) 이동해야 합니다. 즉, 공백 없이(1,3,5...) 그리고 모두! 버퍼 요소에 값을 할당해야 합니다! :-)
당신은 오해했다! :)) 예를 들어 지그재그에서는 버퍼의 모든 요소가 채워지지 않습니다. 또한 아이콘에 대한 버퍼의 모든 요소를 채울 필요는 없습니다.
 
Geowind64 :

로만님 답변 감사합니다..... 아쉽게도 1분도 이해를 못했습니다. 자습서, https://book.mql4.com/ru/basics/expressions의 "유형 캐스팅. 옵션 4.1. 정수 유형의 결과가 계산됩니다.

옵션 4.2. 실제 유형의 값으로 결과를 찾을 때도 비슷한 상황이 발생합니다." 동일한 공식이 제공되지만 한 경우에는 변수 F의 유형이 int로 표시됩니다.

두 번째 예에서 변수는 이미 두 배입니다.

불행히도 나는 변환의 논리를 이해하지 못했습니다. 첫 번째 변형에서 int가 변수 F에 할당된 이유가 일반적으로 분명하다면(즉, 암시적 유형 변환 규칙에 따라) 이것이 두 번째 변형에서 double이 할당된 이유입니다.

여기 설명에서 내가 놓친 부분을 설명해 주시겠습니까?

미리 감사드립니다.



N


정수형은 double형에 포함되고, double형 변수는 더 넓은 경계를 가지므로 식의 변수가 다른 유형일 수 있는 "기회가 있다"는 것은 불가능하며 결과는 더 좁은 범위를 갖는 변수입니다. 허용되는 값의 범위, 이 경우 - 유형 integer . 저것들. 표현식의 적어도 하나의 변수에 double 유형이 있는 경우 결과도 double 범위에 있어야 하고 그 범위에 있을 수 있습니다. 그렇지 않으면 컴파일 오류(유형 불일치)가 발생합니다.

자세한 내용 - 여기를 참조하십시오.

 
Roman. :


정수형은 double형에 포함되어 있고, double형은 경계가 더 넓기 때문에 표현식의 변수가 다른 유형이 될 수 있는 "기회가 있는" 것은 불가능하며, 결과는 다음을 갖는 변수입니다. 허용되는 값의 더 좁은 범위, 이 경우 정수 유형 . 저것들. 표현식의 적어도 하나의 변수에 유형이 이중이면 결과도 이중 범위에 있어야 하고 이중 범위에 있을 수 있습니다. 그렇지 않으면 컴파일 오류(유형 불일치)가 발생합니다.

자세한 내용 - 여기를 참조하십시오.


나는 종종 암시적 유형 캐스팅을 사용합니다. 참 괄호는 추가로 사용해야 합니다.
 

얘들 아, #INF는 무엇을 의미합니까? 범위를 이중으로 벗어 났습니까? 위에서 두 번째 줄을 참조하십시오 (여기서 이중 TWR의 곱이 고려됩니다. 즉, 이전 값에 다음 값을 곱한 값). 변수 TWR이 허용하는 SUCH 값을 올바르게 고려하는 방법은 무엇입니까?

 
Geowind64 :

튜토리얼의 이 섹션을 더 주의 깊게 읽으면 할당 연산자 "="의 왼쪽에 있는 표현식을 먼저 살펴봐야 한다는 것을 이해하게 될 것입니다.

   A + Y

규칙에 따르면:

  • 할당 연산 부호 오른쪽에 있는 표현식의 유형이 할당 연산 부호 왼쪽에 있는 변수 유형과 일치하지 않으면 표현식 값은 다음과 같이 변수 유형으로 변환됩니다. 할당 작업 기호의 왼쪽; 이것을 대상 유형으로 캐스팅이라고 합니다.

double 유형의 변수 A는 왼쪽에 있으며, 이는 표현식 A + Y의 값이 double 유형의 숫자가 됨을 의미합니다.

그런 다음 표현식이 할당된 변수의 유형에 주의를 기울여야 합니다.

첫 번째 경우: "먼저, 표현식 A+Y의 유형은 정수 계산 규칙에 따라 int 유형으로 변환되고 이 결과는 정수 변수 F의 값이 됩니다."

두 번째 경우: "변수 F의 대상 유형(할당 연산자의 부호 왼쪽에 있음), 이 경우 유형 double은 표현식 A+Y의 double 유형과 동일하므로 다음이 있습니다. 대상 유형 변환이 없습니다."

버스타인? :)))

 
Roman. :

얘들 아, #INF는 무엇을 의미합니까? 범위를 이중으로 벗어 났습니까? 위에서 두 번째 줄을 참조하십시오 (여기서 이중 TWR의 곱이 고려됩니다. 즉, 이전 값에 다음 값을 곱한 값). 변수 TWR이 허용하는 SUCH 값을 올바르게 고려하는 방법은 무엇입니까?

일반적으로 INFINITY (INF로 약칭 )는 무한대입니다! :)) 예, double에는 그러한 엄청난 수를 저장할 충분한 강도(메모리)가 없습니다.

그리고 정확하게 계산하는 방법만 추측할 수 있습니다... 조건부로 고유한 유형을 생성합니다. 추가 변수에 비트 깊이를 저장하고 두 배에 10^n을 곱합니다. 여기서 n은 비트 깊이입니다. 하지만 이 경우 정확도가 급격히 떨어지고 정확도가 점점 더 나빠지는 것을 볼 수 있습니다 ...

그러나 아마도 계산 논리를 변경하는 것이 더 쉬울 것입니까? :))) 아니면 어딘가에 실수가 있을 수 있습니다.