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

 
hoz :
다음은 튜토리얼 페이지입니다. https://docs.mql4.com/en/array/ArrayCopy
그것은 말한다 :
array2 에 갑자기 마지막 10개의 막대가 포함된 이유는 무엇입니까?
결국 Bars*6 - 60 은 값 10 을 반환하지 않습니다. 논리가 전혀 안보이네요.
예를 들어, 기록에 1000개의 막대가 있습니다. 그런 다음 Bars*6 - 60 = 1000*6 - 60 = 6000 - 60 = 5940 입니다. 그리고 마지막 10개의 막대는 어디에 있습니까?
5940 --마지막 10개 막대(막대 - 6개 색인)를 복사할 소스 배열의 시작 색인.
 

:
5940 --마지막 10개 막대(막대 - 6개 색인)를 복사할 소스 배열의 시작 색인.

친애하는 전문가 여러분, 아니요.   교과서에 오류가 있습니까?   

내 고려 사항은 다음과 같습니다.

코드 시작 부분에   ~라고 불리는    f-i   정수 ArrayCopyRates ,   이 함수의 예에 따라 현재 차트의 막대 데이터를 RateInfo[][6] 유형의 2차원 배열에 복사하고 복사된 막대의 수를 반환하거나 실패할 경우 -1을 반환합니다. :

 double array1[][ 6 ];
ArrayCopyRates (array1, "EURUSD" , PERIOD_H1 );
Print ( "Текущий бар " , TimeToStr (array1[ 0 ][ 0 ]), "цена открытия " , array1[ 0 ][ 1 ]);

현재 막대는 인덱스가 있는 막대입니다.   0-0, 그래서   원본으로 돌아가기   암호,   우리   array1 의 인덱스 0-0(현재 막대)에 있는 요소를 다음으로 복사합니다.   정렬   시작 인덱스가 있는 array2   0-0, 우리는 튜토리얼에서 작성된 것과 반대되는 마지막 10개 막대(여기서 마지막 막대는 현재 막대, 인덱스 [0]가 있는 막대)를 얻습니다. 따라서 인덱스가 있는 요소를 복사합니다.     Bars*6-60,60 of array1 to array   초기 요소 인덱스가 0인 array2는 기록에서 막대에 대한 정보를 얻습니다.

 

안녕하세요.

사용자 지정 표시기 가 있습니다.

저는 Expert Advisor를 쓰고 있습니다.그리고 질문이 생겼습니다...내 지표를 참조하는 방법은 무엇입니까? 즉, 지정된 막대에서 데이터를 가져옵니다(저의 경우 두 번째 막대를 가져와야 함). windowsPriceMax가 있지만 내가 아는 한 하위 창 차트의 마지막 값만 표시하고 예를 들어 표시기에 3줄이 있으면 무엇을 표시할 것인지 명확하지 않습니다.

 
Tragedy :

안녕하세요.

맞춤형 지표가 있습니다.

저는 Expert Advisor를 쓰고 있습니다.그리고 질문이 생겼습니다...내 지표를 참조하는 방법은 무엇입니까? 즉, 지정된 막대에서 데이터를 가져옵니다(저의 경우 두 번째 막대를 가져와야 함). windowsPriceMax가 있지만 내가 아는 한 하위 창 차트의 마지막 값만 표시하고 예를 들어 표시기에 3줄이 있으면 무엇을 표시할 것인지 명확하지 않습니다.



이중 iCustom(문자열 기호, int timeframe, 문자열 이름, ..., int 모드, int shift)

지정된 사용자 지정 표시기 의 계산. 사용자 지정 표시기는 컴파일해야 하며(확장자가 EX4인 파일) terminal_directory\experts\indicators 디렉터리에 있어야 합니다.
옵션:

symbol - 지표가 계산될 데이터가 있는 기기의 기호 이름입니다. NULL은 현재 문자를 의미합니다.
기간 - 기간. 차트 기간 중 하나일 수 있습니다. 0은 현재 차트의 기간을 의미합니다.
name - 사용자 지정 표시기의 이름입니다.
... - 매개변수 목록(필요한 경우). 전달된 매개변수는 선언 순서 및 사용자 지정 표시기의 외부(외부) 변수 유형과 일치해야 합니다.
mode - 표시줄의 인덱스입니다. 0에서 7 사이일 수 있으며 SetIndexBuffer 함수 중 하나에서 사용하는 인덱스와 일치해야 합니다.
shift - 표시기 버퍼에서 받은 값의 인덱스(현재 막대를 기준으로 지정된 기간 이전만큼 이동).

 

고맙습니다. 도움이 되었습니다. 미리 설치된 iMac *** iStoch *** 인디케이터만 이런 식으로 호출되는 줄 알았습니다.

 
Lisi4ka330 :

친애하는 전문가 여러분, 아니요.   교과서에 오류가 있습니까?   

내 고려 사항은 다음과 같습니다.

