표시기 기타 질문 - 페이지 5

 
Marco vd Heijden :
어떤 노력을 하고 있는지 기술해 주십시오.

혼란 을 드려 죄송합니다.

아래와 같이 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

최상의.

 

타이머는 OnInit() 함수에서 한 번만 설정됩니다.

다시 초기화하려면 먼저 이전 타이머를 종료해야 합니다. 이는 일반적으로 OnDeinit() 함수에서 발생합니다.

내가 말했듯이 대안으로 카운터를 사용할 수 있습니다.

예를 들어 10밀리초 타이머에 코드를 넣으면 코드는 10밀리초마다 실행됩니다.

너무 빠르기 때문에 터미널이 정지될 가능성이 높습니다.

int counter;
//+------------------------------------------------------------------+
//| 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 :

어떤 메커니즘을 사용하고 싶습니까? 시간 간격에 어떤 코드를 트리거하시겠습니까?

당신은 무엇을 달성하기 위해 노력하고 있습니까?
'스위치' 연산자시간 간격 에 대해 훨씬 더 명확하게 설명 하는 훌륭한 의견 에 감사드립니다.

다시 한 번 훌륭한 의견, 큰 감사 합니다.

//---

이제 이 지표에 대한 정보 를 제공해야 합니다.
내 관심사에 대해 설명하지 않았기 때문에 (하지만 최근 댓글이 점점 더 도움이 되었습니다)...

...내 지표는 (/입니다) 내가 원했습니다 (/ 원했습니다) .

표시기는 다음과 같이 작동합니다.

자동으로 이동/ 앞으로 'VLINE' 표시 (내가 원하는 것)
지난 1주일 의 'VLINE' (내가 원하는 것)을 보여줍니다.
교차 기간 라인 없음 (내가 원하는 것)
다음 PERIOD_** (내가 원하는 것) 마다 한 번만 지속적으로 업그레이드 (간격 있음 )
그리고 점점 더...
다시 한 번 Marco & whroeder1 에게 특별한 감사 를 전 합니다.

예를 들어 내 우려 사항설명 해야 합니다.

EURUSD 차트를 열고 내 표시기를 차트에 연결하고 내가 원하는 것처럼 완벽하게 작동 하고 VLINE 을 앞으로 이동/표시합니다. TIMEFRAME PERIOD를 변경할 수 있고 자동으로 해당 PERIOD에 맞춰 간격을 조정할 수 있습니다 (내가 원하는 것입니다) .

내 지표 문제는 어디에 있습니까? // 문제가 아닐 수도 있지만 업데이트하는 데 '관련 없는' 시간이 조금 더 걸립니다.

'EventSetMillisecondTimer( 10 );'를 선택 하면 그런 다음 TIMEFRAME PERIOD를 TIMEFRAME PERIOD로 변경 하고 새 VLINE을 차트 (내가 원하는 것)에 로드할 때 거의 볼 수 없습니다.

이때 EURUSD'기타 기호 ( GBPUSD 등) ' 로 변경하면 내 표시기 가 VLINE으로 가득 차게 로드되지 않습니다 . 그것은 단지 문제 일 뿐입니다 (/ 저에게는) .

그렇지 않으면: 'EventSetMillisecondTimer( 1250 );'를 선택 하면 부하에 대한 문제 는 보이지 않습니다. 그것은 완벽하게 작동합니다 .
그러나 여기에 문제 가 있습니다 (/ 저에게) . TIMEFRAME PERIOD를 변경할 때 '관련 없는' 시간이 조금 더 걸립니다.

따라서 저 를 너무 명확하게 이해하고 계시다면 시간을 내어 의견을 말씀해 주십시오 (이 문제를 어떻게 해결할 수 있는지 도와주세요) . 아니면 저 를 너무 명확하게 이해 하지 못하는 경우 시간을 낭비하지 마십시오 .

귀하의 의견에 훨씬 더 감사드립니다 - Marco & whroeder1


(참고: 나는 '스위치 연산자'를 사용하지 않습니다. 왜냐하면 귀하의 #18 댓글이 내가 업그레이드하고 작업하는 모든 것보다 낫기 때문입니다. 그리고 그것은 저에게 매우 유용합니다)

(영어는 제 모국어가 아닙니다)

 

Keith Watford :

잘했어 마르코.

모든 시간 간격에 트리거하려면 다음과 같이 할 수 있습니다.

또한 좋은 하나 Keith . :)

정말 많은 도움이 되었습니다. 다음 지표에 사용하겠습니다 .

모두 제일 좋다.

 

