FAQ 작성에 대한 Subbotnik(자주 묻는 질문). 동료들을 도우자! - 페이지 5

 

나는 약속했다, 나는 가장 간단한 것부터 시작할 것이다)

질문: MQL이 산술 연산을 잘못 수행합니까? 한 숫자를 다른 숫자로 나누면 0이 되는 이유는 무엇입니까?

답변:

아마도 다음과 같은 표현을 썼을 것입니다.

c = a/b;  // (1)

변수와 b를 정수로 선언하는 동안:

 int a,b;

이 경우 MQL 컴파일러는 "슬래시" 아이콘을 "정수 나누기" 연산으로 해석합니다. 따라서 표현식 (1)이 코드에 나타나기 전에 변수 ab 에 정수가 아닌 값을 할당하더라도 "숫자 b 는 숫자 너무 많은 정수 배 맞습니다"라는 대답은 여전히 정당됩니다. 변수 c 에 기록됩니다. 그리고 이것은 차례로 식 (1)의 계산 전에 ab 보다 작았다면 그 결과는 변수 c 의 유형에 관계없이 0과 같을 것임을 의미합니다(위의 예에서는 두 배가 될 수 있음) .

설명 된 오류는 종종 터미널에서 프로그램의 "잘못된"동작의 원인입니다-전문가 로그의 " 0으로 나누기 "메시지 "어디에도 없음", 터미널 창에 하나 또는 여러 표시 줄이 표시되지 않음 , 등.

해결책:

변수 선언의 데이터 유형을 사용하기 위해 계획된 작업에 해당하는 유형으로 수정합니다.

 double a,b;
 
질문: 3을 2로 나눈 값이 1.5가 아니라 1인 이유는 무엇입니까?

 Alert ( 3 / 2 );

답변: 이 표현식의 숫자 3과 2는 정수입니다. 정수는 나머지 없이 나눌 수 없습니다. 결과 1.5를 얻으려면 피제수가 부동 소수점 숫자임을 지정해야 합니다.

 Alert ( 3.0 / 2 );

* * *

질문: 표현식이 잘못 평가되는 이유는 무엇입니까?

  double price= 1.0 ; // Цена
  double point= 0.0001 ; // Величина пункта
  double level= 272.0 ; // Уровень в пунктах от цены
  double levelprice; // Значение цены уровня
   
  levelprice=price+point*level; // должно быть 1.0272
   
  if (levelprice== 1.0272 ){
  Alert ( "Правильно" );
  }
  else {
  Alert ( "Неправильно" );
  }

답변: 부동 소수점 변수는 소수 자릿수가 제한되어 있습니다. 이 때문에 계산 시 값이 약간 왜곡될 수 있습니다. 표현식을 평가한 후 부동 소수점 숫자를 비교하기 전에 필요한 정밀도 수준으로 정규화해야 합니다.

  levelprice= NormalizeDouble (levelprice, 4 );

  if (levelprice== 1.0272 ){
  Alert ( "Правильно" );
  }
  else {
  Alert ( "Неправильно" );
  }

* * *

질문: Expert Advisor에서 사용자 지정 지표의 값을 얻으려면 어떻게 해야 합니까?

답변: 이를 위한 iCustom() 함수가 있습니다.

* * *

질문: MQL4 학습을 시작하는 방법은 무엇입니까?

답변: 매우 상세한 도움말 가이드가 MetaEditor에 내장되어 있습니다(MetaEditor 열기 - 메인 메뉴 - 보기 - 내비게이터 - 사전).
터미널 패키지에는 두 개의 Expert Advisors MACD 샘플 및 이동 평균이 포함되어 있으며 코드를 분석하여 실제 작업을 시작할 수 있습니다.
또한 mql4.com에 대한 자습서 , 많은 기사 및 모든 종류의 코드 가 있습니다.
 
질문: 확실히 0이 아닌데 값이 0인 이유는 무엇입니까?

  double point= 0.00001 ; // Величина пункта
  Print (point);

답변: Print() 및 Alert() 함수는 소수점 이하 소수점 이하 네 자리만 인쇄 합니다. 더 필요한 경우 DoubleToStr() 함수를 사용하여 이중 숫자를 문자열로 변환해야 합니다.
 Print (DoubleToStr(point, 5 ));
 

질문: Expert Advisor는 Print() 함수 를 사용하여 많은 수의 메시지를 표시하지만 테스터에서는 메시지의 절반 이상이 어딘가에서 사라집니다.

답변: 테스트할 때 로그에 출력 빈도가 높으면 "저널" 탭에 일부 메시지가 표시되지 않지만 테스트 후 테스터의 로그 파일에서 모든 메시지를 볼 수 있습니다. 파일은 tester/logs 폴더에 있습니다.

 
모두 감사합니다. 계속 써주세요.
내가 도착하는 저녁에만 자주 묻는 질문에 수집할 것입니다.
 

중재자 및 최소한의 지원을 제공하려는 사람들에게 제안하십시오.

포럼의 기능이 정보의 구조화된 표시, 처리 및 검색에 충분하지 않다는 데 동의합니다. 유일한 방법은 가장 완전한 CHM 매뉴얼 작성이며, 이를 기반으로 포럼에서 전체 섹션 작성할 수 있습니다.

먼저 도움말 구조를 만들었습니다.
3개의 주요 섹션으로 나뉩니다.

1) 방법. 이 섹션에서는 가능한 질문에 대한 능동적인 답변을 설명합니다. 예를 들어 지표 데이터를 얻는 방법, 모든 주문을 마감하는 방법 등 또한 이 섹션에는 기능의 체계화된 대규모 데이터베이스가 있습니다(Kim의 기능과 유사함). 그리고 가장 중요한 것은 코드 및 주석에 대한 자세한 설명과 함께 기성품 기본 TK의 예입니다. 지식과 분석의 체계화를 높여야 하기 때문에 매우 어려운 부분이다. 마지막으로 채워집니다.

2) 왜. 이 섹션은 초보자가 자주 묻는 질문에 대해 설명합니다(이 스레드의 예는 alsuinteger 에 의해 아름답게 시연되었습니다).

3) 어디. 이 섹션에서는 주로 어디를 보거나 거짓말을 해야 하는지에 대한 링크가 있습니다. 나는 일반적으로 설명하지 않을 것입니다. 직접 확인하십시오.
완성된 chm-구조의 아카이브를 첨부합니다(포스트 하단에서 다운로드)


1. 매뉴얼의 구성


2. 기능 데모 - " Where: Useful Links -> MQL4 Tutorial " 링크를 따라가십시오.

파일:
mql4_4.zip  53 kb
 


다음 단계는 다음과 같습니다.

1. 하위 섹션을 채울 프리랜서가 필요합니다 . 즉, 실제로 사려 깊은 질문과 자세한 설명, 일련의 상호 참조 등을 포함한 자세한 답변이 필요합니다. (FAQ 주제의 첫 번째 페이지에 제공된 게시물 템플릿에 따라).

2. 하위 섹션에 대해 생성된 모든 질문은 이 하위 섹션의 큐레이터(1-2명)가 수집합니다 . 그것들을 처리하고 공통 스타일로 가져오고 필요에 따라 상호 참조를 형성합니다. 이렇게 하면 각 하위 섹션에 고유한 소유자가 있고 데이터베이스에 혼란이 없고 하나의 스타일 및 응답 템플릿이 있습니다.
예를 들어 "위치" 섹션은 테스터, 터미널, 포럼, 유용한 링크에 대한 질문과 같은 4개의 하위 섹션으로 나뉩니다. 각 하위 섹션에 대해 1명이 충분합니다. 그들은 필요하다고 생각하는 프리랜서로부터 들어오는 지식 기반과 이웃 섹션의 다른 참가자로부터 올 수 있는 제안을 분류하는 데 완전히 참여할 것입니다. 그리고 물론 그들 자신이 데이터베이스를 채우고 질문을 만드는 데 적극적으로 참여해야 합니다.

