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

 
igrok333 :
변수의 유형을 반환하는 함수가 있습니까?

예를 들어, 당신은 씁니다.

정수 a = 10;

그런 다음 다음을 씁니다.

기능(a);

그리고 그녀는 당신에게 말합니다: INT!

:)
string functia(int a) { return "INT!"; } // 갑자기
string functia(double a) { return "DOUBLE!"; } // 또한 예상치 못한
 
igrok333 :
변수의 유형을 반환하는 함수가 있습니까?

예를 들어, 당신은 씁니다.

정수 a = 10;

그런 다음 다음을 씁니다.

기능(a);

그리고 그녀는 당신에게 말합니다: INT!

:)

도움말에서:

 void OnStart () 
  { 
//---  
   CTrade trade;    
   double d_value= M_PI ; 
   int i_value= INT_MAX ; 
   Print ( "d_value: type=" ,GetTypeName(d_value), ",   value=" , d_value); 
   Print ( "i_value: type=" ,GetTypeName(i_value), ",   value=" , i_value); 
   Print ( "trade: type=" ,GetTypeName(trade)); 
//---  
  } 
//+------------------------------------------------------------------+ 
//| Возвращает в строковом виде тип                                  | 
//+------------------------------------------------------------------+ 
template < typename T> 
string GetTypeName( const T &t) 
  { 
//--- вернем тип в виде строки 
   return ( typename (T)); 
//--- 
  }
 
WinProject :

모든 것이 훨씬 쉽습니다. 표시 버튼을 생성합니다(또는 기존 버튼 중 하나 사용). 또한 클릭하면 필요한 모든 개체가 모든 TF에 대한 가시성 플래그를 설정합니다. 버튼을 놓으면 모든 TF(또는 필요한 경우 필수 객체)의 모든 객체에 대해 표시 속성이 설정됩니다. 아무것도 삭제/재구축할 필요가 없습니다. 이 작업 후에 차트를 다시 그리면 됩니다.

OBJPROP_TIMEFRAMES 개체 속성입니다.

 

표시기에서 배열로 데이터를 푸시하는 방법을 알려주십시오. 즉, 배열을 선언해야 함은 분명합니다.

이중 num_array[];

그리고 여기서 잘 이해가 안가는 부분이...

num_array[0] = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i); // 인덱스가 [0]인 배열은 MA와 같지만 인덱스를 [1]로 변경하면 num_array[1]이 다음과 같습니다.

num_array[0]과 같은 표시기의 데이터입니다. 그리고 이것은 필요하지 않습니다. 배열은 순차적으로 채워져야 합니다. 그리고 마음에 떠오르는 모든 것은 하루를 24로 나누는 것입니다.

시간, 2차원 배열을 선언하고 각 시간에 대해 자체 행이 있는 인덱스를 할당하는 식으로 ....

어쩌면 더 쉬운 방법이나 덜 치질이 있습니까?

 
Corvin85 :

표시기의 데이터를 배열로 푸시하는 방법을 알려주십시오. 즉, 배열을 선언해야 함은 분명합니다.

이중 num_array[];

그리고 여기서 잘 이해가 안가는 부분이...

num_array[0] = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i); // 인덱스가 [0]인 배열은 MA와 같지만 인덱스를 [1]로 변경하면 num_array[1]이 다음과 같습니다.

num_array[0]과 같은 표시기의 데이터입니다. 그리고 이것은 필요하지 않습니다. 배열은 순차적으로 채워져야 합니다. 그리고 마음에 떠오르는 모든 것은 하루를 24로 나누는 것입니다.

시간, 2차원 배열을 선언하고 각 시간에 대해 자체 행이 있는 인덱스를 할당하는 식으로 ....

어쩌면 더 쉬운 방법이나 덜 치질이 있습니까?


나는 그것을 다음과 같이 본다:

 double num_array[];  

ArrayResize (num_array, 24 );

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

{

 num_array[i] = iMA ( NULL , 0 , 13 , 8 , MODE_SMMA , PRICE_MEDIAN ,i);

}
 
Vladislav Andruschenko :

나는 그것을 다음과 같이 본다:

 double num_array[];  

ArrayResize (num_array, 24 );

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

