MQL5에서 함께 배우고 쓰기 - 페이지 8

 

저는 간단한 가격 구조를 MKL4에서 MKL5로 전송하는 알고리즘을 작성 중이며 MKL4 코드를 MKL5 확률적 masd 및 rsai로 복사하는 예제에 대해 MKL4 데이터에 액세스하는 주요 방법이 사용됩니다.

곧, 무슨 일이 일어나야

이제 저는 iMaOnArrau 함수로 어려움을 겪고 있습니다. MT5에서는 사용자 지정 배열에서 평균 을 이동하는 가장 간단한 방법 을 수신하도록 제공되지 않기 때문입니다.

라이브러리를 모든 기술 도구로 확장할 것입니다. 거의 모든 알고리즘을 알고 있습니다.

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Методы скользящих
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Методы скользящих
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Методы скользящих - Документация по MQL5
 

뭔가 내가 바보 ... 나는 글을 쓰는 방법을 이해할 수 없습니다 ...

다음 코드가 있습니다.

   MqlRates rates[];
   
   ArraySetAsSeries (rates,true);
   int copied= CopyRates ( _Symbol , _Period , 0 , 1000 ,rates);
   

다음으로, i번째부터 j번째까지의 막대 중 최저가 낮은 막대의 인덱스를 구해야 합니다.

ArrayMinimum 함수 를 사용하려고 합니다.

int k=ArrayMinimum(rates.low,i,j-i+1); - 옳지 않다

int k=ArrayMinimum(rates[].low,i,j-i+1); - 옳지 않다

어떻게 정확할까요?

Документация по MQL5: Операции с массивами / ArrayMinimum
Документация по MQL5: Операции с массивами / ArrayMinimum
  • www.mql5.com
Операции с массивами / ArrayMinimum - Документация по MQL5
 
owl :

뭔가 내가 바보 ... 나는 글을 쓰는 방법을 이해할 수 없습니다 ...

다음 코드가 있습니다.

다음으로, i번째부터 j번째까지의 막대 중 최저가 낮은 막대의 인덱스를 구해야 합니다.

ArrayMinimum 함수를 사용하려고 합니다.

int k=ArrayMinimum(rates.low,i,j-i+1); - 옳지 않다

int k=ArrayMinimum(rates[].low,i,j-i+1); - 옳지 않다

어떻게 정확할까요?

직접 액세스 기능을 사용하십시오. MqlRates 는 "구조체"의 배열이며 여기에 Low의 배열이 필요합니다. 예를 들어 High에 대한 즉시입니다.

   rates_total= CopyHigh ( NULL , _Period ,_start,_end,iHigh);
   if (rates_total<= 0 )
       return ;
   else
      HighDay=iHigh[ ArrayMaximum (iHigh, 0 ,rates_total)];
   rates_total= CopyLow ( NULL , _Period ,_start,_end,iLow);
   if (rates_total<= 0 )
       return ;
   else
      LowDay=iLow[ ArrayMinimum (iLow, 0 ,rates_total)];

코드 예제를 참조하십시오. https://www.mql5.com/ru/code/102 에서 가져왔습니다.

PivotPointUniversal
PivotPointUniversal
  • 투표: 17
  • 2010.04.26
  • Dmitry
  • www.mql5.com
Опорные точки Pivot без использования объектов строятся по всей доступной истории. Пять вариантов расчета. Три варианта построения: дневной, недельный, месячный. Для дневных уровней есть возможность смещения по GMT.
 
vdv2001 :

직접 액세스 기능을 사용하십시오. MqlRates 는 "구조체"의 배열이며 여기에 Low의 배열이 필요합니다. 예를 들어 High에 대한 즉시입니다.

이것은 분명합니다. 제 경우에는 다음과 같이 썼습니다.

         int k=i; double min= rates[k].low;
         for ( int m=i+ 1 ;m<=j;m++)
             if (rates[m].low<min) {min=rates[m].low; k=m;}

글쎄, 나는 많은 어레이를 원하지 않는다 ... 자원 면에서 경제적이지 않고 아름답지 않다 ...

ArrayMinimum 을 처리하고 싶었습니다. 이 함수를 구조 배열과 함께 사용할 수 있습니까?...

 
owl :

이것은 분명합니다. 제 경우에는 다음과 같이 썼습니다.

글쎄, 나는 많은 어레이를 원하지 않는다 ... 자원 면에서 경제적이지 않고 아름답지 않다 ...

저는 ArrayMinimum을 처리하고 싶었습니다. 이 함수를 구조 배열과 함께 사용할 수 있습니까?...

구조의 배열에 많은 정보를 저장하는 것이 이중 배열보다 경제적이라고 생각하면 팔을 벌립니다.

 struct MqlRates
  {
   datetime time;         // время начала периода
   double    open;         // цена открытия
   double    high;         // наивысшая цена за период
   double    low;           // наименьшая цена за период
   double    close;         // цена закрытия
   long      tick_volume;   // тиковый объем
   int       spread;       // спред
   long      real_volume;   // биржевой объем 
  };

아니면 int, long 및 날짜를 저장하는 것이 메모리 측면에서 더 경제적이라고 생각하십니까? ;))