3. 하위 섹션이 채워지면 수집가에게 전송됩니다 (예: 나에게). 하나의 chm 파일에 수집하고 모든 것을 동일한 스타일로 유지해야 합니다. 추가 상호 참조를 만들고, 색인을 생성하고, 검색 쿼리에 대한 키워드를 추가합니다.

하위 섹션은
큐레이터 의 제안과 수집가 와 새로운 구조의 동의에 따라 재정렬되거나 확장될 수 있습니다.

결과:
참가자: 우리 오두막에 오신 것을 환영합니다. :) 하위 섹션의 큐레이터가 되고 싶은 사람들과 이미 만들 것이 있는 사람들 - 여기에서 게시물 답변을 버리십시오.
사회자: 많은 자료가 있을 것입니다. 이 스레드에서 토론 및 추상적이고 빈 게시물을 허용하지 마십시오. 게시물을 공통 데이터베이스로 전송한 후에도 섹션 작업을 용이하게 하기 위해 참가자의 게시물을 삭제해야 합니다.
큐레이터: 도움말 파일은 WinCHM 4.17에서 생성됩니다( 개인 문서를 작성 해야 하는 사람). 파일 이름 및 위치 요구 사항 :
- 폴더 구조는 도움말 구조를 정확히 반복해야 합니다.
- 모든 파일/폴더 이름은 의미 있는 문구에서 영어로만 제공되어야 합니다.
- WinCHM이 아카이브에서 "컴파일"하는 현재 데이터베이스의 예

파일:
chm4_2.zip  19 kb
 

sergeev :

...


1) 어떻게. 이 섹션에서는 가능한 질문에 대한 사전 답변을 설명합니다. 예를 들어 지표 데이터를 얻는 방법, 모든 주문을 마감하는 방법 등 또한 이 섹션에는 체계화된 대규모 기능 데이터베이스(Kim 등)가 있습니다. 그리고 가장 중요한 것은 코드 및 주석에 대한 자세한 설명과 함께 기성품 기본 TK의 예입니다. 지식과 분석의 체계화를 높여야 하기 때문에 매우 어려운 부분이다. 마지막으로 채워집니다.

...

Alexey, 주문 작업을 위한 Kim의 모든 기능은 작업의 신뢰성과 정확성 측면에서 매우 의심스럽습니다. 당신은 또한 그들에게 조언자를 리벳으로 고정합니까?

 
Integer :

Alexey, 주문 작업을 위한 Kim의 모든 기능은 작업의 신뢰성과 정확성 측면에서 매우 의심스럽습니다. 당신은 또한 그들에게 조언자를 리벳으로 고정합니까?

아니다. 실생활에서 증명된 나는 스스로 리벳을 박는다. :)

솔직히 말해서 이 포럼의 권장 사항을 제외하고는 Kimovskie를 실제로 본 적이 없습니다. 섹션에 대한 설명에서는 내가 말하는 내용을 이해할 수 있도록 예시로만 들었습니다. 그리고 나는 Kimov 것들이 그들의 코드에 있는 매뉴얼에 포함될 것인지 확신하지 못합니다. 아이디어 만 취하여 일반적인 스타일로 해결합니다.

HOW 섹션이 가장 심각합니다. HOW의 모든 섹션은 마지막 섹션인 "TK 및 구현의 예"에 대한 요약이므로 최대 2-3명이 수행해야 합니다. 이 섹션에서는 가능한 모든 옵션을 표시하고 모든 이전 기능의 조합을 사용합니다. 섹션의.

 

질문: " double " 유형의 두 실수를 비교하는 방법은 무엇입니까?


답변:

 double A;
double B;

if ( NormalizeDouble ( MathAbs (A-B), Digits )< 0.1 * Point ) return (true);
else return (false);