{

 num_array[i] = iMA ( NULL , 0 , 13 , 8 , MODE_SMMA , PRICE_MEDIAN ,i);

}
그리고 ArrayResize를 통해 배열의 최대 인덱스 수를 설정하고 루프를 통해 실행합니다. 감사합니다. 하지만 모든 인덱스가 터키의 데이터로 막혔을 때 ArrayFree 를 통해 지우는 질문이 있습니다. 맞습니까? 아니면 그는 자신을 다시 쓸 것인가? 또는 24x 후에 모든 것이 완전히 중지됩니까? 물론 어리석은 질문에 대해 죄송합니다. 그러나 저에게 배열은 일반적으로 알 수 없는 기능을 가진 일종의 다크호스입니다.
 
Corvin85 :
그리고 ArrayResize를 통해 배열의 최대 인덱스 수를 설정하고 루프를 통해 실행합니다. 감사합니다. 하지만 모든 인덱스가 터키의 데이터로 막혔을 때 ArrayFree 를 통해 지우는 질문이 있습니다. 맞습니까? 아니면 그는 자신을 다시 쓸 것인가? 또는 24x 후에 모든 것이 완전히 중지됩니까? 물론 어리석은 질문에 대해 죄송합니다. 그러나 저에게 배열은 일반적으로 알 수 없는 기능을 가진 일종의 다크호스입니다.
글쎄, 당신의 목표가 무엇인지에 따라. 마지막 24개 막대에 대한 mA 데이터로 어레이를 채우는 코드를 작성했습니다 . 지속적으로 업데이트됩니다.
 
Corvin85 :
그리고 ArrayResize를 통해 배열의 최대 인덱스 수를 설정하고 루프를 통해 실행합니다. 감사합니다. 하지만 모든 인덱스가 터키의 데이터로 막혔을 때 ArrayFree 를 통해 지우는 질문이 있습니다. 맞습니까? 아니면 그는 자신을 다시 쓸 것인가? 또는 24x 후에 모든 것이 완전히 중지됩니까? 물론 어리석은 질문에 대해 죄송합니다. 그러나 저에게 배열은 일반적으로 알 수 없는 기능을 가진 일종의 다크호스입니다.

배열 = 인덱스로 쉽게 액세스할 수 있도록 한 행에 배열된 간단한 변수 집합입니다. 인덱스 - 주기를 구성하기 위해 숫자로 배열 요소 에 액세스하기 위한 정수 변수입니다. 인덱스 = 숫자 카운터. ArrayFree = 어레이 파괴 - 낡은 집의 불도저와 같습니다. ArrayResize 를 사용하여 진실을 다시 복원할 수 있습니다. , ArrayResize 는 주거 지역 주변의 울타리입니다. 여기 울타리 뒤에 낯선 사람들이 있습니다. 거기에 올라가는 것은 금지되어 있습니다. 각 하우스에 여러 번 들어갈 수 있습니다( 배열의 요소에 새 값 할당). 배열은 여러 목적에 매우 간단하고 편리합니다. 그리고 배열을 두려워하는 사람 - 그것들 ... 따라서 가능한 빨리 정렬하는 것이 좋습니다.

 
//+------------------------------------------------------------------+ 
//| Проверка массива                                                 | 
//+------------------------------------------------------------------+ 
#property strict
int m[10];
int n;

void OnStart() 
{ 
  ArrayInitialize(m,7);          Вывод();  // Заполнить семерками
  ArrayResize(m,7);              Вывод();  // Удалить 3 последних элемента
  ArrayResize(m,9);              Вывод();  // Увеличить размер
  m[1]=1;  m[7]=1;               Вывод();  // Изменить 2 элемента
  for(n=0; n<9; n++) m[n]=n*n;   Вывод();  // Заполнить квадратами номеров
  ArrayCopy(m,m,0,2,7);          Вывод();  // Копирование со сдвигом
  ArrayResize(m,ArraySize(m)-2); Вывод();  // Удалить 2 последних элемента
} 

void Вывод()
{
  string s="";
  for(n=0; n<ArraySize(m); n++)
  s+="  " + string(m[n]);
  Alert(ArraySize(m), ":", s);
}
이러한 스크립트를 실행하고 연습하십시오.
 
Artyom Trishkin :

도움말에서:

고마워