또는 쓰레기 더미에서 더 경제적으로 필요한 것을 선택하십시오. 하하 ...

 
vdv2001 :

구조의 배열에 많은 정보를 저장하는 것이 이중 배열보다 경제적이라고 생각하면 팔을 벌립니다.

아니면 int, long 및 날짜를 저장하는 것이 메모리 측면에서 더 경제적이라고 생각하십니까? ;))

또는 쓰레기 더미에서 더 경제적으로 필요한 것을 선택하십시오. 하하 ...

글쎄요... 효율성을 희생시키면서, 물론 약간 흥분했습니다... 하지만, 사실, 저는 MqlRates 의 거의 모든 정보가 필요합니다(가능한 볼륨을 제외하고, 그것은 사실이 아닙니다.. .)
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных - Документация по MQL5
 

보통은 무엇이든 묻기 전에 답을 찾기 위해 다양한 출처를 살펴봅니다.

그러나 이제 일주일 동안의 시련 끝에 나는 이미 이해했습니다. 답이 없고 제 생각에는 아직 아무도 이것을 접하지 못했습니다. 그래서 퍼즐을 제안합니다.

초기 데이터:

1) Levels and Arrows iS7N_SacuL_v3.mq5(첨부)와 같은 간단한 표시기가 있습니다.

2) 이 지표에서 데이터 수신을 시도하는 Expert Advisor aS7N_TIC.mq5(첨부)

여기 있습니다!

5개의 표시기 버퍼 중 2개만 데이터를 올바르게 반환합니다.

이어지는 자세한 설명!

Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
  • 2010.10.25
  • Nikolay Kositsin
  • www.mql5.com
Статья о традиционных и не совсем традиционных алгоритмах усреднения, упакованных в максимально простые и достаточно однотипные классы. Они задумывались для универсального использования в практических разработках индикаторов. Надеюсь, что предложенные классы в определенных ситуациях могут оказаться достаточно актуальной альтернативой громоздким, в некотором смысле, вызовам пользовательских и технических индикаторов.
파일:
 

상황을 좀 더 주의 깊게 살펴본 결과, 3개와 4개의 표시기 버퍼가 항상 올바른 데이터를 제공하는 것은 아님을 발견했습니다(비록 어느 것이 맞고 어느 것이 그렇지 않은지 구별하는 것은 불가능하지만)

차트를 봐. 데이터 창의 왼쪽은 차트에 설정된 지표의 값이고, 아래쪽은 Expert Advisor가 수신한 데이터입니다. 대부분의 값은 동일하지만 그러한 값도 있습니다. 아래 참조 ...

이와 관련하여 차트와 테스터에서 서로 다른 과거 데이터가 사용된다는 가정이 있었습니다.

누가 뭐라고 생각해?

 

그리고 마지막으로 가장 큰 문제! 일반적인 방법으로 1,2 및 5 표시기 버퍼에 대한 데이터를 얻을 수 없습니다.

문제는 이러한 배열에 대한 데이터를 계산할 때 이전 막대의 이전에 계산된 데이터가 고려된다는 것입니다.

물론 표시기를 호출 할 때 prev_calculated 의 값에 관계없이 N 개의 예정된 막대를 강제로 다시 계산하도록 지시할 수 있습니다.

지표 값의 호출 및 계산은 prev_calculated 값이 0 이 아닌 상태에서 발생한다고 가정합니다

이것은 대부분의 지표에 해당됩니다. 리소스를 절약하지만 주어진 예제에서는 작동하지 않습니다.

무엇을 할까요? 무슨 생각?

옵션으로 모든 계산을 전문가에게 양도할 수 있습니다!!! 이 옵션은 효과가 있지만 그렇지는 않습니다 ... 여전히 머리 위로 바지를 입고 싶지 않습니다.

Способы вызова индикаторов в MQL5
Способы вызова индикаторов в MQL5
  • 2010.03.09
  • KlimMalgin
  • www.mql5.com
C появлением новой версии языка MQL, не только изменился подход к работе с индикаторами, но и появились новые способы создания индикаторов. Кроме того, появилась дополнительная гибкость при работе с индикаторными буферами - теперь вы можете самостоятельно указать нужное направление индексации и получать ровно столько значений индикатора, сколько вам требуется. В этой статье рассмотрены базовые методы вызова индикаторов и получения данных из индикаторных буферов.
 

EA에서 사용

 int resIup = CopyBuffer (iCusHandlI_H4, 2 , 0 , 1 ,dBufIup_H4);
값은 0 번째 막대에서 가져오고 촛불이 닫힐 때까지 표시기 버퍼 의 값은 각 틱에서 변경됩니다.
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
  • 2010.10.25
  • Nikolay Kositsin
  • www.mql5.com
Статья о традиционных и не совсем традиционных алгоритмах усреднения, упакованных в максимально простые и достаточно однотипные классы. Они задумывались для универсального использования в практических разработках индикаторов. Надеюсь, что предложенные классы в определенных ситуациях могут оказаться достаточно актуальной альтернативой громоздким, в некотором смысле, вызовам пользовательских и технических индикаторов.