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

 
Taras Slobodyanik :

댓글 형식은 브로커마다 다를 수 있습니다.

"To"와 "From"의 부재를 만나지 못했습니다
 
Artyom Trishkin :
나는 "To"와 "From"의 부재를 만나지 않았다
Artem, 위의 내 질문을 봐 ....
 

누구나 하루 중 시간을 좋아합니다!

MQL4(또는 MQL5에서 MQL4에서 작업 중 )에 LoY[2][7] 배열을 LoY[7][2] 배열 로 또는 그 반대로 변환하는 함수가 있다고 알려주십시오. 일종의 조옮김. 아래는 필요한 변환의 예입니다. 기능이 있는 것이 바람직합니다. 루프에서 배열을 변환하는 방법을 이미 알고 있습니다.

도와 주셔서 감사합니다.

 
ANDREY :

누구나 하루 중 시간을 좋아합니다!

MQL4(또는 MQL5에서 MQL4에서 작업 중 )에 LoY[2][7] 배열을 LoY[7][2] 배열 로 또는 그 반대로 변환하는 함수가 있다고 알려주십시오. 일종의 조옮김. 아래는 필요한 변환의 예입니다.

도와 주셔서 감사합니다.

참고로: 알고리즘의 고전(일반적으로 IT)에서는 이러한 작업을 zip이라고 합니다.

라이브러리에는 그러한 기능이 없습니다. 그녀는 몹시 탐욕스럽고 비효율적입니다. 배열의 모든 데이터를 재정렬하는 것보다 알고리즘/프로그램에서 인덱스를 변경하거나 간접 참조를 사용하는 것이 더 쉽고 빠릅니다.

 
Maxim Kuznetsov :

배열의 모든 데이터를 재정렬하는 것보다 알고리즘/프로그램에서 인덱스를 변경하거나 간접 참조를 사용하는 것이 더 쉽고 빠릅니다.

답변 주셔서 대단히 감사합니다. 불행히도, 나는 당신만큼 프로그래밍에 능숙하지 않습니다. mql4 로 코드를 작성해 주시면 대단히 감사하겠습니다.   내 문제를 해결하기 위해 배열 인덱스 가 변경된 도움으로. 그리고 간접적인 호소의 예를 들어 주시면 두 배로 감사하겠습니다.

그러면 생각의 과정을 더 정확하게 이해하고 당신 덕분에 새롭고 유용한 것을 배우게 될 것입니다.

 
ANDREY :

답변 주셔서 대단히 감사합니다. 불행히도, 나는 당신만큼 프로그래밍에 능숙하지 않습니다. mql4 로 코드를 작성해 주시면 대단히 감사하겠습니다.   내 문제를 해결하기 위해 배열 인덱스 가 변경된 도움으로. 그리고 간접적인 호소의 예를 들어 주시면 두 배로 감사하겠습니다.

그러면 나는 생각의 과정을 더 정확하게 이해하고 당신 덕분에 새롭고 유용한 것을 배우게 될 것입니다.

void Convert_7x2_2x7 (const double &src[7][2],double &dst[2][7]) {

   for(int i=0;i<7;i++)

   for(int j=0;j<2;j++) {

dst[j][i]=src[i][j];

   }

}

짧지만 이것은 당신이 할 수 있는 최악의 일입니다 :-) 두 개의 중첩 루프와 배열의 요소별 복사.

알고리즘 내부에 있을 때 인덱스의 이름을 바꿀 수 있습니다. 코드에서 i를 j로 변경하거나 그 반대로 변경하십시오.

 
Maxim Kuznetsov :

void Convert_7x2_2x7 (const double &src[7][2],double &dst[2][7]) {

   for(int i=0;i<7;i++)

   for(int j=0;j<2;j++) {

dst[j][i]=src[i][j];

   }

}

짧지 만 최악의 일입니다 :-)

매우 감사합니다. 더 나은 예는 어떻습니까? :-) .... 그래서 나는 완전한 이해를 가질 것입니다.

요소별 복사는 길고 에너지 집약적입니다. 특히 큰 배열의 경우....제가 틀리지 않은 경우입니다.

 
앤드류, 왜 이러는거야? 데이터가 이미 어레이에 수집되어 있다면 아무 것도 이동하지 않고 그대로 사용할 수 있는 방법을 찾을 수 있습니다. 또는 올바른 순서로 어레이로 사전 조립합니다. 무엇을 받고 싶습니까?
 