나는 다른 사람에 대해 잘 알지 못하지만 글꼴, 색상, 굵게 및 기울임꼴 등의 혼합이 산만하고 성가신 것을 알았습니다. 사실 나는 이 글을 읽을 여유가 없었다.

Max Enrik :
'스위치' 연산자시간 간격 에 대해 훨씬 더 명확하게 설명 하는 훌륭한 의견 에 감사드립니다.

다시 한 번 훌륭한 의견, 큰 감사 합니다.

//---

이제 이 지표에 대한 정보 를 제공해야 합니다.
내 관심사에 대해 설명하지 않았기 때문에 (하지만 최근 댓글이 점점 더 도움이 되었습니다)...

...내 지표는 (/입니다) 내가 원했습니다 (/ 원했습니다) .

표시기는 다음과 같이 작동합니다.

자동으로 이동/ 앞으로 'VLINE' 표시 (내가 원하는 것)
지난 1주일 의 'VLINE' (내가 원하는 것)을 보여줍니다.
교차 기간 라인 없음 (내가 원하는 것)
다음 PERIOD_** (내가 원하는 것) 마다 한 번만 지속적으로 업그레이드 (간격 있음 )
그리고 점점 더...
다시 한 번 Marco & whroeder1 에게 특별한 감사 를 전 합니다.

예를 들어 내 우려 사항설명 해야 합니다.

EURUSD 차트를 열고 내 표시기를 차트에 연결하고 내가 원하는 것처럼 완벽하게 작동 하고 VLINE 을 앞으로 이동/표시합니다. TIMEFRAME PERIOD를 변경할 수 있고 자동으로 해당 PERIOD에 맞춰 간격을 조정할 수 있습니다 (내가 원하는 것입니다) .

내 지표 문제는 어디에 있습니까? // 문제가 아닐 수도 있지만 업데이트하는 데 '관련 없는' 시간이 조금 더 걸립니다.

'EventSetMillisecondTimer( 10 );'를 선택 하면 그런 다음 TIMEFRAME PERIOD를 TIMEFRAME PERIOD로 변경 하고 새 VLINE을 차트 (내가 원하는 것)에 로드할 때 거의 볼 수 없습니다.

이때 EURUSD'기타 기호 ( GBPUSD 등) ' 로 변경하면 내 표시기 가 VLINE으로 가득 차게 로드되지 않습니다 . 그것은 단지 문제 일 뿐입니다 (/ 저에게는) .

그렇지 않으면: 'EventSetMillisecondTimer( 1250 );'를 선택 하면 부하에 대한 문제 는 보이지 않습니다. 그것은 완벽하게 작동합니다 .
그러나 여기에 문제 가 있습니다 (/ 저에게) . TIMEFRAME PERIOD를 변경할 때 '관련 없는' 시간이 조금 더 걸립니다.

따라서 저 를 너무 명확하게 이해하고 계시다면 시간을 내어 의견을 말씀해 주십시오 (이 문제를 어떻게 해결할 수 있는지 도와주세요) . 아니면 저 를 너무 명확하게 이해 하지 못하는 경우 시간을 낭비하지 마십시오 .

귀하의 의견에 훨씬 더 감사드립니다 - 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
  }
//+------------------------------------------------------------------+
또한 OnDeint() 함수의 ObjectsDeleteAll() 함수는 새 프레임에서 다시 생성되기 전에 모든 것이 제거되도록 합니다.
 

추가로 새 양초가 발생할 때마다 라인을 업데이트하려면 이전 페이지의 예제와 마지막 예제를 결합하여 다음을 제공할 수 있습니다.

datetime M1,M5,M15,M30,H1,H4,D1,W1,MN1;
//+------------------------------------------------------------------+
//| 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
  }
//+------------------------------------------------------------------+
문제가 더 있으면 코드를 보여주세요.
 
Keith Watford :

나는 다른 사람에 대해 잘 알지 못하지만 글꼴, 색상, 굵게 및 기울임꼴 등의 혼합이 산만하고 성가신 것을 알았습니다. 사실 나는 이 글을 읽는데 방해가 되지 않았다 .

나는 당신의 시간을 낭비하지 말라고 말했다.
 

Max Enrik :

키스 왓포드 :

나는 다른 사람에 대해 잘 알지 못하지만 글꼴, 색상, 굵게 및 기울임꼴 등의 혼합이 산만하고 성가신 것을 알았습니다. 사실 나는 이 글을 읽는데 방해가 되지 않았다 .


나는 당신의 시간을 낭비하지 말라고 말했다.
왜 아무 댓글도 없이 제 글을 인용한 거죠?