[경고, 주제 닫힘!] 포럼을 어지럽히지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 당신 없이는 어디에도 없습니다. - 페이지 426

 
ikatsko >> :

안녕하세요! 날짜가 아니라 마지막 막대의 수로 결정된 기간 동안 전략 테스터에서 최적화(또는 테스트)를 구성하는 방법은 무엇입니까? 주어진 막대 수에 의해 결정되고 TimeCurrent()를 기반으로 하는 Expert Advisor에서 시간 제한기를 설정하려는 시도는 아무 것도 제공하지 않았습니다.


하지만:

날짜시간시간현재 ( )

1970년 1월 1일 00:00 이후의 마지막으로 알려진 서버 시간(마지막 견적 도착 시간)을 초 단위로 반환합니다.

참고: 테스트할 때 마지막으로 알려진 서버 시간이 시뮬레이션됩니다 .


옵티마이저가 작동하는 시간은 "사용 날짜:"라는 문구가 있는 테스터 창에서만 설정되는 것으로 나타 났습니다 . 누군가 트릭을 알고 있을까요?

하루 안에 거래 시간을 설정한다는 뜻인가요?

그렇다면

 //begin
extern string      Торгуемый_диапазон   =    "В часах" ;
extern int         начало = 8 ;
extern int         окончание = 20 ;


//B start

if ( Hour ( ) > = начало & & Hour ( ) < окончание ) //если час больше или = 8, а так же если час меньше 20, торгуем
{
//условия
}
 
costy_ >> :

하루 안에 거래 시간을 설정한다는 뜻인가요?

그렇다면


현재 시간에 가까운 짧은 시간 간격으로 EA의 매개변수를 최적화하고 싶습니다. 전략 테스터를 사용하면 최적화 프로세스가 시작되고 종료되는 날짜를 설정할 수 있습니다. TF가 15분과 같으면(예를 들어) 하루에 96개의 막대가 있습니다(이는 테스터를 설정할 수 있는 최소값입니다). 그리고 그것은 나에게 많은 것입니다. 지난 2시간 동안 TF를 최적화하고 싶습니다. 예를 들어 8마디에서.


EA에 다음 조각을 삽입했습니다.

외부 intHistory=100; //EA가 작동하는 막대의 기록
StartDateTime=TimeCurrent()-History*Period()*60;
if(TimeCurrent()<StartDateTime) // 시작 시간이 도래하지 않았습니다.
{
Alert("시작 시간이 오지 않았습니다. Expert Advisor가 작동하지 않습니다.",": ",Symb,", ",Period());
반품; // start()에서 종료

}

그리고 전략 테스터의 EA가 StartDateTime보다 먼저 작동하지 않을 것이라고 가정했습니다. 하지만!

 
ikatsko >> :

현재 시간에 가까운 짧은 시간 간격으로 EA의 매개변수를 최적화하고 싶습니다. 전략 테스터를 사용하면 최적화 프로세스가 시작되고 종료되는 날짜를 설정할 수 있습니다. TF가 15분과 같으면(예를 들어) 하루에 96개의 막대가 있습니다(이는 테스터를 설정할 수 있는 최소값입니다). 그리고 그것은 나에게 많은 것입니다. 지난 2시간 동안 TF를 최적화하고 싶습니다. 예를 들어 8마디에서.

 //begin
extern string      Торгуемый_диапазон   =    "В часах" ;
extern int         начало = 22 ;
extern int         окончание = 0 ;


//B start

if ( Hour ( ) > = начало & & Hour ( ) < окончание ) //на интервале меж 22:00 - 00:00
{
//условия
}

정수 시간 ( )
프로그램이 시작된 순간에 마지막으로 알려진 서버 시간의 현재 시간(0,1,2,..23)을 반환합니다(이 값은 프로그램 실행 중에 변경되지 않음).

참고: 테스트할 때 마지막으로 알려진 서버 시간이 시뮬레이션됩니다.


테스터는 TF M1을 지원하고 막대에 부착하지 말고 시간에 부착하십시오. 아마도 이것도 필요할 것입니다.

 
costy_ >> :

정수 시간 ( )
프로그램이 시작된 시간에 마지막으로 알려진 서버 시간의 현재 시간(0,1,2,..23)을 반환합니다(이 값은 프로그램 실행 중에 변경되지 않음).

참고: 테스트할 때 마지막으로 알려진 서버 시간이 시뮬레이션됩니다.


테스터는 TF M1을 지원하고 막대에 부착하지 말고 시간에 부착하십시오. 아마도 이것도 필요할 것입니다.

구문: 테스트할 때 서버의 마지막으로 알려진 시간이 시뮬레이션되고 TimeCurrent ()에 표시되지만 작동하지 않습니다. 옵션은 좋은데 작동하는지 확인해야 합니까? 둘째, TF를 변경할 때 "시작"과 "끝" 숫자를 적절하게 인식하기 위해 코드 조각을 변경하거나 어떤 TF에서 작동하는지 인식해야 합니다. 셋째, 결국, 바로 번호를 다시 설정하는 것이 훨씬 더 편리합니다. 제 생각에는 이 "시작"을 수동으로 계산할 필요가 없습니다. 우리는 MQL 거래에서 바! 그리고 마지막으로: 내가 준 코드가 왜 나쁜가요? (전략 테스터에서 작동하지 않는 것을 제외하고. 즉, 이것은 내 질문입니다)

 
costy_ >> :

정수 시간 ( )
프로그램이 시작된 순간에 마지막으로 알려진 서버 시간의 현재 시간(0,1,2,..23)을 반환합니다(이 값은 프로그램 실행 중에 변경되지 않음).

참고: 테스트할 때 마지막으로 알려진 서버 시간이 시뮬레이션됩니다.


테스터는 M1 TF를 지원하고, 막대에 묶이지 않고, 시간에 묶이며, 아마도 이것도 필요합니다 .

 extern int History = 100 ; //История в барах, на которой работает советник
StartDateTime = TimeCurrent ( ) - History * Period ( ) * 60 ; //...=datetime - int*int*int (допустим 1265996665 - 100 * 15 * 60 это не есть интересующее время)

Alert ( "TimeCurrent()    " + TimeCurrent ( ) + " < StartDateTime    " + StartDateTime ) ; //...проверим соотношение datetime 

if ( TimeCurrent ( ) < StartDateTime ) // Время старта не наступило...
{
Alert ( "Время старта не наступило. Эксперт не работает." , ": " , Symb , ", " , Period ( ) ) ;
return ; // Выход из start()

} 
 
costy_ >> :

일종의:

datetime은 날짜 및 시간이며 1970년 1월 1일 0000 이후의 초 수를 포함하는 부호 없는 정수 입니다.

그리고

색상 및 날짜/시간 데이터 유형은 정수로 표시됩니다 . 부동 소수점 유형과 함께 정수 유형을 산술(숫자) 유형이라고 합니다.

그렇지 않은 경우이 상황에서 빠져 나오는 방법.

그러나 숫자 형식에 대한 힌트를 주셔서 감사합니다. 검색 방향이 있습니다. 해결책이 있다면 감사하겠습니다.

 

실제로 테스터에서는 TimeCurrent() 대신 Time[0]을 사용하는 것이 좋습니다.

이제 테스터의 TimeCurrent()(테스터가 아닌)가 마지막 견적이 나온 시간을 알려줄 것입니다.


그러면 밝혀질 것이다

외부 intHistory=100; //EA가 작동하는 막대의 기록
StartDateTime=시간[기록];
if(Time[0] < StartDateTime) // 시작 시간이 도래하지 않았습니다.
{
Alert("시작 시간이 오지 않았습니다. Expert Advisor가 작동하지 않습니다.",": ",Symb,", ",Period());
반품; // start()에서 종료
}

 
ikatsko >> :

일종의:

datetime은 날짜 및 시간이며 1970년 1월 1일 0000 이후의 초 수를 포함하는 부호 없는 정수 입니다.

그리고

색상 및 날짜/시간 데이터 유형은 정수로 표시됩니다 . 부동 소수점 유형과 함께 정수 유형을 산술(숫자) 유형이라고 합니다.

그리고 그렇지 않은 경우이 상황에서 빠져 나오는 방법.

하지만 숫자 형식에 대한 힌트를 주셔서 감사합니다. 검색 방향이 있습니다. 해결책이 있다면 감사하겠습니다.

뭐, 지난번 경고를 통한 댓글에서 오류를 표시했습니다.

도움말에는 "참고: 테스트할 때 마지막으로 알려진 서버 시간이 시뮬레이션됩니다."라고 나와 있습니다. 그러나 모델링되지 않은 경우 도움말 편집기에 대한 모든 질문이 있습니다.

확인하고 버그를 발견했습니다...

우리는 논리의 추가 방향을 모르기 때문에 완성된 솔루션만 알 수 있습니다.

왜 이렇게 글이 많은지 이해가 안가네요.

StartDateTime=TimeCurrent()-History*Period()*60;

모든 것이 훨씬 쉽게 완료되면?

 
costy_ >> :

우리는 논리의 추가 방향을 모르기 때문에 완성된 솔루션만 알 수 있습니다.

이전 답변에서 귀하의 결정에 전적으로 동의합니다. 데이터 형식 비호환성입니다! 기성 솔루션에 대한 요청은 형식 변환 문제를 해결하는 것으로 귀결됩니다. 그러나 분명히 MQL4에는 그러한 옵션이 없습니다. 그리고 이제 나는 다음에서 제기한 질문의 해결책을 봅니다. 연초부터 일일 TF의 43번째 막대. 내 Expert Advisor를 60개 막대로 최적화하고 싶습니다. 이것은 일일 시간대에 테스터가 전년도의 365-(60-43)=348일(막대)부터 작업을 시작해야 함을 의미합니다. 저것들. TimeDayOfYear(TimeCurrent()) (그것은 int입니다!)을 가져와 348과 비교해야 합니다. 분명히, 연도(과거)의 값도 고려해야 합니다. 일반적으로 모든 것을 이해했다고 생각합니다. 구현하기만 하면 됩니다. 이전 시간 또는 아마도 전날을 넘어설 많은 수의 막대(예: 5분)를 테스트해야 하는 작은 시간 프레임에서는 훨씬 더 어려울 것입니다.

 

당신의 모든 문제는 작업을 설정하고 다른 사람들에게 명확하게 공식화하는 것입니다 .. 나는 솔직히 당신이 테스트해야 할 시간부터 몇시까지 이해하지 못했습니다 ..

60개의 막대로 시작해야 하는 경우 시간을 들여

int startTime = iTime(NULL, PERIOD_D1 , N); // N - 일일 TF에서 현재 순간의 막대 번호

사유: