최적화 중 일회성 어레이 계산 - 페이지 7

 
forexman77 :

전역 수준에서 배열을 선언 하려고 했습니다(mql4 코드).

init에 채우십시오

시작할 때 인쇄할 때 1971년의 날짜를 표시합니다. 즉, 배열이 비어 있습니다.

처음에 배열을 채우면 값이 나타납니다. 아마도 그 이유는 새 날짜 시간에 배열을 초기화하지만 코드가 없으면 코드가 컴파일되지 않기 때문일 수 있습니까?

일반적으로 배열이 사라집니다. 내가 무엇을 잘못하고 있지?

누군가가 필요로하는 경우를 대비하여 여기에서 생각해 냈습니다. 한 어레이를 다른 어레이로 복사했습니다.

 datetime T_[]; //на глобальном уровне
//////////////////////////////////////////////////////////////////
int init()
  {
   ArraySetAsSeries (T_, true );
   massiv();

   return ( 0 );
  }
/////////////////////////////////////////////////////////////////
int start()
  {
   if ( ArraySize (T_)== 0 )
   massiv();

   return ( 0 );  
  }
////////////////////////////////////////////////////////////////
void massiv()
  {
   datetime T[ 40 ]=
   {
   1262731020 , 1262735700 , 1262821920 , 1262903400 , 1262989740 , 1263247200 , 1263339060 , 1263420000 , 1263507480 , 1263595500 ,
   1265324700 , 1265407200 , 1265752980 , 1265926500 , 1265930820 , 1267657200 , 1267740300 , 1267826460 , 1268175840 , 1268346360 ,
   1270504920 , 1270684140 , 1270768500 , 1272924180 , 1273011720 , 1273097100 , 1273272240 , 1273528800 , 1273617180 , 1275344100 ,
   1275516000 , 1275602400 , 1275689160 , 1276034400 , 1276124580 , 1276208700 , 1276211640 , 1278027960 , 1278369780 , 1278373920
   };
   ArraySetAsSeries (T, true );
   ArrayInitialize (T_, 0 );
   ArrayResize (T_, 40 );
   ArrayCopy (T_,T, 0 , 0 , WHOLE_ARRAY );
   ArrayFree (T);
  }
 
forexman77 :

누군가가 필요로하는 경우를 대비하여 여기에서 생각해 냈습니다. 한 어레이를 다른 어레이로 복사했습니다.

그리고 무엇을 위한 것입니까?

처음에 질문은 후속 최적화 반복 동안 배열이 다시 계산되지 않도록 하는 것이었습니다. 이제 단순히 채워지고 다른 것으로 복사됩니다. 이것으로 좋은 것이 없을 것입니다. 내가 이해하는 것처럼 이 배열 T[40]은 명확성을 위해 이러한 방식으로 제공되지만 실제로는 순차적으로 고려되고 채워져야 합니다. 다음 에 최적화를 시작할 때마다 이 배열은 이전과 같이 다시 계산됩니다. 유일한 차이점은 모든 것이 다르게 구성된다는 것입니다.

 
Alexey Viktorov :

그리고 무엇을 위한 것입니까?

처음에 질문은 후속 최적화 반복 동안 배열이 다시 계산되지 않도록 하는 것이었습니다. 이제 단순히 채워지고 다른 것으로 복사됩니다. 이것으로 좋은 것이 없을 것입니다. 내가 이해하는 것처럼 이 배열 T[40]은 명확성을 위해 이러한 방식으로 제공되지만 실제로는 순차적으로 고려되고 채워져야 합니다. 다음 에 최적화를 시작할 때마다 이 배열은 이전과 같이 다시 계산됩니다. 유일한 차이점은 모든 것이 다르게 구성된다는 것입니다.

중괄호로 선언된 배열이 저장되지 않았으며 이후에 init를 채워 전역 수준에서 선언할 수 없습니다(배열이 한 번의 실행 내에 저장되지 않음).