코드 시작 부분에   ~라고 불리는    f-i   정수 ArrayCopyRates ,   이 함수의 예에 따라 현재 차트의 막대 데이터를 RateInfo[][6] 유형의 2차원 배열에 복사하고 복사된 막대의 수를 반환하거나 실패할 경우 -1을 반환합니다. :

현재 막대는 인덱스가 있는 막대입니다.   0-0, 그래서   원본으로 돌아가기   암호,   우리   array1 의 인덱스 0-0(현재 막대)에 있는 요소를 다음으로 복사합니다.   정렬   시작 인덱스가 있는 array2   0-0, 우리는 튜토리얼에서 작성된 것과 반대되는 마지막 10개 막대(여기서 마지막 막대는 현재 막대, 인덱스 [0]가 있는 막대)를 얻습니다. 따라서 인덱스가 있는 요소를 복사합니다.     Bars*6-60,60 of array1 to array   초기 요소 인덱스가 0인 array2는 기록에서 막대에 대한 정보를 얻습니다.


큰 소리로 말하지 않고 실제로 확인합니다.

 //+------------------------------------------------------------------+
//|                                                       массив.mq4 |
//|                                                  Copyright 2012, |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012,"
#property link       "https://forum.mql4.com/ru/46980/page525"
#property show_inputs
extern string s= " -----номер бара--------" ;
extern int a= 9 ; //номер 10 последних баров 
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
{ if (a< 10 )
{ double array1[][ 6 ]; double array2[ 10 ][ 6 ];
   ArrayCopyRates (array1);
   ArrayCopy (array2,array1, 0 , Bars * 6 - 60 , 60 );
// теперь array2 содержит 10 последних баров из истории(имеется в виду,что последний бар-это текущий бар,бар с индексом [0])
Alert ( "Контрольный бар - " ,a, " время - " , TimeToStr (array2[a][ 0 ]), "  цена открытия - " ,array2[a][ 1 ]);} return ( 0 );}
 
Roll :


큰 소리로 말하지 않고 실제로 확인합니다.

예, 실제로 Bars*6-60,60 인덱스가 있는 요소가 현재 막대인 것으로 밝혀졌습니다... 반면 예에서 설명하면 다음과 같습니다.

 double array1[][ 6 ];
ArrayCopyRates (array1, "EURUSD" , PERIOD_H1 );
Print ( "Текущий бар " , TimeToStr (array1[ 0 ][ 0 ]), "цена открытия " , array1[ 0 ][ 1 ]);
현재 bar는 array1[ 0 ][ 0 ]이고 , array를 복사하면 array1[Bars*6-60,60][0]이 됩니다... 어딘가에서 번호가 다시 매겨지고 있는 것으로 나타났습니다... 물론, 실습에서 함수를 사용한 후 결과는 명확하지만 ... 내 생각에는 논리가 엉망입니다.)))
 
Lisi4ka330 :

예, 실제로 인덱스 Bars*6-60,60이 있는 요소가 현재 막대인 것으로 밝혀졌습니다...


이것이 당신의 결론입니다.
 
Roll :


큰 소리로 말하지 않고 실제로 확인합니다.

 #property show_inputs
extern string s= " -----номер бара--------" ;
extern int a= 9 ; //номер 10 последних баров 
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
{ if (a< 10 )
{ double array1[][ 6 ]; double array2[ 10 ][ 6 ];
   ArrayCopyRates (array1);
   ArrayCopy (array2,array1, 0 , Bars * 6 - 60 , 60 );
// теперь array2 содержит 10 последних баров из истории(имеется в виду,что последний бар-это текущий бар,бар с индексом [0])
Alert ( "Контрольный бар - " ,a, " время - " , TimeToStr (array2[a][ 0 ]), "  цена открытия - " ,array2[a][ 1 ]);} return ( 0 );}

음, 여기 에 TimeToStr 배열의 특정 요소가 있습니다 ( array2[a][ 0 ]

제대로 나온 것, 동의합니다. 하지만 Bars * 6 - 60 ... Bars 대신에 계산에서 대체되는 값은 무엇과 관련이 있습니까? 막대라면 마지막 10개의 막대가 어떻게 나오나요?

포럼에서 내가 이것을 이해하지 못했을뿐만 아니라 많은 것을 볼 수 있습니다.

모든 막대의 수에 6을 곱하고 60을 뺀 것으로 나타났습니다. 6은 어디에서 얻었습니까? 네, 말도 안되는 소리입니다.

 
hoz :

음, 여기에 TimeToStr 배열의 특정 요소가 있습니다(array2[a][ 0 ]

제대로 나온 것, 동의합니다. 하지만 Bars * 6 - 60 ... Bars 대신에 계산에서 대체되는 값은 무엇과 관련이 있습니까? 막대라면 마지막 10개의 막대가 어떻게 나오나요?

포럼에서 내가 이것을 이해하지 못했을뿐만 아니라 많은 것을 볼 수 있습니다.



int Bars -- 현재 차트 의 막대 수입니다 .