Aleksei Stepanenko :
앤드류, 왜 이러는거야? 데이터가 이미 어레이에 수집되어 있다면 아무 것도 이동하지 않고 그대로 사용할 수 있는 방법을 찾을 수 있습니다. 또는 올바른 순서로 어레이로 사전 조립합니다. 무엇을 받고 싶습니까?

다음은 내가 필요한 것을 설명하는 간단한 코드입니다.

 double LoY[ 2 ][ 31 ],LoU,LoU1;
int S,S1,S2;

void OnTick ()
{
//*************************************************** БЛОК 1
if (Minute()== 20 &&Minute()!=S1)
{
ArrayFill (LoY, 0 , 10 , 0.5555 );

S1=Minute();
}
//*************************************************** БЛОК 2
if (Minute()!=S)
{
LoY[0][S2]=Bid;
ArraySort (LoY, WHOLE_ARRAY , 0 ,MODE_ASCEND);
Print ( "----LoY[0][1]-- Г ---  [0]  " ,  LoY[ 0 ][ 0 ], "  [1] " ,   LoY[ 0 ][ 1 ], "  [2] " ,   LoY[ 0 ][ 2 ], "  [3] " ,   LoY[ 0 ][ 3 ], "  [4] " ,   LoY[ 0 ][ 4 ], "  [26] " ,   LoY[ 0 ][ 26 ], "  [27] " ,   LoY[ 0 ][ 27 ], "  [28] " ,   LoY[ 0 ][ 28 ], "  [30] " ,   LoY[ 0 ][ 30 ], "  [60] " ,   LoY[ 0 ][ 60 ]);
Print ( "----LoY[1][0]-- В ---  [0]  " ,  LoY[ 0 ][ 0 ], "  [1] " ,   LoY[ 1 ][ 0 ], "  [2] " ,   LoY[ 2 ][ 0 ], "  [3] " ,   LoY[ 3 ][ 0 ], "  [4] " ,   LoY[ 4 ][ 0 ], "  [26] " ,   LoY[ 26 ][ 0 ], "  [27] " ,   LoY[ 27 ][ 0 ], "  [28] " ,   LoY[ 28 ][ 0 ], "  [30] " ,   LoY[ 30 ][ 0 ], "  [60] " ,   LoY[ 60 ][ 0 ]);
S2++;
if (S2== 62 )
{
S2= 0 ;
}
S=Minute();
}
}

블록 1은 ArrayFill(LoY,0,10,0.5555)을 실행하고 처음 10개의 배열 요소 를 0.5555로 설정합니다. 그런 다음 0열에서 31열로 전체 null 행을 정렬해야 합니다.

ArraySort(LoY,WHOLE_ARRAY,0,MODE_ASCEND)를 사용하여 블록 2에서 정렬하고 싶습니다. 그러나 이 함수는 첫 번째 차원, 즉 행을 기준으로 2차원 배열을 정렬하기 때문에 정렬할 수 없습니다. 1. ArraySort() 두 번째 차원으로만 정렬해야 하는 문자열이 있습니다. 즉, 2차원 배열을 열로 정렬하지 않습니다(1차원 배열만).

그래서 첫 번째 블록을 실행한 후 LoY[2][31]을 LoY[31][2] 로 변환하여 블록 2에서 ArraySort()가 필요한 값을 정렬할 수 있도록 하는 것이 좋을 것이라고 생각했습니다. 그리고 ArrayFil()이 처음 10개를 변경한 후 null 문자열에서 모든 값을 정렬해야 합니다.

2차원 배열을 2차원, 즉 열을 기준으로 다른 함수를 사용하거나 다른 것을 사용하여 정렬할 수 있습니까?
죄송합니다... 코드를 제거하는 방법을 모르겠습니다. 따라서 LoY[S2][0]=Bid 대신 180행에 오류가 있다고 말씀드리겠습니다. LoY[0][52]=입찰가 필요

도와 주셔서 감사합니다

 
두 행의 값을 정렬하시겠습니까, 아니면 첫 번째 행만 정렬하시겠습니까?