시간 문제()

 
안녕하세요 MQL4 커뮤니티입니다!

이것은 내 첫 번째 게시물입니다. 먼저, 저는 MQL 개발자가 아닙니다. 저는 EA 구축을 돕는 도구를 사용하는 트레이더입니다. 이 도구를 사용하면 일부 MQL 구조를 사용할 수 있지만 명시적 MQL 기능에서는 실행되지 않습니다. 단순히 MQL 코드를 받아서 MQL 기반 조건이 참/거짓인지 평가한 다음 OpenBuy, OpenSell, CloseBuy, CloseSell, DeletePendingBuy, DeletePendingSell 등과 같은 사용자 정의 함수를 실행합니다. 그러나 MQL 코드를 명시적으로 실행하지는 않습니다. 예를 들어, 인쇄 또는 주석 기능 을 사용하여 MT4의 차트 창에 표시할 항목을 얻을 수 있습니다(예: 하나의 예).

그래서 저는 MQL에 대해 조금 알고 있습니다. MQL은 EA를 구축하는 데 사용하는 EA 개발 도구를 사용하기에 충분합니다. 지금까지 이 도구를 사용하여 10개의 EA를 구축했고 그 중 7개는 비영리성으로 인해 포기했습니다. 이는 Excel에서 거래 시스템을 구축할 때 사용했던 성공적인 프로토타입 비율보다 약 30% 더 좋습니다. 나는 일반적으로 10개 중 7-8개의 아이디어가 예상만큼 수익성이 없을 것으로 예상하고 2-3개의 디자인은 최적화 프로세스를 시작할 만큼 충분히 수익성이 남습니다. 좋아, 나에 대해 그리고 내가 어떻게 굴러가는지에 대해 충분하다.

여기 내 문제가 있으며 도움을 받기 위해 올바른 위치에 왔기를 바랍니다!

거래를 마감하기 위해 이 코드를 실행하고 있습니다:[/b]

일() == 1 || 일() == 2 || 일() == 3 || 일() == 4 && TimeHour(TimeCurrent()) >=23 && TimeMinute(TimeCurrent()) >=57 || 일() == 5 && TimeHour(TimeCurrent()) >=21 && TimeMinute(TimeCurrent()) >=57

참고: 문제는 모든 거래가 월요일부터 목요일까지 23:57까지 열려 있다는 것입니다. 또한 모든 거래는 금요일 21:57까지 열려 있습니다.


또한 MQL 블록 [b]을 통해 이 코드를 실행하여 거래를 엽니다.[/b]

TimeHour(TimeCurrent()) == 00 && TimeMinute(TimeCurrent()) <= 05

참고: 00:00에서 00:05 사이에 열리는 유일한 거래는 테스터 시작 버튼을 클릭할 때 백 테스트의 첫 번째 거래입니다. 그 거래는 정확히 00:00에 열립니다. 그러나 다른 거래는 주 후반인 00:00에서 00:05 사이에 열리지 않습니다.

요약하자면:

- 00:00에 테스터 시작 버튼을 클릭하면 하나의 거래가 열립니다.
- 이후 23:57(월-목) 또는 21:57(금)에 거래가 종료되지 않습니다.
- 이후 00:00~00:05 사이에는 거래가 열리지 않습니다.

위에 표시된 모든 시간에는 사용 가능한 틱 흐름이 충분합니다. 따라서 Tester에서 사용하는 데이터에는 공백이 없었습니다.

도움을 주시면 감사하겠습니다. 이러한 거래가 코딩된 시간에 마감되지 않는 이유는 무엇입니까? 월요일부터 금요일까지 00:00 ~ 00:05 사이에 항상 거래 신호가 있는데도 거래가 실행되지 않는 이유는 무엇입니까?

고맙습니다!
cfx
 

무엇이 실행되고 있고 실행되지 않는지 알아보기 위해 어떤 디버깅 Print 문을 코드에 추가했습니까? 예를 들어, OrderClose()가 실패하거나 OrderClose()로 이어지는 코드입니까? 반환 값을 확인하고 관련 오류를 인쇄합니까?

함수 반환 값이란 무엇입니까? 어떻게 사용합니까?

Day()가 Strategy Tester에서 제대로 작동합니까? 그것이 작동하는지 테스트해야합니까? 대신 TimeDayOfWeek() 를 사용할 수 있습니다. .

 

>거래를 마감하기 위해 이 코드를 실행하고 있습니다.[/b]

Day() == 1 || Day() == 2 || Day() == 3 || Day() == 4 && TimeHour ( TimeCurrent ()) >= 23 && TimeMinute ( TimeCurrent ()) >= 57 || Day() == 5 && TimeHour ( TimeCurrent ()) >= 21 && TimeMinute ( TimeCurrent ()) >= 57

>참고: 문제는 모든 거래가 월요일부터 목요일까지 23:57까지 열려 있다는 것입니다. 또한 모든 거래는 금요일 21:57까지 열려 있습니다.

이것은 초보자에게 매우 흔한 실수입니다. 전체 논리 표현을 한 줄에 맞추려고 합니다. 디버깅은 불가능합니다.

비결은 테스트를 작은 조각으로 나누고 각 비트를 확인하는 것입니다( Print 문 또는 기타 사용).

아무 날이나 23:57 이후에 닫을 수 있습니까? 그 시험으로 요일에 대해 걱정할 필요가 없습니다. 하나의 테스트가 올바르게 작동하면 더 많은 모험을 할 수 있습니다. 그러나 디버깅을 위해 중간에 Print 문을 허용하려면 가능한 여러 줄을 사용하십시오. 작동하면 Print 문을 제거하지만 코드는 별도의 줄에 두십시오. 코드는 여러 줄로 작성될 때 실제로 더 효율적입니다(더 빠르게 실행됨).

 
  1. Day() == 1 || Day() == 2 || Day() == 3 || Day() == 4 && TimeHour ( TimeCurrent ()) >= 23 && TimeMinute ( TimeCurrent ()) >= 57 || Day() == 5 && TimeHour ( TimeCurrent ()) >= 21 && TimeMinute ( TimeCurrent ()) >= 57
    이 중 무엇을 의미 했습니까?
    Day() == 1 || Day() == 2 || Day() == 3 || ( Day() == 4 && TimeHour ( TimeCurrent ()) >= 23 ) && TimeMinute ( TimeCurrent ()) >= 57 || Day() == 5 && TimeHour ( TimeCurrent ()) >= 21 && TimeMinute ( TimeCurrent ()) >= 57
     ( Day() == 1 || Day() == 2 || Day() == 3 || Day() == 4 ) && TimeHour ( TimeCurrent ()) >= 23 && TimeMinute ( TimeCurrent ()) >= 57 || Day() == 5 && TimeHour ( TimeCurrent ()) >= 21 && TimeMinute ( TimeCurrent ()) >= 57
    항상 완전한 괄호를 사용하거나 단순화하고 자체 문서화
     #define HR2157 79020 // 21 * 3600 + 57 * 60
    #define HR2357 86220
    datetime now = TimeCurrent ();
    int       tod = now % 86400 ;
    bool      isFriday = TimeDayOfWeek (now) == 5 ;
    if (isFriday) int todClose = HR215700;
    else               todClose = HR235700
    if (now >= todClose) ...
    

  2. https://www.mql5.com/en/forum/127483 보고된 DayOfWeek()는 테스터에서 항상 5를 반환하므로 Timexxx() 버전만 사용합니다.
 
WHRoeder :
  1. 이 중 무엇을 의미 했습니까?
OP는 분명히 금요일을 제외한 모든 평일에 OR을 의미합니다. 분명히 그는 거래일이 끝나기 전에 강제 종료를 시도하고 있지만 금요일이 더 짧습니다. 그는 시간이 23:57 이후이면 항상 닫을 수 있기 때문에 4일의 OR을 사용하는 테스트가 중복된다는 것을 깨닫지 못했습니다. 금요일은 제외할 필요가 없습니다!
 
RaptorUK :

무엇이 실행되고 있고 실행되지 않는지 알아보기 위해 어떤 디버깅 Print 문을 코드에 추가했습니까? 예를 들어, OrderClose()가 실패하거나 OrderClose()로 이어지는 코드입니까? 반환 값을 확인하고 관련 오류를 인쇄합니까?

함수 반환 값이란 무엇입니까? 어떻게 사용합니까?

