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

 

여러분, 안녕하세요!

초보자가 클래스에서 배열을 사용하는 것을 이해할 수 있도록 도와주세요. 문제를 나타내기 위해 키 코드를 작은 조각으로 잘라냅니다.

 class base
{
protected :
int Stf_ZZ_Handle;
double Stf_ZZ_Val[];
public :
void InitArray()
  {
   Stf_ZZ_Handle= iCustom ( _Symbol , _Period , "Examples\\ZigZag" , 12 , 0 , 0 );
   ArraySetAsSeries (Stf_ZZ_Val, true );
   CopyBuffer (Stf_ZZ_Handle, 0 , 0 , 200 ,Stf_ZZ_Val);
   Print ( "array[0]= " ,Stf_ZZ_Val[ 0 ]);
  }
};
class second : public base
  {
    public :
    void Printer() { Print ( "array[0]= " ,Stf_ZZ_Val[ 0 ]);}
  };
int OnInit ()
  {
//---
base Cbase;
second Csecond;
Cbase.InitArray();
Csecond.Printer();
//---
   return ( 0 );
  }

실행할 때 상속인 클래스의 라인에서 Array out of range 오류가 발생하고 상위 클래스에서 예상되는 0을 얻습니다.

2012.02.13 00:41:25 2011.01.01 00:00:00 'test1.mq5'의 범위를 벗어난 배열(29,36)
2012.02.13 00:41:25 2011.01.01 00:00:00 배열[0]= 0.0

   void Printer() { Print ( "array[0]= " ,Stf_ZZ_Val[ 0 ]);}

내가 알기로는 배열을 상속인 클래스로 잘못 전송(또는 액세스)하지만 이것이 처리될 때 일반 변수에는 오류가 없습니다.

내가 무엇을 잘못하고 있지?

 

최근에 *.mq5 파일을 시작할 때 다음과 같은 메시지를 자주 봅니다.

무엇이 문제가 될 수 있습니까?

 
Radix :

여러분, 안녕하세요!

base Cbase;
second Csecond;
Cbase.InitArray();
Csecond.Printer();

내가 무엇을 잘못하고 있지?

보세요, 두 번째 줄에서 선언할 때 "second Csecond;" InitArray() 메서드가 호출되지 않았습니까? 동시에 Csecond 개체 자체가 이미 생성되었습니다. 따라서 네 번째 줄에서 "Csecond.Printer () ;" 메서드를 호출하면 호출이 초기화되지 않고 크기가 조정되지 않은 배열 Stf_ZZ_Val[]로 이동합니다.

 
테스트 중에 시작 날짜(MT4에서와 같이)의 사용 가능한 기록 막대 1000개 제한이 제거되었는지 알려주실 수 있습니까?
 
muallch :

테스트 중에 시작 날짜(MT4에서와 같이)의 사용 가능한 기록 막대 1000개 제한이 제거되었는지 알려주실 수 있습니까?

무슨 말인지 설명해?

상위 5개 항목에는 테스트 시작 시점부터 전년도 데이터가 로드됩니다. 즉, 2012.02.01부터 테스트하는 경우 데이터는 2011.01.01부터 로드됩니다.

예외는 일, 주 및 월에 테스트하는 것입니다. 거기에서 데이터 시작 계산은 테스트 시작 전에 100개의 막대가 있어야 할 필요성에서 수행됩니다.

 
stringo :

무슨 말인지 설명해?

시작 시, 예. 2011.01.01부터 최소 3000개의 막대가 있는 일일 기록이 필요합니다. 저것들. 테스트에 필요한 것보다 의도적으로 더 긴 기간을 설정하고 프로그래밍 방식으로 "시작점"을 추적해야 합니다. 테스트할 때 전체(또는 요청 시) 기록을 제공하는 데 어려움은 무엇입니까?
 
또한 테스트 중이 아니라 실제 자동 거래에서 기록의 가용성에 대한 질문이 발생합니다. 이 경우 어떻게 해야 합니까? 테스터는 바보가 될 수 있습니다 ...
 
muallch :
시작 시, 예. 2011.01.01부터 최소 3000개의 막대가 있는 일일 기록이 필요합니다. 저것들. 테스트에 필요한 것보다 의도적으로 더 긴 기간을 설정하고 프로그래밍 방식으로 "시작점"을 추적해야 합니다. 테스트할 때 전체(또는 요청 시) 기록을 제공하는 데 어려움은 무엇입니까?

어려움이 없습니다. 대부분의 사용자가 이해할 수 없고 많은 경우에 잘못 사용되는 추가 확인란을 테스트 설정 에 도입하고 싶지 않았습니다.

더 긴 기간을 설정하는 것은 정상적인 결정입니다.

또 다른 솔루션이 있습니다 - 월 단위로 테스트를 주문하고 일일 지표 및 가격 데이터를 사용합니다(즉, PERIOD_CURRENT 대신 PERIOD_D1을 명시적으로 설정).

 
muallch :

또한 테스트 중이 아니라 실제 자동 거래에서 기록의 가용성에 대한 질문이 발생합니다. 이 경우 어떻게 해야 합니까? 테스터는 바보가 될 수 있습니다 ...
사용 가능한 모든 기록을 다운로드할 수 있습니다. 데이터 액세스 구성에 대한 문서 보기
 

설명 감사합니다!

추구: 인터넷을 통해 원격 에이전트로 테스트 중입니다. 일일 시가 로 테스트하는 경우 상담원에게 전체 1분 기록이 표시되는 이유는 무엇입니까? 테스트 시작 전 준비 시간은 예를 들어 1시간 정도입니다. 10-100 메가 비트 파이프가있는 사람들에게 좋으며 여기에 비참한 메가 비트에 앉아 있습니다 ...

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы - Документация по MQL5