MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 361

 
ijonhson :

질문은 다릅니다. 한 번의 틱으로 표시기 코드를 900번 계산하거나(예: 300개 막대의 3개 타임프레임) 또는 3번, icustom에 소란이 덜하다는 것이 분명합니다. 변종, 지시자 값 배열의 주소인 dll을 사용하여 조언자에게 보내는 것을 보았지만 키트의 지시자를 드래그하고 싶지 않습니다.


문제 공식화의 또 다른 실수. 고문에 900 막대가 필요한 이유는 무엇입니까? 올바르게 설정된 작업은 표시기에서 2-3개의 막대를 읽어야 합니다. 표시기의 데이터, 900개 조각이 정말로 필요한 경우 표시기 자체에서 작업하고 왜 어드바이저로 드래그합니까? 올바른 작업은 50%의 성공입니다.

 
Nikolay Ivanov :

문제 공식화의 또 다른 실수. 고문에 900 막대가 필요한 이유는 무엇입니까? 올바르게 설정된 작업은 표시기에서 2-3개의 막대를 읽어야 합니다. 표시기의 데이터, 900개 조각이 정말로 필요한 경우 표시기 자체에서 작업하고 왜 어드바이저로 드래그합니까? 올바른 작업은 50%의 성공입니다.


추세를 결정하기 위해 3개의 시간 프레임(예: 5분 15분 및 30분)에서 표시기의 최소 및 최대 피크를 비교해야 합니다. 피크를 추측할 수 없습니다. 즉, 전체 역사를 하나씩. 나는 300개의 역사 막대를 예로 들었다.

어쨌든 icustom을 사용하는 것은 리소스를 너무 많이 사용합니다.

 
ijonhson :

추세를 결정하기 위해 3개의 시간 프레임(예: 5분 15분 및 30분)에서 표시기의 최소 및 최대 피크를 비교해야 합니다. 피크를 추측할 수 없습니다. 즉, 전체 역사를 하나씩. 나는 300개의 역사 막대를 예로 들었다.

어쨌든 icustom을 사용하는 것은 리소스를 너무 많이 사용합니다.


첫 번째 계산에서 IndicatorCounted()가 -1을 제공하는 온틱 함수에서 질문이 열려 있습니다. Expert Advisor에서 어떻게 대체할 수 있습니까?

 
ijonhson :

"아무것도 변경할 필요가 없습니다." - 즉, Expert Advisor의 onTick 및 표시기의 onCalculate와 함께 작동합니까?

아니요, 나는 그것이 전혀 필요하지 않다는 것을 의미했습니다.

 
Alexey Viktorov :

아니요, 나는 그것이 전혀 필요하지 않다는 것을 의미했습니다.


나는 https://www.mql5.com/en/articles/1456 을 파헤 쳤습니다. 알아낼 것이지만 더 간단한 옵션이 있다고 생각했습니다.

Перенос кода индикатора в код эксперта. Строение индикатора.
Перенос кода индикатора в код эксперта. Строение индикатора.
  • 2007.02.16
  • Nikolay Kositsin
  • www.mql5.com
Прежде чем приступить к основной теме статьи, мне следовало бы вкратце коснуться общего строения индикатора под углом зрения программиста, которого этот индикатор интересует, как будущая часть кода эксперта: Вполне естественно, что у реального индикатора может быть другое количество отображаемых индикаторных значений, другое количество...
 
ijonhson :

첫 번째 계산에서 IndicatorCounted()가 -1을 제공하는 온틱 함수에서 질문이 열려 있습니다. Expert Advisor에서 어떻게 대체할 수 있습니까?

틱마다 상단을 볼 필요가 없으며 변경되지 않습니다.

어드바이저에서 바가 열릴 때 사이클을 확인하고 상단이 발견되는 즉시 사이클을 종료합니다.

   int count= Bars ( Symbol , Period );
   for ( int i= 0 ; i<count; i++) {
     // ищем и запоминаем в переменную, если нашли break;
   }
 
ijonhson : 첫 번째 계산에서 IndicatorCounted()가 -1을 제공하는 온틱 함수에서 질문이 열려 있습니다. Expert Advisor에서 이를 대체하는 방법은 무엇입니까?

IndicatorCounted() 함수는 이전에 start() 함수가 있는 표시기에서 사용되었습니다. OnCalculate() 함수 가 있는 새 표시기에서는 두 번째 매개변수 prev_calculated가 대신 사용됩니다. 나는 그것들을 특별히 연구했고 그것들이 1만큼 다르다는 것을 발견했습니다. 그 차이는 작고 이미 계산된 막대의 수를 보여줍니다. 0(또는 -1)이면 모든 막대를 계산해야 합니다. 이것은 표시기가 시작될 때 발생하며 전체 라인을 그리고 버퍼 배열에 결과를 저장해야 합니다. 다음 틱에서는 마지막 막대의 데이터만 다시 계산해야 합니다. 따라서 0(또는 -1) 값으로 수행된 작업은 Expert Advisor의 OnInit()에 배치되어야 합니다. 나머지 - 아주 약간 - OnTick()

 
YarTrade :

고맙습니다. 나는 일할 것이다. 어째서인지 교과서에서 long형에 대한 내용을 읽지 않았습니다.

커서를 long int 또는 short(또는 언어의 다른 단어)에 놓고 F1을 눌러야 합니다.

 
ijonhson :

정말 감사합니다만, 함수 설명에서 알 수 있는 한 전체 표시기 코드를 실행하여 하나의 값을 얻습니다. 지정한 위치, 즉 모든 정점을 얻으려면 다음을 계산해야 합니다. 표시기 코드는 n번째 횟수(모든 막대를 하나씩 통과하기 위해)이고 여러 시간 프레임에서 이 표시기의 상단 순서를 비교해야 합니다.

게다가 정점을 수동으로 검색합니다.

절대 사실이 아닙니다! iCustom()을 사용하여 EA에서 호출할 때 표시기의 모든 막대는 한 번만 다시 계산됩니다! 표시기의 모든 후속 호출은 이미 계산된 결과와 함께 작동하며 이전 호출 이전의 계산되지 않은 막대만 다시 계산됩니다. 예를 들어, 기간 M15의 지표는 각각의 새로운 막대의 H1 차트에서 호출되며, 호출 간 지표는 4개의 15분 막대에 대해 다시 계산되지 않는 것으로 나타났습니다. 따라서 이 4개의 막대만 다시 계산됩니다.

0에서 xxx까지 일련의 막대를 순환하더라도 표시기는 첫 번째 호출에서 한 번만 다시 계산됩니다. 이후의 모든 호출은 재계산을 수행하지 않습니다.

 
ijonhson :

나는 https://www.mql5.com/en/articles/1456 을 파헤 쳤습니다. 알아낼 것이지만 더 간단한 옵션이 있다고 생각했습니다.

이것은 나쁜 예입니다. 벌써 10살이라니!!! 언어는 이미 더 나은 방향으로 변경되었습니다.