최적화 반복 사이에 내가 이해하는 것처럼 배열이 저장되지 않습니다. 즉, 프로그램이 모든 것을 재설정합니다.

 
forexman77 :

중괄호로 선언된 배열이 저장되지 않았으며 이후에 init를 채워 전역 수준에서 선언할 수 없습니다(배열은 한 번의 실행 내에 저장되지 않았습니다).

최적화 반복 사이에 내가 이해하는 것처럼 배열이 저장되지 않습니다. 즉, 프로그램이 모든 것을 재설정합니다.

따라서 주기를 채우는 데 오랜 시간이 걸리지 않습니다. 또 다른 질문은 배열 요소를 계산하는 데 시간이 오래 걸리는지 여부입니다. 따라서 이 경우에는 저장되지 않으며 각 반복에서 배열 요소의 재계산이 계속됩니다. 그리고 배열이 이렇게 채워지면 전역 수준에서 모든 요소를 중괄호로 열거할 수 있습니다. 이 마법의 의미를 모르겠어...
 
Alexey Viktorov :
그리고 배열이 이렇게 채워지면 전역 수준에서 모든 요소를 중괄호로 열거할 수 있습니다. 이 마법의 의미를 모르겠어...
당신은 또한 전 세계적으로 할 수 있습니다. 하지만 꼭대기에 수천 개의 요소로 된 탑을 쌓는 것을 좋아하지 않았습니다)
 
forexman77 :
당신은 또한 전 세계적으로 할 수 있습니다. 하지만 꼭대기에 수천 개의 요소로 된 탑을 쌓는 것을 좋아하지 않았습니다)

글쎄, 모든 것이 위시리스트에 따라 밝혀진 것에 대해 하나님께 감사드립니다.

속도가 빨라졌나요?

 
Alexey Viktorov :

글쎄, 모든 것이 위시리스트에 따라 밝혀진 것에 대해 하나님께 감사드립니다.

속도가 빨라졌나요?

더 빨라집니다.
 

새 주제를 만들지 않았습니다.

이제 다음을 수행하려고 합니다. 배열이 있고 첫 번째 값은 날짜이고 두 번째 및 세 번째 숫자는 두 배입니다. 날짜 값을 기준으로 배열을 정렬해야 하지만 두 번째 및 세 번째 값은 날짜 제한이 있습니다.

그런 다음 여러 배열에서 하나를 만들고 날짜별로 정렬할 계획입니다.

나는 이것을 시도했지만 내가 이해하는 한 정렬은배열 인덱스 , 즉 i로 진행됩니다.

double m[ 215 ][ 3 ];
m[i][ 0 ]=Data;
m[i][ 1 ]=f1;
m[i][ 2 ]=f2;
 
forexman77 :

새 주제를 만들지 않았습니다.

이제 다음을 수행하려고 합니다. 배열이 있고 첫 번째 값은 날짜이고 두 번째 및 세 번째 숫자는 두 배입니다. 날짜 값을 기준으로 배열을 정렬해야 하지만 두 번째 및 세 번째 값은 날짜 제한이 있습니다.

...

여기를 보십시오: https://www.mql5.com/ru/forum/42036
Сортировка двухмерного массива.
Сортировка двухмерного массива.
  • www.mql5.com
Форум трейдеров MQL5.community
 
Anatoli Kazharski :
여기를 보십시오: https://www.mql5.com/ru/forum/42036

기본적으로 수업에는 모든 것이 있습니다. 저에게는 어두운 숲입니다. 그런데 몇 가지 생각이 들었다. 날짜와 숫자를 따로따로 배열로 만드세요. 만, 정렬 후 날짜가있는 색인 번호, 즉 두 번째 차원에있는 i를 얻는 방법은 무엇입니까?

datetime m[ 215 ][ 1 ];
double d[ 215 ][ 2 ];

m[ 0 ][i]=Dat_DtTm;
d[i][ 0 ]=f1;
d[i][ 1 ]=f2;