포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 767

 
tuner :

바로 답이 보이지 않았습니다. 글쎄요, 솔직히 말해서, 나는 당신이 이것에 혼란이 없다고 주장하는 당신이 의미하는 바를 잘 이해하지 못했습니다.

즉, " StringToTime() 함수가 경과된 초를 계산하는 시간은 중요하지 않습니다"?

사실 이 함수는 일반적으로 왼쪽 날짜 (로컬 PC의 날짜가 왼쪽 날짜라고 생각합니다)를 취하여 브로커 서버의 현재 시간과 비교합니다. 왜 이것이 중요하지 않을까요?

위의 스크린샷에서 주석은 로컬 컴퓨터의 시간이 브로커의 시간보다 1시간 빠르다고 말합니다. 즉, GMT 이동이 더 큽니다. X시간이 적다면 금요일쯤에 내가 쓴 경우처럼 중요할 것입니다.

그리고 거래 시간이 끝날 무렵. 브로커가 거래일이나 주를 종료할 때 StringToTime() 함수에 문제가 되지 않아야 한다고 생각합니다...

나는 다른 설명이 없습니다.

모스크바의 현재 시간이 11:40이면 1970년 1월 1일부터 현재 시간 까지 XXX초가 지난 것입니다.

예를 들어 런던에 있을 때 11시 40분이면 초 수는 지금 모스크바에서와 같을 것입니다. 1970년 1월 1일 런던이 현재 시간만큼 늦었기 때문입니다. 비교는 지정된 시간이 아니라 경과된 시간(초)입니다.

1970년 1월 1일 00:00:00부터 초를 계산하는 공식을 작성해 보세요.

짧은 기간 동안 그러한 공식이 있을 것입니다. 이번 달 초부터 6*24*60*60 + 11*60*60 + 59*60 + 현재 초 값이 당신이 보고 있는 시계를 지나갔습니다.

 

비교가 70년 이후 경과된 초 수를 기반으로 한다는 것이 분명하지만 이 초 수에는 날짜와 시간 모두가 고려됩니다.

실제로 최근에 겪었던 문제의 단순화를 예로 들겠습니다.

작업: 금요일이 오면 문자열 변수 "21:30"을 고려하여 이날 거래 종료 시간(날짜/시간)을 계산합니다.

내 원래 솔루션은 다음과 같습니다.

 datetime EndTrading;

if (TimeDayOfWeek( TimeCurrent ())== 5 )     // если сейчас пятница, например возьмем сегодняшний день, первый тик 2014.11.07 00:00
  EndTrading= StringToTime ( "21:30" );     // подразумевается что тут должно быть время пятницы...

if (TimeDayOfWeek( TimeCurrent ())== 5 )     // если настала пятница
   if ( TimeCurrent ()>EndTrading)           // и время удовлетворяет условию
     Print ( "Настала пятница и текущее время больше чем 21:30" );

이제 농담입니다. 코드에 지정된 인쇄는 금요일에 팝업되지만 21:30 이후가 아니라 첫 번째 눈금의 00:00에 나타납니다.

브로커의 서버에서 금요일이었을 때 시간 이동이 다르기 때문에 내 로컬 컴퓨터에서는 여전히 목요일이었습니다.

테스터에서 모든 것이 정상이며 금요일 21:30 이후에 인쇄가 팝업됩니다. 글쎄, 혼란스럽지 않습니까?

 
tuner :

비교가 70년 이후 경과된 초 수를 기반으로 한다는 것이 분명하지만 이 초 수에는 날짜와 시간 모두가 고려됩니다.

실제로 최근에 겪었던 문제의 단순화를 예로 들겠습니다.

작업: 금요일이 오면 문자열 변수 "21:30"을 고려하여 이날 거래 종료 시간(날짜/시간)을 계산합니다.

내 원래 솔루션은 다음과 같습니다.

이제 농담입니다. 코드에 지정된 인쇄는 금요일에 팝업되지만 21:30 이후가 아니라 첫 번째 눈금의 00:00에 나타납니다.

브로커의 서버에서 금요일이었을 때 시간 이동이 다르기 때문에 내 로컬 컴퓨터에서는 여전히 목요일이었습니다.

테스터에서 모든 것이 정상이며 금요일 21:30 이후에 인쇄가 팝업됩니다. 글쎄, 그것은 혼란이 아닌가?

확실히 혼란. 머리에 혼란만 있을 뿐입니다. TimeToString ("21:30")은 21:30:00부터 다음 날 21:29:59까지의 현재 날짜를 제공합니다. 코드의 주석을 수정하겠습니다.

 datetime EndTrading;

if (TimeDayOfWeek( TimeCurrent ())== 5 )     // если сейчас пятница, от текущего времени. Наступит когда по времени сервера будет 00:00
  EndTrading= StringToTime ( "21:30" );     // А тут в 00:00 устанавливается четверг 21:30 потому, что это время пятницы ещё далеко.

if (TimeDayOfWeek( TimeCurrent ())== 5 )     // если настала пятница
   if ( TimeCurrent ()>EndTrading)           // А тут условие если (текущее время больше чем четверг 21:30)
   {
     Print ( " EndTrading = ", TimeToString ( EndTrading ) ); // Посмотри что будет напечатано.
   }


그리고 이 코드는 올바르게 작동할 것입니다

 if (TimeDayOfWeek( TimeCurrent ()) == 5 && TimeCurrent () >= StringToTime ( "21:30" ))
Print ( "Настала пятница и текущее время больше чем 21:30" );
 
