오류, 버그, 질문 - 페이지 2469

 

알겠어) 그럼 해킹

 

MQL 4에서 MQL 5로 프로그램을 번역하고 있습니다.

그런 오류에 직면했습니다.

최대 m30의 기간에서 Period() 값이 올바르게 표시됩니다.

2019.05.22 17:45:38.628 TestStat (GBPUSD,M15) 4854 Period()=15
2019.05.22 17:46:08.267 TestStat (GBPUSD,M30) 4854 Period()=30

그리고 H1 기간부터 이해할 수 없는 값이 표시됩니다.

2019.05.22 17:31:07.446 TestStat (GBPUSD,H1) 4854 Period()=16385
2019.05.22 17:46:39.362 TestStat (GBPUSD,H4) 4854 Period()=16388
2019.05.22 17:46:55.552 TestStat (GBPUSD,D1) 4854 Period()=16408

2019년 5월 21일자 터미널 버전 빌드 2057입니다.

 

고맙습니다.

설명:

기간

현재 차트의 기간 값을 반환합니다.

ENUM_TIMEFRAMES 마침표 ();

반환 값

현재 차트의 기간 값을 저장하는 _Period 변수의 내용입니다. 값은 ENUM_TIMEFRAMES 열거형중 하나일 수 있습니다 .

또한보십시오

PeriodSeconds , 차트 기간 , 날짜 및 시간 , , 개체 가시성

==================

어쩐지 잘 안 되네요. 설명을 올바르게 작성해야 합니다. 포럼 대신 문제의 원인을 찾아야 합니다.

Period()는 다음과 같이 현재 시간 프레임의 값을 반환하지 않는 것으로 나타났습니다. 값은 ENUM_TIMEFRAMES 열거형 값 중 하나일 수 있습니다 .

그러나 완전히 다른 것입니다.

개발자는 언어 설명을 수정합니다.

 
코드를 제공한 TheXpert 에게 다시 한 번 감사드립니다.
ArrayResize 용량 МТ5(빌드 2057)에 대해 다음과 같은 결과가 있습니다.

 #import "msvcrt.dll"
   long memcpy( int &dst[], long &src, int cnt);
#import

#define PRINT(x) ; Print ( #x, ":" , string (x))

template < typename T>
struct ArrayStore
{
   long offset;
   T x[];
   
   int capacity() 
   {
       int ints[ sizeof (ArrayStore) / sizeof ( int )];
      memcpy(ints, this .offset, sizeof (ArrayStore));
       return ints[ 8 ];
   }
   
   int size() 
   {
       int ints[ sizeof (ArrayStore) / sizeof ( int )];
      memcpy(ints, this .offset, sizeof (ArrayStore));
       return ints[ 4 ];
   }
};

template < typename T>
int TestArrayCapacity(ArrayStore<T> &store, int size, int reserved_size = 0 ){
   ArrayResize (store.x, size, reserved_size);
   return store.capacity(); 
}

template < typename T>
int TestArraySize(ArrayStore<T> &store, int size, int reserved_size = 0 ){
   ArrayResize (store.x, size, reserved_size);
   return store.size(); 
}


void OnStart ()
{
   ArrayStore< int > store;
   
   PRINT( "TEST_ArrayCapacity" );
   
   PRINT(TestArrayCapacity(store, 100 , 0 )); 
   PRINT(TestArrayCapacity(store, 100 , 100 )); 
   PRINT(TestArrayCapacity(store, 101 , 100 )); 
   PRINT(TestArrayCapacity(store, 200 , 100 )); 
   PRINT(TestArrayCapacity(store, 201 , 100 )); 
   PRINT(TestArrayCapacity(store, 202 , 100 )); 
   PRINT(TestArrayCapacity(store, 100 ,   1 )); 
   PRINT(TestArrayCapacity(store, 100 , 400 )); 
   PRINT(TestArrayCapacity(store, 300 , 400 )); 
   PRINT(TestArrayCapacity(store, 301 , 600 ));
   PRINT(TestArrayCapacity(store, 302 , 600 ));
   PRINT(TestArrayCapacity(store, 303 , 600 ));
   PRINT(TestArrayCapacity(store, 100 ,   0 )); 
   PRINT(TestArrayCapacity(store, 100 , 100 )); 
   PRINT(TestArrayCapacity(store, 100 ,  - 1 )); 
   PRINT(TestArrayCapacity(store, 100 , 100 )); 
   PRINT(TestArrayCapacity(store, 105 , 100 )); 
}

