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

 

1. 질문이 있습니다. 메모리를 통해 배열 요소 를 어떻게 삭제할 수 있습니까? 루프를 통해 수학적으로 배열을 이동하여 요소를 삭제하는 순간 mql4에서 가능합니까? 가능하다면 1차원 배열에서 이것이 어떻게 수행되는지에 대한 예를 제공하십시오.

2. 또한 문제는 메모리를 통해 삭제하고 불필요한 요소가 있는 섹션을 잘라내면 배열이 축소되고 해당 숫자가 삭제된 요소와 배열의 후속 사용에서 배열을 원래 상태로 복원해야 합니다. 수학적 방법으로 루프를 통해 삭제하면 변수에 값을 할당하기 위한 일정한 계산이 있는 루프가 처리되어 프로그램에 부하가 가합니까?

 
Seric29 :

1. 질문이 있습니다. 메모리를 통해 배열 요소 를 어떻게 삭제할 수 있습니까? 루프를 통해 수학적으로 배열을 이동하여 요소를 삭제하는 순간 mql4에서 가능합니까? 가능하면 1차원 배열에서 이것이 어떻게 수행되는지에 대한 예를 제공하십시오.

2. 또한 문제는 메모리를 통해 삭제하고 불필요한 요소가 있는 섹션을 잘라내면 배열이 축소되고 해당 숫자가 삭제된 요소와 배열의 후속 사용에서 배열을 원래 상태로 복원해야 합니다. 수학적 방법으로 루프를 통해 삭제하면 변수에 값을 할당하기 위한 일정한 계산이 있는 루프가 처리되어 프로그램에 부하가 가합니까?

배열을 "자신에게" 복사하고 불필요한 요소의 수만큼 배열의 크기를 줄이는 것으로 충분합니다.

하나의 요소를 삽입하려면 크기를 늘리고 "자체에" 다시 복사하고 원하는 값을 여유 공간에 붙여넣는 것으로 충분합니다.

 
Alexey Viktorov :

배열을 "자신에게" 복사하고 불필요한 요소의 수만큼 배열의 크기를 줄이는 것으로 충분합니다.

하나의 요소를 삽입하려면 크기를 늘리고 "자체에" 다시 복사하고 원하는 값을 여유 공간에 붙여넣는 것으로 충분합니다.

복사 함수에 3차원 배열을 삽입하려고 시도했지만 오류가 없습니다. 즉, 이 함수는 다른 차원의 배열과 함께 작동하거나 단순히 다른 차원에 대해 중복이 있을 수 있습니다. 도중에 이 함수를 shift 함수 대신 사용할 수 있습니다. 직접 작성할 필요가 없습니다. 이전에 그것에 대해 생각하지 못한 것이 유감입니다 . 배열을 자체에 복사하는 것이 얼마나 위험한지 작성됩니다. 결과가 정의되지 않을 수 있습니다.

 
Seric29 :

복사 함수에 3차원 배열을 삽입하려고 시도했지만 오류가 없습니다. 즉, 이 함수는 다른 차원의 배열과 함께 작동하거나 단순히 다른 차원에 대해 중복이 있을 수 있습니다. 길을 따라이 함수는 shift 함수 대신 사용할 수 있습니다. 직접 작성할 필요가 없습니다. 이전에 그것에 대해 생각하지 못한 것이 유감입니다. 배열을 자체에 복사하는 것이 얼마나 위험한지 작성됩니다. 결과가 정의되지 않을 수 있습니다.

다차원 배열을 복사할 때 두 번째 및 후속 차원의 차원을 고려해야 합니다. 복사할 때 이동해야 하는 양에 따라 다릅니다. 간단히 말해서 실험 중에 이해했듯이 다차원 배열의 모든 값은 "한 줄"에 정렬 된 다음 다시 "다음에 의한 열"에 작성됩니다.

일반적으로 지금은 이론을 다시 말할 수 없습니다. 이를 사용할 필요가 있는지 다시 확인해야 합니다.

 
Alexey Viktorov :

다차원 배열을 복사할 때 두 번째 및 후속 차원의 차원을 고려해야 합니다. 복사할 때 이동해야 하는 양에 따라 다릅니다. 간단히 말해서 실험 중에 이해했듯이 다차원 배열의 모든 값은 "한 줄"에 정렬 된 다음 다시 "다음에 의한 열"에 작성됩니다.

일반적으로 지금은 이론을 다시 말할 수 없습니다. 이를 사용할 필요가 있는지 다시 확인해야 합니다.

C++에서는 이것 사이에 차이가 없습니다

   вывести в консоль massiv[ 0 ][ 0 ][ 0 ]
   или так
   вывести в консоль massiv[ 0 ]

이러한 경우에 출력이 있을 것입니다. 그것들은 동일한 메모리 블록에 있고 C++에서 직접 액세스하고 우리의 셸에서는 메모리에 대한 액세스가 닫혀 있고 다른 차원의 배열을 함수에 올바르게 전달하고 이러한 방식으로 액세스할 수 있는 방법이 없기 때문에 유일한 주의 사항은 C++의 다차원 배열은 동적 메모리에 위치하며, 위치에 대한 전자 지도를 본 사람은 아무도 없지만 흩어져 있을 수도 있습니다. 따라서 개념별로 다차원 배열을 자체적으로 복사하는 것은 매우 민감한 문제이거나 제대로 작동하지 않을 수 있습니까?

 
계정에 로그인한 방법을 프로그래밍 방식으로 결정하는 방법: 투자 암호 또는 거래 암호 사용?
 

내 표시기가 MQL5 코드를 실행하지 않습니다.

 void KValues( int i)
  {
   vhigh = 0 ; vlow = High[i];
   int limit = i + ( int )kperiod;
   for ( int a = i; a < limit; a++)
     {
      vhigh = ((price == STO_LOWHIGH ? High[a] : Close[a]) > vhigh ? (price == STO_LOWHIGH ? High[a] : Close[a]) : vhigh);
      vlow  = ((price == STO_LOWHIGH ? Low[a] : Close[a]) < vlow ? (price == STO_LOWHIGH ? Low[a] : Close[a]) : vlow);
     };
  }

결론은 price == STO_LOWHIGH 이면 모든 것이 올바르게 작동하고 price == STO_CLOSECLOSE 이면 함수는 다음 항목만 할당한다는 것입니다.

vhigh = 0 ; vlow = High[i];

... 루프 우회

 
Alexandr Sokolov :

내 표시기가 MQL5 코드를 실행하지 않습니다.

결론은 price == STO_LOWHIGH 이면 모든 것이 올바르게 작동하고 price == STO_CLOSECLOSE 이면 함수는 다음 항목만 할당한다는 것입니다.

... 루프 우회

괄호에 문제가 있습니다. 제 생각에는 여기에서는 전혀 필요하지 않습니다. 모두 필요하지 않습니다.

또는 최소한 왼쪽에 있는 물음표 앞에 선택한 항목을 다시 정렬합니다.

 void KValues( int i)
  {
   vhigh = 0 ; vlow = High[i];
   int limit = i + ( int )kperiod;
   for ( int a = i; a < limit; a++)
     {
      vhigh = ((price == STO_LOWHIGH ? High[a] : Close[a] ) > vhigh ? (price == STO_LOWHIGH ? High[a] : Close[a] ) : vhigh);
      vlow  = ((price == STO_LOWHIGH ? Low[a] : Close[a] ) < vlow ? (price == STO_LOWHIGH ? Low[a] : Close[a] ) : vlow);
     };
  }

일반적으로 ?: 연산자는 if else와 동일하다는 것만 이해하면 됩니다.

하나의 조건을 두 번 얻습니다. 이 조건이면 충분하다

vhigh = price == STO_LOWHIGH ? High[a] : Close[a];
vlow  = price == STO_LOWHIGH ? Low[a] : Close[a];
또는 당신이 받고 싶어하는 것을 이해하지 못했습니다.
 
Alexey Viktorov :

괄호에 문제가 있습니다. 제 생각에는 여기에서는 전혀 필요하지 않습니다. 모두 필요하지 않습니다.

또는 최소한 왼쪽에 있는 물음표 앞에 선택한 항목을 다시 정렬합니다.

일반적으로 ?: 연산자는 if else와 동일하다는 것만 이해하면 됩니다.

하나의 조건을 두 번 얻습니다. 이 조건이면 충분하다

또는 당신이 받고 싶어하는 것을 이해하지 못했습니다.

Low/High 및 Close/Close 매개변수로 K 기간 내 일반적인 maxHigh 및 minLow 확률을 얻고 싶습니다.

초기화 시 낮음/높음은 잘 작동하지만 닫기/닫기는 작동하지 않습니다.

 
Alexey Viktorov :

괄호에 문제가 있습니다. 내 생각에 그들은 여기에 전혀 필요하지 않습니다. 모두 필요하지 않습니다.

또는 적어도 왼쪽에 있는 물음표 앞에 선택한 항목을 다시 정렬합니다.

일반적으로 ?: 연산자는 if else와 동일하다는 것만 이해하면 됩니다.

하나의 조건을 두 번 얻습니다. 이 조건이면 충분하다

또는 당신이 받고 싶어하는 것을 이해하지 못했습니다.

나는 즉시 이해하지 못했지만 당신이 그것을 의미한다면

 void KValues( int i)
  {
   vhigh = 0 ; vlow = High[i];
   int limit = i + ( int )kperiod;
   for ( int a = i; a < limit; a++)
     {
      vhigh = ((price == STO_LOWHIGH ) ? High[a] : Close[a] > vhigh ? (price == STO_LOWHIGH ) ? High[a] : Close[a] : vhigh);
      vlow  = ((price == STO_LOWHIGH ) ? Low[a] : Close[a] < vlow ? (price == STO_LOWHIGH ) ? Low[a] : Close[a] : vlow);
     };
  }

그것은 내 문제를 해결하지 못한다