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

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

처음에만. 코드에 오류가 있습니다

죄송합니다... 코드를 제거하는 방법을 모르겠습니다. 따라서 LoY[S2][0]=Bid 대신 블록 2에서 간단히 말하겠습니다. LoY[0][52]=입찰가 필요

 

행과 열을 동시에 바꿀 수 없는 이유는 무엇입니까?

 double LoY[ 31 ][ 2 ];
 

즉시 올바른 순서로 수행하면 채우려는 셀의 이름을 0.5555 값으로 지정할 수 있습니까?


 
Aleksei Stepanenko :

행과 열을 동시에 바꿀 수 없는 이유는 무엇입니까?

그런 다음 ArrayFill(LoY,0,10,0.5555); 작동 안 할 것이다. 결국, 그녀는 값을 변경하는 배열 요소 가 *연속*으로 이동해야 합니다. 내가 그녀에게 LoY[31][2]를 먹이면 어떻게 될까요?
그런 다음 값을 변경해야 하는 배열 요소는 1을 통과합니다. 이 경우 먼저 배열의 31행을 한 줄에 순서대로 "추가"합니다.

 
Aleksei Stepanenko :

즉시 올바른 순서로 수행하면 채우려는 셀의 이름을 0.5555 값으로 지정할 수 있습니까?


셀의 첫 번째 줄에는 첫 번째부터 열 번째까지 포함됩니다. 그러나 값을 0.5555로 채우고 나면 전체 첫 번째 줄을 정렬해야 합니다. 예를 들어 오름차순으로 가정해 보겠습니다. ArrayFill (LoY,0,10,0.5555) 대신 루프의 반복이 적합하지 않습니다.

코드의 버그를 수정했습니다

 

스크립트는 다음과 같습니다.

 void OnStart ()
   {
   int arr[ 31 , 2 ]={ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 ,
                   31 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 , 48 , 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59 , 60 , 61 };
   //до заполнения              
   string str= "" ;
   for ( int i= 0 ; i< 31 ; i++) for ( int j= 0 ; j< 2 ; j++) str+=( string )arr[i,j]+ ", " ;
   printf (str);
   //после заполнения
   str= "" ;
   ArrayFill (arr, 0 , 10 , 555 ); 
   for ( int i= 0 ; i< 31 ; i++) for ( int j= 0 ; j< 2 ; j++) str+=( string )arr[i,j]+ ", " ;
   printf (str);
   }

결과:

 2021.03 . 20 19 : 42 : 26.602 primer AUDUSD,H1: 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 , 48 , 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59 , 60 , 61 , 

2021.03 . 20 19 : 42 : 26.602 primer AUDUSD,H1: 555 , 555 , 555 , 555 , 555 , 555 , 555 , 555 , 555 , 555 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 , 48 , 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59 , 60 , 61 , 

예 혹은 아니오?

 
Aleksei Stepanenko :

스크립트는 다음과 같습니다.

결과:

예 혹은 아니오?

매우 감사합니다. 이것은 내가 필요로하는 것 같습니다. 그러나 이 코드를 스크립트로 발행하지 않고 제 코드에 삽입해 주시면 감사하겠습니다. 나는 나를 위해 새로운 정보를 빨리 이해하고 배울 것입니다. 배열에 정수 대신 가격 값만 있습니다.

도움을 주셔서 다시 한 번 감사드립니다.

 
다른 방식으로 작성해야 하는 경우 대신
 ArrayFill()

사용

 for ( int i= 0 ; i< 10 ; i++) arr[i, 0 ]= 555 ;
 
Aleksei Stepanenko :
다르게 작성해야 하는 경우 대신

사용

확인. 오늘은 저를 위한 새로운 정보에 대해 알아보려고 합니다. 내일 결과를 알려드리겠습니다.

다시 한번 감사합니다.

 
ANDREY :

코드는 스크립트 형식이 아니라 내 코드에 붙여넣습니다.

그래서 나는 다른 것을 쓰지 않고 단지 당신의 코드를 반복했습니다.

내가 시각적으로 숫자를 잘못 정렬했는데(두 줄로 되어 있지만 31에 있어야 함) 이것이 필요하다고 생각했습니다.

ArrayFill 대신 0.5555 를 반복해야 할 가능성이 큽니다. 시도 해봐.

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

void OnTick ()
{
//*************************************************** БЛОК 1
if (Minute()== 20 &&Minute()!=S1)
{
for ( int i= 0 ; i< 10 ; i++) LoY[i, 0 ]= 0.555 ;
S1=Minute();
}
//*************************************************** БЛОК 2
if (Minute()!=S)
{
LoY[S2][ 0 ]=Bid;
ArraySort (LoY, WHOLE_ARRAY , 0 ,MODE_ASCEND);
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();
}
}