ikatsko :
하나의 노트북에는 2개의 MT4 터미널이 있습니다. 하나는 소수점 이하 4자리이고 다른 하나는 소수점 이하 5자리입니다. 동시에 첫 번째 105/0kb의 트래픽과 두 번째 3450/0kb의 트래픽. 첫 번째는 프로세서를 6% 충돌시키고 두 번째는 39% 충돌시킵니다. 문제가 무엇입니까? 이것이 일반적으로 표준입니까?
네.
 

알렉세이비크

컴퓨터의 날짜를 2000으로 변경했습니다.

이 스크립트를 실행했습니다:

 input string time= "21:30" ;

Comment ( "TimeCurrent() = " , TimeCurrent (), "\n" ,
"TimeLocal() = " , TimeLocal (), "\n" ,
"StringToTime(" ,time, ") = " , StringToTime (time));

그리고 받은:

따라서 StringToTime() 함수는 로컬 컴퓨터에서 날짜를 가져옵니다.

 
tuner :

알렉세이비크

컴퓨터의 날짜를 2000으로 변경했습니다.

이 스크립트를 실행했습니다:

그리고 받은:

따라서 StringToTime() 함수는 로컬 컴퓨터에서 날짜를 가져옵니다.

그래서 뭐??? 적어도 달에서 시간이 걸리면 "from and to" XXX초가 지났고 이 결과 정수는 필요한 시간의 1970년 1월 1일부터 경과한 시간(초)과 비교됩니다. .

이 줄을 확인하는 것이 좋습니다.

 if (TimeDayOfWeek( TimeCurrent ()) == 5 && TimeCurrent () >= StringToTime ( "21:30" ))

어디에 문제가 있었는지. 오늘은 금요일과 같습니다.

 
AlexeyVik :

이 줄을 확인하는 것이 좋습니다.

어디에 문제가 있었는지. 오늘은 금요일과 같습니다.

로컬 컴퓨터의 날짜가 브로커 날짜보다 작은지 확인해보니 지문이 나오고,

로컬 컴퓨터의 날짜가 브로커의 날짜보다 큰 경우 인쇄가 없습니다.

이미 정확히 지나간 시간, 즉 "11:30"을 확인하면서

첫 번째 경우 TimeCurrent() 는 2014.11과 비교됩니다. 06 11:30, 두 번째 경우 2014.11. 08 11:30

PS는 강조 표시된 부분을 수정했습니다.

 if (TimeDayOfWeek( TimeCurrent ())== 5 )       // если сейчас пятница, от текущего времени. Наступит когда по времени сервера будет 00:00
   EndTrading= StringToTime ( "21:30" );     // А тут в 00:00 устанавливается четверг 21:30 потому, что это время пятницы ещё далеко.

첫 번째 줄은 명확하고 두 번째 줄의 주석은 그렇지 않습니다.

벌써 금요일이 왔는데 왜 금요일이 멀까요? 결국 두 번째 줄은 금요일인 경우에만 실행됩니다.

 
tuner :

로컬 컴퓨터의 날짜가 브로커 날짜보다 작은지 확인해보니 지문이 나오고,

로컬 컴퓨터의 날짜가 브로커의 날짜보다 큰 경우 인쇄가 없습니다.

동시에 이미 정확히 지나간 시간, 즉 "11:30"을 확인했습니다.

첫 번째 경우 TimeCurrent()는 2014.11과 비교됩니다. 06 11:30, 두 번째 경우 2014.11. 08 11:30

PS는 강조 표시된 부분을 수정했습니다.


글쎄요, 제 현지 시간 은 서버 시간보다 1시간 더 깁니다.

이 스크립트

   datetime time_begin;
    time_begin = StringToTime ( "21:30" );
     Comment ( "Текущее локальное время " , TimeLocal (), " " , TimeToString ( TimeLocal (), TIME_DATE | TIME_SECONDS ), "\n"
          , "Текущее время сервера    " , TimeCurrent (), " " , TimeToString ( TimeCurrent (), TIME_DATE | TIME_SECONDS ), "\n"
          , "Сегодня 21:30 по TimeLocal будет через    " , time_begin- TimeLocal (), " секунд или " , 
           TimeToString (time_begin- TimeLocal (), TIME_MINUTES | TIME_SECONDS ), "\n"
          , "Сегодня 21:30 по TimeCurrent будет через " , time_begin- TimeCurrent (), " секунд или " , 
           TimeToString (time_begin- TimeCurrent (), TIME_MINUTES | TIME_SECONDS ), "\n"
          );


다음과 같은 값을 출력합니다.

먼저 1970년 1월 1일부터 지정된 시간까지 경과한 시간(초)을 입력한 다음 우리에게 익숙한 형식의 시간입니다.


이를 바탕으로 이러한 가치에서 무엇이 당신을 혼란스럽게 하는지 설명하십시오.


네. 두 번째 댓글에서는 그것에 대해 전혀 생각하지 않았습니다.

 
TheXpe
더엑스퍼트 :
네.
고맙습니다. 간결함은 재치의 영혼입니다!
 

안녕하세요.

그런 과제가 있습니다. (티크에 나사를 조일 수 없음)

보류 중인 주문 이 실행되면 {then...}

주문 계산을 위해 EA에서 Terminal.mqh를 사용합니다.

터미널 // Mas_Tip[0] 오픈 매수

// Buy 주문 수가 1 증가하면...

if (Mas_Tip[0]+1)

{

기능

}

모든 것이 작동합니다. 그러나 다음 틱마다 작동합니다.

이 케이스를 진드기에 부착하는 방법은 무엇입니까? 그런 다음 이전 눈금과 현재 눈금의 값을 비교합니다.

사유: