초보자 도움말 - 요일 및 시간 기능

 

안녕,

나는 여기에서 초보자이므로 도움이 필요합니다.

일요일에 시장이 열릴 때 거래하는 EA가 있습니다. EA의 문제는 주중에도 거래가 필요하고 나는 그것을 원하지 않는다는 것입니다.

나는 그것이 다음과 같이 작동하기를 원한다:

extern int StartDay="일요일"

외부 정수 시작 시간 = "23:00"

extern int StopDay="월요일"

외부 정수 StopTime="15:00"

day="sunday"이고 시장이 열려 있는 경우(일요일 23:00~월요일 15:00 사이에 하나의 거래만 열릴 수 있음, TP 또는 SL로 인해 거래가 마감된 경우 새로운 거래 없음)

{

거래 시작(이미 가지고 있는 일부 코드)

}

MQL에서 이 작업을 수행하려면 어떻게 해야 합니까?

 

시간 확인[0]

도움말 날짜 및 시간 기능의 해당 기능

 
// SEE IF THIS WORK FOR YOU..... (I'VE NOT TESTED IT....)



int start()
{
  bool sunday_cond = (TimeDayofWeek(TimeCurrent())>=0) && (Hour()>=23);
  bool monday_cond = (TimeDayofWeek(TimeCurrent())<=1) && (Hour()<=15); 
  if(sunday_cond  || monday_cond )
      go_trading();

}
 
abstract_mind _마인드:
   bool sunday_cond = ( TimeDayofWeek ( TimeCurrent ( ) ) > = 0 ) & & ( Hour ( ) > = 23 ) ;
   bool monday_cond = ( TimeDayofWeek ( TimeCurrent ( ) ) < = 1 ) & & ( Hour ( ) < = 15 ) ; 
   if ( sunday_cond   | | monday_cond )

이게 맞는지 잘 모르겠습니다. "sunday_cond"는 매일 오후 11시에서 자정 사이에 참입니다. 따라서 코드는 sunday_cond 또는 monday_cond 수행하므로 매일 오후 11시 이후에 거래될 가능성이 있습니다. 또한 "monday_cond"는 일요일 오후 3시까지 만납니다. 가능성은 낮지만 일부 시간대에서는 거래 시간 내에 포함될 수도 있습니다. 더 중요한 것은 Hour() <= 15는 오후 3시가 아니라 오후 3시 59분까지 true입니다.


그러나 원칙은 EagleEye가 수행해야 하는 작업 측면에서 분명히 타당합니다. 즉, DayOfWeek() 또는 TimeDayOfWeek()를 사용하여 시간과 요일 을 확인합니다.

 
jjc :

이게 맞는지 잘 모르겠습니다. "sunday_cond"는 매일 오후 11시에서 자정 사이에 참입니다. 따라서 코드는 sunday_cond 또는 monday_cond 수행하므로 매일 오후 11시 이후에 거래될 가능성이 있습니다. 또한 "monday_cond"는 일요일 오후 3시까지 만납니다. 가능성은 낮지만 일부 시간대에서는 거래 시간 내에 포함될 수도 있습니다. 더 중요한 것은 Hour() <= 15는 오후 3시가 아니라 오후 3시 59분까지 true입니다.


그러나 원칙은 EagleEye가 수행해야 하는 작업 측면에서 분명히 타당합니다. 즉, DayOfWeek() 또는 TimeDayOfWeek()를 사용하여 시간과 요일을 확인합니다.



당신이 맞습니다. 이것은 작동해야 합니다:

   bool sunday_cond = ( TimeDayofWeek ( TimeCurrent ( ) ) = = 0 ) & & ( Hour ( ) > = 23 ) ; 
   bool monday_cond = ( TimeDayofWeek ( TimeCurrent ( ) ) = = 1 ) & & ( Hour ( ) < = 15 ) ;
   if ( sunday_cond   | | monday_cond )
go_trading();
 

고마워 얘들아


나는 이것을 시도하고 그것이 작동하는지 알려줄 것이다.

 

only one trade can be open between sunday 23:00 and monday 15:00

위의 코드는 15:00(Hour()<15)가 아니라 일요일 23:00부터 월요일 15:59(Hour()<=15)까지 거래되어야 합니다.

또한 허용된 기간 동안 하나의 거래만 열 수 있는 코드가 있어야 합니다.

 
sunday_cond 및 monday_cond는 어떤 유형이어야 합니까? 인?
 

나는 당신이 이 부분에 대해 당신이 의미하는 바를 이해하고 있는지 잘 모르겠습니다. WHRoeder : 15:00(Hour()<15)가 아니라 Monday 15:59(Hour()<=15)??

네, 저도 그 코드가 필요합니다. 누군가가 그것을 제공할 수 있기를 바랍니다.

 
EagleEye :

네, 저도 그 코드가 필요합니다. 누군가가 그것을 제공할 수 있기를 바랍니다.

현재 거래 창에서 이미 거래를 열었다면 거래가 지금 닫혀 있더라도 새로운 거래를 하고 싶지 않기 때문에 이것은 약간 특이한 문제입니다. 이 포럼의 대부분의 토론은 현재 열려 있는 거래가 없는지 확인하는 것과 관련이 있습니다.


본질적으로 마감된 거래를 확인하는 세 가지 옵션이 있습니다.


  1. 새로운 거래를 열 때 현재 시간 을 변수에 저장하십시오. 새로운 거래를 고려할 때 마지막 거래의 저장된 시간이 현재 거래 창에 속하지 않는지 확인하십시오.
  2. 위와 같지만 MT4의 전역 변수에 마지막 거래 시간을 저장합니다.
  3. MT4 거래 목록을 스캔하여 현재 거래 창에서 열린 마감 거래를 찾습니다.


이러한 옵션은 대략 복잡도 순입니다(또한 성능의 역순, 즉 3이 가장 느리지만 둘 사이의 속도 차이가 실제 생활에서 문제를 일으킬 가능성은 거의 없음).


그러나 옵션은 또한 탄력성 순서입니다.


  1. 마지막 거래 시간이 변수(메모리)에 저장되어 있으면 MT4가 다시 시작되거나 다른 이유로 EA를 다시 로드해야 하는 경우 값이 손실됩니다. 즉, EA가 다시 로드되면 동일한 거래 기간 동안 잠재적으로 두 번 이상 거래됩니다.
  2. 시간이 MT4 전역 변수에 저장된 경우 해당 기록은 EA를 다시 로드해도 살아남을 수 있습니다. 그러나 거래를 서둘러 새 컴퓨터로 옮겨야 하는 경우 마지막 거래 시간의 기록이 손실됩니다(MT4의 gvariables.dat 파일 백업이 사용 가능한 경우 제외).
  3. MT4 거래 목록을 스캔하는 것은 재해 복구 측면에서 적절하게 복원되는 유일한 옵션입니다. 다른 컴퓨터의 MT4 복사본에서 브로커 계정에 로그인하고 EA를 시작하고 잘못된 추가 거래를 받지 않도록 보장받을 수 있습니다. 거래.


 

// 접근_1

   bool sunday_cond = ( TimeDayofWeek ( TimeCurrent ( ) ) = = 0 ) & & ( Hour ( ) > = 23 ) ; 
   bool monday_cond = ( TimeDayofWeek ( TimeCurrent ( ) ) = = 1 ) & & ( Hour ( ) < = 15 ) ;
   if ( sunday_cond   | | monday_cond )
if(OrdersTotal()==0)
go_trading();



// 접근_2

   bool sunday_cond = ( TimeDayofWeek ( TimeCurrent ( ) ) = = 0 ) & & ( Hour ( ) > = 23 ) ; 
   bool monday_cond = ( TimeDayofWeek ( TimeCurrent ( ) ) = = 1 ) & & ( Hour ( ) < = 15 ) ;
   if ( sunday_cond   | | monday_cond )
{
if(number_of_longs()==0) // Count the longs from both "trade context" and history for the period in qestion. There is code for counting open longs/shorts in the forum
go_trading_longs();
if(number_of_shorts()==0)
go_trading_shorts();

}