MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 572

 
PolarSeaman :

죄송합니다. 왜 안되는지 이해가 되지 않습니다.

가능하지만 타이머가 아닙니다.

 if ( IsTesting ()) OnTimer ();
 
PolarSeaman :

음... 진드기가 오지 않았다면? 틱 없이 "시작"해야 합니다.

첫 번째 틱은 동기화를 위한 것이며 시작 틱이 오지 않으면 시장이 닫히고 거기에서 할 일이 없습니다.

 

좋은 저녁이에요!

다시 한 번 도움을 요청해야 합니다.

특정 시간 범위 내에서 하나의 주문을 열어야 하며, 지난 30분 동안 이 마법으로 이미 주문이 열려 있었다면 열 필요가 없습니다. 나는 다음과 같이 씁니다.

 if ( TimeCurrent ()> StrToTime ( "00:01" ) && TimeCurrent ()< StrToTime ( "00:30" ))
{

//1я часть
for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--)
 {
   if (! OrderSelect (i, SELECT_BY_POS ))
     continue ;
   if ( OrderSymbol () != Symbol ())
     continue ;
   if ( OrderMagicNumber () != MagicNumber1)
     continue ;
   if ( TimeDayOfWeek ( OrderOpenTime ()) != TimeDayOfWeek ( TimeCurrent ()))
     continue ;   
  ++nCnt1;
  {
   if (nCnt1> 0 )
       return ;
  }
 }
//2ая часть
for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--)
 {
   if (! OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ))
     continue ;
   if ( OrderSymbol () != Symbol ())
     continue ;
   if ( OrderMagicNumber () != MagicNumber1)
     continue ;
   if ( TimeToStr ( TimeCurrent ()- OrderOpenTime (), TIME_MINUTES ) <= TimeToStr ( D'00:30' , TIME_MINUTES ))
     continue ;
  ++nCnt1;
  {
   if (nCnt1> 0 )
       return ;
  }
 }

//Открытие ордера
}

첫 번째 부분만 남은 경우 문제는 이 30분 동안 스톱/테이크 위치가 닫히면 다른 부분이 열린다는 것입니다. 그래서 주문의 역사에 들어가기 위해 2편을 추가했는데, 지난 30분 동안 이 마법으로 주문이 이미 있었다면 열지 마세요. 그러나 두 번째 부분에 문제가 있습니다. 여전히 열립니다.

말해주세요!

 

여기에서 초 단위로 계산해야 합니다.

 if ( TimeCurrent ()- OrderOpenTime () <= 30*60 )
 
Taras Slobodyanik :

여기에서 초 단위로 계산해야 합니다.

불행히도 도움이되지 않았습니다.

나는 또한 이것을 시도했지만 작동하지 않습니다.

   if ( TimeToStr ( TimeCurrent ()- OrderOpenTime (), TIME_SECONDS ) <= TimeToStr ( 30 * 60 , TIME_SECONDS ))
 
YanSay :

불행히도 도움이되지 않았습니다.

나는 또한 이것을 시도했지만 작동하지 않습니다.

왜 모든 라인을 비교합니까? Taras는 올바르게 말했습니다 - 초 단위로 계산하십시오. 계정 기록에 들어가지 않았기 때문에 그의 옵션은 적합하지 않았습니다.

 //2ая часть
for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--)

이것은 작업 주문의 주기입니다. 역사에 따르면 주기는 다음과 같습니다.

 //2ая часть
for ( int i = OrdersHistoryTotal () - 1 ; i >= 0 ; i--)

주기에서 더 나아가 주문 의 시작 시간 이 아니라 마감 시간을 가져와야 합니다.

 
Ihor Herasko :

왜 모든 라인을 비교합니까? Taras가 올바르게 말했습니다 - 초 단위로 계산하십시오. 계정 기록에 들어가지 않았기 때문에 그의 옵션은 적합하지 않았습니다.

이것은 작업 주문의 주기입니다. 역사에 따르면 주기는 다음과 같습니다.

또한 주기 에서 시작 시간 이 아니라 주문 마감 시간을 가져와야 합니다.


 if ( TimeCurrent ()> StrToTime ( "00:01" ) && TimeCurrent ()< StrToTime ( "00:30" ))
{

//1я часть
for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--)
 {
   if (! OrderSelect (i, SELECT_BY_POS ))
     continue ;
   if ( OrderSymbol () != Symbol ())
     continue ;
   if ( OrderMagicNumber () != MagicNumber1)
     continue ;
   if ( TimeDayOfWeek ( OrderOpenTime ()) != TimeDayOfWeek ( TimeCurrent ()))
     continue ;   
  ++nCnt1;
  {
   if (nCnt1> 0 )
       return ;
  }
 }
//2ая часть
for ( int i = OrdersHistoryTotal () - 1 ; i >= 0 ; i--)
 {
   if (! OrderSelect (i, SELECT_BY_POS ))
     continue ;
   if ( OrderSymbol () != Symbol ())
     continue ;
   if ( OrderMagicNumber () != MagicNumber1)
     continue ;
   if ( TimeCurrent () - OrderCloseTime () <= 30 * 60 )
     continue ;
  ++nCnt1;
  {
   if (nCnt1> 0 )
       return ;
  }
 }

//Открытие ордера
}

라인에 대해 올바르게 이해했다면 텍스트로 번역된 TimeToStr에 대해 알고 계십니까?

수정되었지만 여전히:

시험 장치

내가 완전히 바보라면 죄송합니다.

 
YanSay :

라인에 대해 올바르게 이해했다면 텍스트로 번역된 TimeToStr에 대해 알고 계십니까?

수정되었지만 여전히:

내가 완전히 바보라면 죄송합니다.

큰 소리로 당신의 상태를 말하고 문제를 이해하십시오)

 if ( TimeCurrent () - OrderCloseTime () < = 30 * 60 )
 

조건에 따라 표시기 버퍼의 이전 값 중 하나에 빈 값이 할당되면 차트에서 삭제됩니까?

또는 버퍼가 비어 있습니다. 그림이 차트에 남아 있습니까?

 
YanSay :

라인에 대해 올바르게 이해했다면 텍스트로 번역된 TimeToStr에 대해 알고 계십니까?

네. 시간은 초 단위이므로 시간 을 문자열로 변환하는 것은 의미가 없습니다. 이 숫자는 문자열보다 작업하기가 훨씬 쉽고 빠릅니다.

수정되었지만 여전히:

내가 완전히 바보라면 죄송합니다.

당신은 하나를 수정하고 다른 하나를 망쳤습니다))

대신 두 번째 부분에서:

 if (! OrderSelect (i, SELECT_BY_POS ))
     continue ;

반품:

 if (! OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ))
     continue ;

이전 시도에서는 이 줄이 맞았습니다.