Day()가 Strategy Tester에서 제대로 작동합니까? 그것이 작동하는지 테스트해야합니까? 대신 TimeDayOfWeek() 를 사용할 수 있습니다. .


그런 목적으로 Print 문을 사용하지 않았습니다. 원래 게시물에 오타를 만들었습니다. 내가 사용하고 있는 도구는 인쇄 또는 주석과 같은 MQL 기능을 사용할 수 없습니다. 따라서 귀하의 답변에 영향을 미친 오타에 대해 사과드립니다.

그러나 테스터 저널을 쉽게 볼 수 있으며 EA가 해야 할 때(00:00) 거래를 준비하지 않고 있어야 할 때 거래의 마감을 인스턴스화하지 않는다는 것을 알 수 있습니다(월-목 23: 59, 또는 금 21:57). 기본적으로 테스터 런타임 시 EA 로드, 데모 계정에 대한 필수 정보를 볼 수 있으며 마지막으로 EA에서 사용하는 표시기의 모든 시간 프레임이 오류 없이 올바르게 로드되고 있음을 알 수 있습니다. 나는 일반적으로 내 EA에 어떤 종류의 오류도 발생하지 않습니다. 그리고 저는 항상 Multi-Time Frame EA를 일상적으로 테스트합니다.

Time() 함수에만 문제가 있는 것 같습니다.

열릴 수 있는 유일한 위치는 테스터 시작 버튼을 클릭한 후 EA가 보는 첫 번째 거래이므로 Print에서 나오는 출력에서 Day()가 작동하는지 여부를 알 수 없습니다. 논평. 그러나 무작위 테스트로 월요일~금요일 00:00에 위치 열기를 제어하는 코드 세그먼트에서 [b] TimeMinute(TimeCurrent()) <= 05 [/b] 행을 제거했습니다. 그렇게 했을 때 다음 코드가 설계된 대로 작동하기 시작했습니다.

일() == 1 || 일() == 2 || 일() == 3 || 일() == 4 && TimeHour(TimeCurrent()) >=23 && TimeMinute(TimeCurrent()) >=57 || 일() == 5 && TimeHour(TimeCurrent()) >=21 && TimeMinute(TimeCurrent()) >=57

이것은 실제로 Day()가 실제로 공제에 의해 작동하고 있음을 알려줍니다. 실제로 위치를 닫는 전체 코드 세그먼트가 작동합니다. 그러나 어떤 이유로 [b] TimeMinute(TimeCurrent()) <= 05 [/b]가 위치 열기를 제어하는 코드 세그먼트에서 사용되는 경우가 아닙니다. 그 아이러니는 나에게 의미가 없습니다. 왜 이것이 사실인지 이해할 수 없습니다.

감사해요!

cfx

 
dabbler :

>거래를 마감하기 위해 이 코드를 실행하고 있습니다.[/b]

>참고: 문제는 모든 거래가 월요일부터 목요일까지 23:57까지 열려 있다는 것입니다. 또한 모든 거래는 금요일 21:57까지 열려 있습니다.

이것은 초보자에게 매우 흔한 실수입니다. 전체 논리 표현을 한 줄에 맞추려고 합니다. 디버깅은 불가능합니다.

비결은 테스트를 작은 조각으로 나누고 각 비트를 확인하는 것입니다( Print 문 또는 기타 사용).

아무 날이나 23:57 이후에 닫을 수 있습니까? 그 시험으로 요일에 대해 걱정할 필요가 없습니다. 하나의 테스트가 올바르게 작동하면 더 많은 모험을 할 수 있습니다. 그러나 디버깅을 위해 중간에 Print 문을 허용하려면 가능한 여러 줄을 사용하십시오. 작동하면 Print 문을 제거하지만 코드는 별도의 줄에 두십시오. 코드는 여러 줄로 작성될 때 실제로 더 효율적입니다(더 빠르게 실행됨).


그건 그렇고, 답변을 주신 모든 분들께 감사드립니다!


닫기 제어가 작동합니다. Open Control에서 [b] TimeMinute(TimeCurrent()) <= 05 [/b]를 제거하면 실제로 작동합니다. 테스터 시작 버튼을 클릭한 후 실행된 맨 처음 위치는 실제로 23:57(월-목)에 닫힙니다. 문제는 Open Control이 설계( [b] TimeHour(TimeCurrent()) == 00 && TimeMinute(TimeCurrent()) <= 05 [/b]. [b] TimeMinute(TimeCurrent() <=5 [/b] 함수 를 온전성 검사로 제거하더라도.

코드를 최대한 간결하게 만드는 것이 최선의 대안이라고 생각했지만 각 기능, 세그먼트, 구성 요소 등을 확장하여 도움이 되는지 확인하겠습니다.


감사해요!

cfx

 
WHRoeder :
  1. 이 중 무엇을 의미 했습니까?
    항상 완전한 괄호를 사용하거나 단순화하고 자체 문서화
  2. https://www.mql5.com/en/forum/127483 보고된 DayOfWeek()는 테스터에서 항상 5를 반환하므로 Timexxx() 버전만 사용합니다.

내말은:

 ( Day() == 1 || Day() == 2 || Day() == 3 || Day() == 4 ) && TimeHour ( TimeCurrent ()) >= 23 && TimeMinute ( TimeCurrent ()) >= 57 || Day() == 5 && TimeHour ( TimeCurrent ()) >= 21 && TimeMinute ( TimeCurrent ()) >= 57


이 코드 세그먼트에 괄호가 누락된 것 같습니다. 저를 위해 수정해 주시면 감사하겠습니다. 내가 사용하는 도구는 괄호가 없을 때 알려주지만 어디에 있는지 알려주지는 않습니다.


감사해요!

 
dabbler :
OP는 분명히 금요일을 제외한 모든 평일에 OR을 의미합니다. 분명히 그는 거래일이 끝나기 전에 강제 종료를 시도하고 있지만 금요일이 더 짧습니다. 그는 시간이 23:57 이후이면 항상 닫을 수 있기 때문에 4일의 OR을 사용하는 테스트가 중복된다는 것을 깨닫지 못했습니다. 금요일은 제외할 필요가 없습니다!

금요일을 분리해야 합니다. 그렇지 않으면 월요일~목요일 마감 시간과 금요일 마감 시간 사이에 차이가 없습니다. 두 마감 시간은 단순히 발생한 시간이 아니라 발생한 요일 로 구분됩니다.

따라서 월요일 - 목요일 23:57, 금요일 21:57에 각각 마감해야 합니다. 월요일~목요일에 금요일 마감을 포함하면 모든 거래는 EA가 확인한 가장 빠른 시간인 21시 57분에 마감되며, 이는 월요일부터 목요일까지의 필수 마감 시간 2시간 전입니다.

귀하의 진술을 명확히 하십시오. 감사해요!

cfx

 

ㅋㅋㅋ!


MT4의 "시간" 기반 기능 대부분이 심각한 결함이 있다고 생각하기 시작했습니다.


내 말은, 내 위치 제어 논리를 다음과 같은 평범한 것으로 재설정하면 TimeHour(TimeCurrent()) == 23 && TimeHour(TimeCurrent()) == 59이고 단독 거래를 전혀 마감할 수 없습니다. (EA는 단순히 코드를 무시합니다!) 그렇다면 MT4에는 이러한 유형의 기능과 관련하여 수정해야 할 몇 가지 문제가 있다고 말하고 싶습니다.


나는 또한 다음을 사용하여 일련의 테스트를 실행했습니다. DayOfWeek() != 0 && DayOfWeek() !=, 월요일부터 금요일까지 단 한 번의 거래도 열리지 않았습니다! 사실 고독한 거래가 전혀 열리지 않았습니다. 그러나 모든 시간 기반 기능을 완전히 제거했을 때 EA는 어떻게 되었습니까? 물론 오류 없이 설계된 대로 실행됩니다. 저는 MQL 개발자는 아니지만 논리적 구성을 개발하는 데 정말 능숙하며 시스템 문제를 감지할 때 이를 감지할 수 있습니다. MetaQuotes가 Time() 함수, 마침표에 문제가 있음을 감지합니다. 나는 그렇게 쉽게 코딩된 것에 대해 이렇게 단서가 될 수 없으며 MQL로 코딩을 하는 다른 사람들이 MT4의 시간 기반 기능에 어려움을 겪는 것을 보았습니다.

문제가 무엇인지 정확히 모르지만 Opening Control 논리(모든 거래의 시작을 제어하는 코드)에서 TimeMinute(TimeCurrent()) <= 05를 제거하면 첫 번째 거래만 얻습니다. 정확한 시간에 마감하기 위해 정확한 개시 제어 로직에 의해 구동되는 다른 모든 거래는 이후에 EA에서 간단히 무시됩니다. 그러면 기능 자체에 시스템적으로 뭔가 문제가 있음을 압니다.

코드가 더 간단할 수 없습니다! 나는 EA에게 00:00에서 00:05 사이에 망할 거래를 열도록 지시하고 있습니다. 코딩하기 어렵지 않습니다. 여섯 살짜리 아이가 그것을 코딩할 수 있습니다. [b]TimeHour(TimeCurrent()) == 00 && TimeHour(TimeCurrent()) <= 05[/b]입니다.


거기. 방금 코딩했습니다. 그런 다음 해당 코드를 사용 중인 도구에 놓으면 도구에서 코드의 구문이 정확하다고 알려줍니다! 좋아, 이제 무엇을? 글쎄, 나는 MILLIONTH 시간 동안 망할 .ex4 파일을 컴파일하고 M4 Tester를 실행합니다. 좋아, 이제 무엇을? 음, 첫 번째 거래가 00:00에 시작됩니다. 대단해, 그렇지? 노오오오! 왜요? 월요일 23:59에 빌어먹을 자리가 아직 열려 있기 때문입니다. 그리고 뭐? 음, 바로 다음 거래 세션(다음 D1 막대)의 00:00에 좋은 ole [b]TimeHour(TimeCurrent()) == 00 && TimeHour(TimeCurrent()) <= 05[/b] 폐쇄 통제가 실패한 곳, 맞습니까? 잘못된! 왜요? 왜냐하면 00:00부터 00:05까지 EA는 미친 거래를 열지 않기 때문입니다!!!

나는 이 간단한 코드에 2일을 보냈고 아무도 그것이 작동하지 않는 이유를 말할 수 없었습니다. 심지어 MQL 전문가도 아닙니다! 이것은 MetaQuotes에 문제가 있음을 알려줍니다.

자, 이제 환기를 마쳤습니다. 그것은 억눌린 좌절의 이틀 분량이었고 나는 그것을 풀어야 했습니다.

저는 EA에 문제가 없었고 W1과 MN을 제외한 모든 시간대를 사용하여 상당히 정교한 디자인을 만들 수 있었습니다. 내 모든 EA는 처음부터 구축하고 조사한 iCustom 디자인을 사용 합니다.

기름을 바르고 잘 튜닝된 V8 엔진처럼 돌다가 갑자기 Time() 함수를 사용하기 시작하고 모든 지옥이 풀린다? 그것에 대해 뭔가가 옳지 않습니다. 가능한 가장 간단한 방법으로 이러한 시간 기반 기능을 사용하고 있는데 여전히 작동하지 않습니까? 이런 일에 48시간은 나에게 엄청난 시간이었다. 답답하고 답답해서 가능하다면 '시간' 없이 살도록 노력하겠다.

Time() 함수를 중심으로 거래 논리를 개발하는 방법을 배워야 합니다.

언리얼.

 

CFx 2012.05.31 03:41

ㅋㅋㅋ!


MT4의 "시간" 기반 기능의 대부분은 심각한 결함이 있다고 생각하기 시작했습니다.


내 말은, 내 위치 제어 논리를 다음과 같은 평범한 것으로 재설정하면 TimeHour(TimeCurrent()) == 23 && TimeHour(TimeCurrent()) == 59이고 단독 거래를 전혀 마감할 수 없습니다. (EA는 단순히 코드를 무시합니다!) 그렇다면 MT4에는 이러한 유형의 기능과 관련하여 수정해야 할 몇 가지 문제가 있다고 말하고 싶습니다.


나는 또한 다음을 사용하여 일련의 테스트를 실행했습니다. DayOfWeek() != 0 && DayOfWeek() !=, 월요일부터 금요일까지 단 한 번의 거래도 열리지 않았습니다! 사실 고독한 거래가 전혀 열리지 않았습니다. 그러나 모든 시간 기반 기능을 완전히 제거했을 때 EA는 어떻게 되었습니까? 물론 오류 없이 설계된 대로 실행됩니다. 저는 MQL 개발자는 아니지만 논리적 구성을 개발하는 데 정말 능숙 하며 시스템 문제를 감지할 때 이를 감지할 수 있습니다. MetaQuotes가 Time() 함수, 마침표에 문제가 있음을 감지합니다. 나는 그렇게 쉽게 코딩된 것에 대해 이렇게 단서가 될 수 없으며 MQL로 코딩을 하는 다른 사람들이 MT4의 시간 기반 기능에 어려움을 겪는 것을 보았습니다.

문제가 무엇인지 정확히 모르지만 Opening Control 논리(모든 거래의 시작을 제어하는 코드)에서 TimeMinute(TimeCurrent()) <= 05를 제거하면 첫 번째 거래만 얻습니다. 정확한 시간에 마감하기 위해 정확한 개시 제어 로직에 의해 구동되는 다른 모든 거래는 이후에 EA에서 간단히 무시됩니다. 그러면 기능 자체에 시스템적으로 뭔가 문제가 있음을 압니다.

코드가 더 간단할 수 없습니다! 나는 EA에게 00:00에서 00:05 사이에 망할 거래를 열도록 지시하고 있습니다. 코딩하기 어렵지 않습니다. 여섯 살짜리 아이가 그것을 코딩할 수 있습니다. [b] TimeHour(TimeCurrent()) == 00 && TimeHour(TimeCurrent()) <= 05 [/b]입니다.


거기. 방금 코딩했습니다. 그런 다음 해당 코드를 사용 중인 도구에 놓으면 도구에서 코드의 구문이 정확하다고 알려줍니다! 좋아, 이제 무엇을? 글쎄, 나는 MILLIONTH 시간 동안 망할 .ex4 파일을 컴파일하고 M4 Tester를 실행합니다. 좋아, 이제 무엇을? 음, 첫 번째 거래가 00:00에 시작됩니다. 대단해, 그렇지? 노오오오! 왜요? 월요일 23:59에 빌어먹을 자리가 아직 열려 있기 때문입니다. 그리고 뭐? 음, 바로 다음 거래 세션(다음 D1 막대)의 00:00에 좋은 ole [b]TimeHour(TimeCurrent()) == 00 && TimeHour(TimeCurrent()) <= 05[/b] 폐쇄 통제가 실패한 곳, 맞습니까? 잘못된! 왜요? 왜냐하면 00:00부터 00:05까지 EA는 미친 거래를 열지 않기 때문입니다!!!

나는 이 간단한 코드에 2일을 보냈고 아무도 그것이 작동하지 않는 이유를 말할 수 없었습니다. 심지어 MQL 전문가도 아닙니다! 이것은 MetaQuotes에 문제가 있음을 알려줍니다.

자, 이제 환기를 마쳤습니다. 그것은 억눌린 좌절의 이틀 분량이었고 나는 그것을 풀어야 했습니다.

저는 EA에 문제가 없었고 W1과 MN을 제외한 모든 시간대를 사용하여 상당히 정교한 디자인을 만들 수 있었습니다. 내 모든 EA는 처음부터 구축하고 조사한 iCustom 디자인을 사용합니다.

기름을 바르고 잘 튜닝된 V8 엔진처럼 돌다가 갑자기 Time() 함수를 사용하기 시작하고 모든 지옥이 풀린다? 그것에 대해 뭔가가 옳지 않습니다. 가능한 가장 간단한 방법으로 이러한 시간 기반 기능을 사용하고 있는데 여전히 작동하지 않습니까? 이런 일에 48시간은 나에게 엄청난 시간이었다. 답답하고 답답해서 가능하다면 '시간' 없이 살도록 노력하겠다.

Time() 함수를 중심으로 거래 논리를 개발하는 방법을 배워야 합니다.

언리얼.

ㅋㅋㅋ. 당신은 비현실적인 사람입니다. 이 코드는 ...

 if ( TimeHour ( TimeCurrent ()) == 00 && TimeHour ( TimeCurrent ()) <= 05 )

... true를 반환하지 않습니다.

당신은 "당신의" 논리적 구조를 더 발전시켜야 하는 사람입니다.

그리고 이것을 구성 ...

 if ( TimeHour ( TimeCurrent ()) >= 00 && TimeHour ( TimeCurrent ()) <= 05 )