아래와 같이 3개의 ' EventSetMillisecondTimer '를 설정 해야 합니다. (당신은 그것이 작동하지 않는다고 말했습니다...) . 사용 가능한 대체 방법이 있습니까?
EventSetMillisecondTimer ( 10 ); // 1st will read in 10 | if won't read try next EventSetMillisecondTimer ( 250 ); // 2nd will read in 250 | if won't read try next EventSetMillisecondTimer ( 1250 ); // 3rd will read in 1250 | if read then stop reading till next PERIOD_M5
어떤 노력을 하고 있는지 기술해 주십시오.
혼란 을 드려 죄송합니다.
아래와 같이 3개의 ' EventSetMillisecondTimer '를 설정 해야 합니다. (당신은 그것이 작동하지 않는다고 말했습니다...) . 사용 가능한 대체 방법이 있습니까?
EventSetMillisecondTimer ( 250 ); // 2nd will read in 250 | if won't read try next
EventSetMillisecondTimer ( 1250 ); // 3rd will read in 1250 | if read then stop reading till next PERIOD_M5
최상의.
타이머는 OnInit() 함수에서 한 번만 설정됩니다.
다시 초기화하려면 먼저 이전 타이머를 종료해야 합니다. 이는 일반적으로 OnDeinit() 함수에서 발생합니다.
내가 말했듯이 대안으로 카운터를 사용할 수 있습니다.
예를 들어 10밀리초 타이머에 코드를 넣으면 코드는 10밀리초마다 실행됩니다.
너무 빠르기 때문에 터미널이 정지될 가능성이 높습니다.
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit ()
{
//--- create timer
EventSetTimer ( 1 ); // 1 second
//---
return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
//--- destroy timer
EventKillTimer ();
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick ()
{
//---
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer ()
{
//--- increment counter
counter++;
//--- comment status on the chart
Comment ( IntegerToString (counter));
//--- switch timer
switch (counter)
{
case 60 :
Alert ( " 1 Minute " );
// Do Something...
break ;
case 300 :
Alert ( " 5 Minutes " );
// Do Something...
break ;
case 900 :
Alert ( " 15 Minutes " );
// Do Something...
counter= 0 ; // Reset counter on highest value.
break ;
}
// end switch timer
if (counter> 900 )
{
counter= 0 ; // Safety Mechanism
}
}
//+------------------------------------------------------------------+
1분은 한 번만 트리거되므로 1분마다 트리거되지 않습니다.
5분은 또한 처음 5분 후에 한 번만 트리거되므로 10분도 아니고 15분 표시도 아닙니다.
예를 들어 매분마다 트리거하려면 180초 동안 120초 동안 60초 동안 코드를 추가 해야 합니다.
15분 표시는 카운터를 0으로 설정하기 때문에 15분마다 트리거됩니다.
어떤 메커니즘을 사용하고 싶습니까? 시간 간격에 어떤 코드를 트리거하시겠습니까?
당신은 무엇을 달성하기 위해 노력하고 있습니까?void OnTimer ()
{
static int counter= 0 ;
static int next1m= 60 ;
static int next5m= 300 ;
static int next15m= 900 ;
//--- increment counter
counter++;
//--- comment status on the chart
Comment ( IntegerToString (counter));
//--- timer
if (counter==next1m)
{
Alert ( " 1 Minute " );
// Do Something...
next1m+= 60 ;
}
if (counter==next5m)
{
Alert ( " 5 Minutes " );
// Do Something...
next5m+= 300 ;
}
if (counter==next15m)
{
Alert ( " 15 Minutes " );
// Do Something...
counter= 0 ; // Reset counter on highest value.
next1m= 60 ;
next5m= 300 ;
}
}
잘했어 마르코.
모든 시간 간격에 트리거하려면 다음과 같이 할 수 있습니다.
Marco vd Heijden :
어떤 메커니즘을 사용하고 싶습니까? 시간 간격에 어떤 코드를 트리거하시겠습니까?
당신은 무엇을 달성하기 위해 노력하고 있습니까?다시 한 번 훌륭한 의견, 큰 감사 합니다.
//---
...내 지표는 (/입니다) 내가 원했습니다 (/ 원했습니다) .
표시기는 다음과 같이 작동합니다.
예를 들어 내 우려 사항 을 설명 해야 합니다.
EURUSD 차트를 열고 내 표시기를 차트에 연결하고 내가 원하는 것처럼 완벽하게 작동 하고 VLINE 을 앞으로 이동/표시합니다. TIMEFRAME PERIOD를 변경할 수 있고 자동으로 해당 PERIOD에 맞춰 간격을 조정할 수 있습니다 (내가 원하는 것입니다) .
내 지표 문제는 어디에 있습니까? // 문제가 아닐 수도 있지만 업데이트하는 데 '관련 없는' 시간이 조금 더 걸립니다.
'EventSetMillisecondTimer( 10 );'를 선택 하면 그런 다음 TIMEFRAME PERIOD를 TIMEFRAME PERIOD로 변경 하고 새 VLINE을 차트 (내가 원하는 것)에 로드할 때 거의 볼 수 없습니다.
귀하의 의견에 훨씬 더 감사드립니다 - Marco & whroeder1
(참고: 나는 '스위치 연산자'를 사용하지 않습니다. 왜냐하면 귀하의 #18 댓글이 내가 업그레이드하고 작업하는 모든 것보다 낫기 때문입니다. 그리고 그것은 저에게 매우 유용합니다)
(영어는 제 모국어가 아닙니다)
Keith Watford :
잘했어 마르코.
모든 시간 간격에 트리거하려면 다음과 같이 할 수 있습니다.
또한 좋은 하나 Keith . :)
정말 많은 도움이 되었습니다. 다음 지표에 사용하겠습니다 .
모두 제일 좋다.
나는 다른 사람에 대해 잘 알지 못하지만 글꼴, 색상, 굵게 및 기울임꼴 등의 혼합이 산만하고 성가신 것을 알았습니다. 사실 나는 이 글을 읽을 여유가 없었다.
다시 한 번 훌륭한 의견, 큰 감사 합니다.
//---
...내 지표는 (/입니다) 내가 원했습니다 (/ 원했습니다) .
표시기는 다음과 같이 작동합니다.
예를 들어 내 우려 사항 을 설명 해야 합니다.
EURUSD 차트를 열고 내 표시기를 차트에 연결하고 내가 원하는 것처럼 완벽하게 작동 하고 VLINE 을 앞으로 이동/표시합니다. TIMEFRAME PERIOD를 변경할 수 있고 자동으로 해당 PERIOD에 맞춰 간격을 조정할 수 있습니다 (내가 원하는 것입니다) .
내 지표 문제는 어디에 있습니까? // 문제가 아닐 수도 있지만 업데이트하는 데 '관련 없는' 시간이 조금 더 걸립니다.
'EventSetMillisecondTimer( 10 );'를 선택 하면 그런 다음 TIMEFRAME PERIOD를 TIMEFRAME PERIOD로 변경 하고 새 VLINE을 차트 (내가 원하는 것)에 로드할 때 거의 볼 수 없습니다.
귀하의 의견에 훨씬 더 감사드립니다 - Marco & whroeder1
(참고: 나는 '스위치 연산자'를 사용하지 않습니다. 왜냐하면 귀하의 #18 댓글이 내가 업그레이드하고 작업하는 모든 것보다 낫기 때문입니다. 그리고 그것은 저에게 매우 유용합니다)
(영어는 제 모국어가 아닙니다)
시간 프레임 전환에 관한 것이라면 프레임 전환 시 타이머가 파괴되기 때문에 타이머는 좋은 옵션이 아닙니다.
OnInit() 함수 에서 줄을 만들고 OnTick() 또는 OnTimer() 함수에서 업데이트할 수 있습니다.
다음은 예입니다.
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit ()
{
//--- create timer
EventSetTimer ( 60 );
//--- playsound
PlaySound ( "alert2.wav" );
//--- create moving timeline
ObjectCreate ( 0 , "Time" , OBJ_VLINE , 0 , TimeCurrent (), 0 );
//--- detect period
switch ( Period ())
{
case PERIOD_M1 :
MessageBox ( "Switched to 1 Minute Frame" );
//Do Something...
ObjectCreate ( 0 , "1-Minute" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
break ;
case PERIOD_M5 :
MessageBox ( "Switched to 5 Minutes Frame" );
//Do Something...
ObjectCreate ( 0 , "5-Minutes" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
break ;
case PERIOD_M15 :
MessageBox ( "Switched to 15 Minutes Frame" );
//Do Something...
ObjectCreate ( 0 , "15-Minutes" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
break ;
case PERIOD_M30 :
MessageBox ( "Switched to 30 Minutes Frame" );
//Do Something...
ObjectCreate ( 0 , "30-Minutes" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
break ;
case PERIOD_H1 :
MessageBox ( "Switched to 1 Hour Frame" );
//Do Something...
ObjectCreate ( 0 , "1-Hour" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
break ;
case PERIOD_H4 :
MessageBox ( "Switched to 4 Hour Frame" );
//Do Something...
ObjectCreate ( 0 , "4-Hour" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
break ;
case PERIOD_D1 :
MessageBox ( "Switched to Daily Frame" );
//Do Something...
ObjectCreate ( 0 , "Daily" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
break ;
case PERIOD_W1 :
MessageBox ( "Switched to Weekly Frame" );
//Do Something...
ObjectCreate ( 0 , "Weekly" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
break ;
case PERIOD_MN1 :
MessageBox ( "Switched to Monthly Frame" );
//Do Something...
ObjectCreate ( 0 , "Monthly" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
break ;
}
//---
return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
//--- destroy timer
EventKillTimer ();
//--- delete objects
ObjectsDeleteAll ( 0 , 0 ,- 1 );
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick ()
{
//---
ObjectMove ( 0 , "Time" , 0 , TimeCurrent (), 0 ); // Update timeline
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer ()
{
//---
ObjectMove ( 0 , "Time" , 0 , TimeCurrent (), 0 ); // Update timeline
}
//+------------------------------------------------------------------+
추가로 새 양초가 발생할 때마다 라인을 업데이트하려면 이전 페이지의 예제와 마지막 예제를 결합하여 다음을 제공할 수 있습니다.
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit ()
{
//--- create timer
EventSetTimer ( 60 );
//--- playsound
PlaySound ( "alert2.wav" );
//--- load open times
M1= iTime ( Symbol (), PERIOD_M1 , 0 );
M5= iTime ( Symbol (), PERIOD_M5 , 0 );
M15= iTime ( Symbol (), PERIOD_M15 , 0 );
M30= iTime ( Symbol (), PERIOD_M30 , 0 );
H1= iTime ( Symbol (), PERIOD_H1 , 0 );
H4= iTime ( Symbol (), PERIOD_H4 , 0 );
D1= iTime ( Symbol (), PERIOD_D1 , 0 );
W1= iTime ( Symbol (), PERIOD_W1 , 0 );
MN1= iTime ( Symbol (), PERIOD_MN1 , 0 );
//--- create moving timeline
ObjectCreate ( 0 , "Time" , OBJ_VLINE , 0 , TimeCurrent (), 0 );
//--- detect period
switch ( Period ())
{
case PERIOD_M1 :
MessageBox ( "Switched to 1 Minute Frame" );
//Do Something...
ObjectCreate ( 0 , "1-Minute" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
M1= Time [ 0 ]; // store current time
break ;
case PERIOD_M5 :
MessageBox ( "Switched to 5 Minutes Frame" );
//Do Something...
ObjectCreate ( 0 , "5-Minutes" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
M5= Time [ 0 ]; // store current time
break ;
case PERIOD_M15 :
MessageBox ( "Switched to 15 Minutes Frame" );
//Do Something...
ObjectCreate ( 0 , "15-Minutes" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
M15= Time [ 0 ]; // store current time
break ;
case PERIOD_M30 :
MessageBox ( "Switched to 30 Minutes Frame" );
//Do Something...
ObjectCreate ( 0 , "30-Minutes" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
M30= Time [ 0 ]; // store current time
break ;
case PERIOD_H1 :
MessageBox ( "Switched to 1 Hour Frame" );
//Do Something...
ObjectCreate ( 0 , "1-Hour" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
H1= Time [ 0 ]; // store current time
break ;
case PERIOD_H4 :
MessageBox ( "Switched to 4 Hour Frame" );
//Do Something...
ObjectCreate ( 0 , "4-Hour" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
H4= Time [ 0 ]; // store current time
break ;
case PERIOD_D1 :
MessageBox ( "Switched to Daily Frame" );
//Do Something...
ObjectCreate ( 0 , "Daily" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
D1= Time [ 0 ]; // store current time
break ;
case PERIOD_W1 :
MessageBox ( "Switched to Weekly Frame" );
//Do Something...
ObjectCreate ( 0 , "Weekly" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
W1= Time [ 0 ]; // store current time
break ;
case PERIOD_MN1 :
MessageBox ( "Switched to Monthly Frame" );
//Do Something...
ObjectCreate ( 0 , "Monthly" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
MN1= Time [ 0 ]; // store current time
break ;
}
//---
return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
//--- destroy timer
EventKillTimer ();
//--- delete objects
ObjectsDeleteAll ( 0 , 0 ,- 1 );
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick ()
{
//--- update timeline
ObjectMove ( 0 , "Time" , 0 , TimeCurrent (), 0 );
//--- check for new candles
if (M1!= iTime ( Symbol (), PERIOD_M1 , 0 ))
{
Alert ( "New candle on M1" );
ObjectMove ( 0 , "1-Minute" , 0 , iTime ( Symbol (), PERIOD_M1 , 0 ), 0 ); // Move line
M1= iTime ( Symbol (), PERIOD_M1 , 0 ); // Overwrite old with new value
}
if (M5!= iTime ( Symbol (), PERIOD_M5 , 0 ))
{
Alert ( "New candle on M5" );
M1= iTime ( Symbol (), PERIOD_M5 , 0 ); // Overwrite old with new value
}
if (M15!= iTime ( Symbol (), PERIOD_M15 , 0 ))
{
Alert ( "New candle on M15" );
M15= iTime ( Symbol (), PERIOD_M15 , 0 ); // Overwrite old with new value
}
if (M30!= iTime ( Symbol (), PERIOD_M30 , 0 ))
{
Alert ( "New candle on M30" );
M30= iTime ( Symbol (), PERIOD_M30 , 0 ); // Overwrite old with new value
}
// and so on to MN1...
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer ()
{
//---
ObjectMove ( 0 , "Time" , 0 , TimeCurrent (), 0 ); // Update timeline
}
//+------------------------------------------------------------------+
나는 다른 사람에 대해 잘 알지 못하지만 글꼴, 색상, 굵게 및 기울임꼴 등의 혼합이 산만하고 성가신 것을 알았습니다. 사실 나는 이 글을 읽는데 방해가 되지 않았다 .
Max Enrik :
나는 다른 사람에 대해 잘 알지 못하지만 글꼴, 색상, 굵게 및 기울임꼴 등의 혼합이 산만하고 성가신 것을 알았습니다. 사실 나는 이 글을 읽는데 방해가 되지 않았다 .