결과:
 2019.05 . 22 17 : 00 : 50.249 Test_array_resize (EURUSD,H1)   TEST_ArrayCapacity:TEST_ArrayCapacity
2019.05 . 22 17 : 00 : 50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 100 , 0 ): 100
2019.05 . 22 17 : 00 : 50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 100 , 100 ): 100
2019.05 . 22 17 : 00 : 50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 101 , 100 ): 201
2019.05 . 22 17 : 00 : 50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 200 , 100 ): 201
2019.05 . 22 17 : 00 : 50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 201 , 100 ): 201
2019.05 . 22 17 : 00 : 50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 202 , 100 ): 302
2019.05 . 22 17 : 00 : 50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 100 , 1 ): 302
2019.05 . 22 17 : 00 : 50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 100 , 400 ): 302
2019.05 . 22 17 : 00 : 50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 300 , 400 ): 302
2019.05 . 22 17 : 00 : 50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 301 , 600 ): 302
2019.05 . 22 17 : 00 : 50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 302 , 600 ): 302
2019.05 . 22 17 : 00 : 50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 303 , 600 ): 903
2019.05 . 22 17 : 00 : 50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 100 , 0 ): 903
2019.05 . 22 17 : 00 : 50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 100 , 100 ): 903
2019.05 . 22 17 : 00 : 50.250 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 100 ,- 1 ): 100
2019.05 . 22 17 : 00 : 50.250 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 100 , 100 ): 100
2019.05 . 22 17 : 00 : 50.250 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 105 , 100 ): 205
 
Eugeni Neumoin :

설명:

현재 차트의 기간 값을 저장하는 _Period 변수의 내용입니다. 값은 ENUM_TIMEFRAMES 열거형중 하나일 수 있습니다 .

어쩐지 잘 안 되네요. 설명을 올바르게 작성해야 합니다. 포럼 대신 문제의 원인을 찾아야 합니다.

따라서 이 값이 분 단위 기간(4분에서와 같이)과 같다는 기록은 어디에도 없습니다.

https://www.mql5.com/en/articles/81

여기에서 링크된 기사가 시작됩니다.

Переход с MQL4 на MQL5
Переход с MQL4 на MQL5
  • www.mql5.com
Данная статья, построенная в форме справочника по функциям MQL4, призвана помочь переходу с MQL4 на MQL5. Для каждой функции языка MQL4 приведено описание и представлен способ ее реализации на MQL5, что позволит вам значительно ускорить перевод своих программ с MQL4 на MQL5. Для удобства функции разбиты на группы, как в документации по MQL4.
 
Igor Zakharov :

따라서 이 값이 분 단위 기간(4분에서와 같이)과 같다는 기록은 어디에도 없습니다.

https://www.mql5.com/en/articles/81

여기에서 링크된 기사가 시작됩니다.

다음과 같은 언어 설명이 있습니다. 값은 ENUM_TIMEFRAMES 열거형중 하나일 수 있습니다 .

아래의 언어 설명을 보십시오.

차트 기간

사전 정의된 모든 차트 기간에는 고유 식별자가 있습니다. PERIOD_CURRENT 식별자는 mql5 프로그램이 실행 중인 현재 차트 기간을 의미합니다.

ENUM_TIMEFRAMES

식별자

설명

PERIOD_CURRENT

현재 기간

PERIOD_M1

1 분

PERIOD_M2

2분

PERIOD_M3

3 분

PERIOD_M4

4분

PERIOD_M5

5 분

PERIOD_M6

6분

PERIOD_M10

10 분

PERIOD_M12

12분

PERIOD_M15

15 분

PERIOD_M20

20 분

PERIOD_M30

30 분

PERIOD_H1

1 시간

PERIOD_H2

2시간

PERIOD_H3

3 시간

PERIOD_H4

4 시간

PERIOD_H6

6 시간

PERIOD_H8

8시

PERIOD_H12

12 시간

PERIOD_D1

1 일

PERIOD_W1

일주

PERIOD_MN1

1 개월

=========================

그리고 설명 어디에도 이 값이 초 단위라고 나와 있지 않습니다.

설명이 모든 것을 말해야 합니다.

그리고 당신이 어떤 기사에 올라야 할 때, 그것은 매우 나쁩니다.

 
Sergey Dzyublik :
코드를 제공한 TheXpert 에게 다시 한 번 감사드립니다.
ArrayResize 용량 МТ5(빌드 2057)에 대해 다음과 같은 결과가 있습니다.
따라서 ArrayResize의 작업과 실제 용량에 대한 영향에 대한 결론은 다음과 같습니다.

1. 첫 번째 ArrayResize는 매우 중요하며 실제로 크기 + reserved_size를 고려하여 메모리를 할당하고 용량을 설정합니다.
2. 새로운 reserved_size 값을 사용한 ArrayResize의 모든 후속 실행 - 각각 할당된 메모리 및 용량에 영향을 미치지 않습니다.
3. 새로운 메모리 할당은 용량이 초과된 경우에만 발생하며 이 경우 다시 size + reserved_size를 사용하여 할당된 메모리의 양을 결정하고 새로운 용량을 설정합니다.
4. reserved_size < 0 값은 예약된 메모리를 크기 크기까지 해제합니다.
 
Eugeni Neumoin :

그리고 설명 어디에도 이 값이 초 단위라고 나와 있지 않습니다.

그래서 몇초만에 되는게 아니라...

 
Eugeni Neumoin :

다음과 같은 언어 설명이 있습니다. 값은 ENUM_TIMEFRAMES 열거형중 하나일 수 있습니다 .

아래의 언어 설명을 보십시오.

차트 기간

사전 정의된 모든 차트 기간에는 고유 식별자가 있습니다. PERIOD_CURRENT 식별자는 mql5 프로그램이 실행 중인 현재 차트 기간을 의미합니다.

ENUM_TIMEFRAMES

=========================

그리고 설명 어디에도 이 값이 초 단위라고 나와 있지 않습니다.

설명이 모든 것을 말해야 합니다.

그리고 일부 기사에 대해 더 많이 올라야 할 때 그것은 매우 나쁩니다.

그리고 이것이 몇 초 만에 값이라고 누가 말했습니까?

 
Eugeni Neumoin :

다음과 같은 언어 설명이 있습니다. 값은 ENUM_TIMEFRAMES 열거형중 하나일 수 있습니다 .

아래의 언어 설명을 보십시오.

차트 기간

사전 정의된 모든 차트 기간에는 고유 식별자가 있습니다. PERIOD_CURRENT 식별자는 mql5 프로그램이 실행 중인 현재 차트 기간을 의미합니다.

ENUM_TIMEFRAMES

식별자

설명

PERIOD_CURRENT

현재 기간

PERIOD_M1

1 분

PERIOD_M2

2분

PERIOD_M3

3 분

PERIOD_M4

4분

PERIOD_M5

5 분

PERIOD_M6

6분

PERIOD_M10

10 분

PERIOD_M12

12분

PERIOD_M15

15 분

PERIOD_M20

20 분

PERIOD_M30

30 분

PERIOD_H1

1 시간

PERIOD_H2

2시간

PERIOD_H3

3 시간

PERIOD_H4

4 시간

PERIOD_H6

6 시간

PERIOD_H8

8시

PERIOD_H12

12 시간

PERIOD_D1

1 일

PERIOD_W1

일주

PERIOD_MN1

1 개월

=========================

그리고 설명 어디에도 이 값이 초 단위라고 나와 있지 않습니다.

설명이 모든 것을 말해야 합니다.

그리고 여전히 일부 기사를 올라야 할 때 이것은 매우 나쁩니다.

enum 값에 절대 의존해서는 안 됩니다.

PeriodSeconds()를 사용합니다.