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

 
whroeder1 :

사전 빌드 600(2014년 2월 3 )에는 start()만 있었습니다. 이제 OnTick (EA), OnCalculate (지표) 및 OnStart (스크립트)가 있습니다. 지표에 대해 이야기하고 있다는 것을 잊었습니다.

새로운 이벤트 처리 기능 - 기능 - 언어 기본 - MQL4 참조 를 사용하여 시작하십시오. 룩백을 올바르게 수행하는 방법을 참조하세요 .

응! 지금 나는 당신 을 훨씬 명확 하게 이해 하고 , 훨씬 더 감사 합니다 .

그리고 귀하의 #20 댓글은 저에게 또 다른 아이디어 를 주었습니다. (당신이 저에게 그것을 공유했고 지금은 그것을 제 마음 속에 간직하고 있습니다)

또한 내 지표에 대해 더 나은 코드를 작성 하려고 노력하고 있으며 이제 주석 #18 - @Marco vd Heijden배우 려고 합니다.

그러면 나는 당신의 의견을 광범위하게 조사할 것입니다.

다시 한번 감사합니다!

 
Marco vd Heijden :

나중에 거래 전략을 추가할 때 더 쉽게 사용할 수 있도록 지표 대신 전문가에게 맡기십시오.

막대 문제의 경우 막대 여는 시간 을 datetime 변수에 저장하고 기록된 시간을 실시간과 비교하기만 하면 새 막대가 발생할 때마다 트리거됩니다.

다음은 예입니다.

datetime M1,M5,M15,M30,H1,H4,D1,W1,MN1;

우선 명확하게 의견 을 보내 주셔서 대단히 감사 합니다.

나는 여전히 Indicator 에 머물러 있습니다. 나는 뭔가를 시도했고 그것은 나에게 작동하지만 한 가지 문제 에 직면했습니다. 'Strategy Tester'에서 테스트할 수 없습니다 . MT4 '응답하지 않음'이라는 치명적인 오류가 발생합니다.

#1 - 마르코 출처를 알려주시겠습니까?

#2 - 아래 코드가 맞습니까?

내가 시도한 코드 아래.

string _prefix = "_Preriod_M5 - " ;
string _vlineName_M5 ;
int _prd = PERIOD_M5 ;

int _prd_add = PeriodSeconds ( _prd ) ;
datetime _dt_Prd_M5 ;

int _time_M5 ;
datetime _prdCvrt_M5 ;
datetime _timeCvrt_M5 ;

//---init
EventSetMillisecondTimer ( 10 );
_CreateLines();

//---timer
if ( _dt_Prd_M5 != iTime ( Symbol (), _prd, 0 ) )
{
    _dt_Prd_M5 = iTime ( Symbol (), _prd, 0 );
    _CreateLines();
}

//---_CreateLines()
     //---
     int _dayCnt_M5 = 0 ;
     int _cnt_M5 = iBarShift ( Symbol (), 0 , iTime ( Symbol (), PERIOD_M15 , _dayCnt_M5 ) );
     for ( int i = 0 ; i < _cnt_M5; i++ )
    {
         //---time convert
        _time_M5     = Time [i];
        _prdCvrt_M5  = PeriodSeconds ( _prd );
        _timeCvrt_M5 = _time_M5 - ( _time_M5 % _prdCvrt_M5 ) + _prdCvrt_M5;

         //---name
        _vlineName_M5 = _prefix + "PERIOD_M5 - " + TimeToStr ( _timeCvrt_M5, TIME_DATE | TIME_MINUTES );

         //---
         if ( _Period < PERIOD_M30 )
        {
            {
                 ObjectCreate ( _vlineName_M5, OBJ_VLINE , 0 , _timeCvrt_M5, 0 );
            }
        }
    }
     ObjectMove ( 0 , _vlineName_M5, 0 , _dt_Prd_M5, 0 );

나는 그것에 대한 작업을 중단했습니다. 귀하의 의견에 따라 계속할 것입니다. (사실 나는 위의 코드를 함께 사용하는 동안 다른 지표를 망가뜨릴까봐 걱정한다.)

큰 감사를 드린다.

 
타이머 기능은 MT4 전략 테스터 에서 작동하지 않으므로 틱 기능에 넣어야 합니다.
 
Marco vd Heijden : 타이머 기능은 MT4 전략 테스터 에서 작동하지 않으므로 틱 기능에 넣어야 합니다.
백테스트에서 OnTimer() 수행하지 않음(M. Ali) - MQL4 forum
MT4 백테스터용 차트 이벤트(Migel) - MQL4 forum
 
Marco vd Heijden :
타이머 기능은 MT4 전략 테스터 에서 작동하지 않으므로 틱 기능에 넣어야 합니다.

큰 감사를 드린다!

나는 그 문제가 코드에서 비롯된 것이 아니라는 것을 확실히 알고 있습니다.

 
어떻게 아세요?
 

Marco vd Heijden :

다음은 예입니다.

datetime  M5;

//+------------------------------------------------------------------+
int OnInit ()
  {
//--- create timer
   EventSetMillisecondTimer ( 250 );

//--- create some things

   CreateLines(); // Function that creates time lines

//--- load open times
   M5= iTime ( Symbol (), PERIOD_M5 , 0 );

//--- set timelines

   ObjectMove ( 0 , "Time-M5" , 0 ,M5, 0 );

//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer ()
  {
   if (M5!= iTime ( Symbol (), PERIOD_M5 , 0 ))
     {
      M5= iTime ( Symbol (), PERIOD_M5 , 0 );  // overwrite old value with new value  
       //Alert("New Bar on M5! ",TimeToString(M5,TIME_SECONDS));
       // do something...
       //ObjectMove(0,"Time-M5",0,M5,0);
     }
  }
//+------------------------------------------------------------------+

정말 감사합니다.

이 댓글은 저 에게 많은 것을 가르쳐 줍니다.

그 코드가 이전 댓글에 게시한 저에게 잘 맞는 것 같습니다.

하지만 해당 코드 (Period_M5에서 작동하는 코드) 가 시계 12:00 (아마도 13:00, 14:00...) 에서 작동하지 않고 'OBJ_VLINE'의 과거 시간 을 무시하는 코드 가 필요합니다(좋습니다. 나를 위해) 그러나 현재 코드 아래의 시계 12:00현재 시간 VLINE을 추가로 보여주지만 원하지 않습니다.

if ( TimeHour ( _timeCvrt_M5 ) != 12 )
{
     ObjectCreate ( _vlineName_M5, OBJ_VLINE , 0 , _timeCvrt_M5, 0 );
}   //---if Close

문제 를 해결하는 방법을 시도했지만 제대로 작동하지 않았습니다 .

또한 스크린샷 을 추가했습니다.


그 문제를 해결해야 하는 저를 도와주세요.

미리 감사드립니다.

파일:
 
Marco vd Heijden :
어떻게 아세요?

연결이 끊어 지고 연결이 끊어지는 동안 ' Strategy Tester '를 사용하려고 했기 때문에 완벽하게 작동합니다 .

내가 당신Mr. William 의 코멘트를 읽고 나서 그것에 대해 확실히 알게 되었습니다 .

그것으로 충분하지 않습니까? 죄송합니다.

 
if ( TimeHour ( _timeCvrt_M5 ) != 12 )
{
     ObjectCreate ( _vlineName_M5, OBJ_VLINE , 0 , _timeCvrt_M5, 0 );
}   //---if Close

이 예에서는 매시간 12시에 한 줄을 얻습니다. 왜냐하면 != diff then 12 문을 제외하고 == 12일 때 줄이 없기 때문입니다.

 
Marco vd Heijden :

이 예에서는 매시간 12시에 한 줄을 얻습니다. 왜냐하면 != diff then 12 문을 제외하고 == 12일 때 줄이 없기 때문입니다.

멋진 남자 , 감사 합니다 :))

그것은 간단하지만 나는 그것을 신경 쓰지 않습니다. 그냥 간단 하고 그냥 와우 .

(실제로는 이 표시기에서 '=='를 사용하지만 실제로는 'OnTimer'에 집중했습니다)

//--- 두 번째 편집...

이것은 나에게 효과적이지만 시간이 00:00이 될 때 - 추가현재 시간 VLINE이 다시 표시됩니다.

if (
     TimeHour ( _timeCvrt_M5 ) == 1   ||
     TimeHour ( _timeCvrt_M5 ) == 2   ||
     TimeHour ( _timeCvrt_M5 ) == 3   ||

     TimeHour ( _timeCvrt_M5 ) == 5   ||
     TimeHour ( _timeCvrt_M5 ) == 6   ||
     TimeHour ( _timeCvrt_M5 ) == 7   ||

     TimeHour ( _timeCvrt_M5 ) == 9   ||
     TimeHour ( _timeCvrt_M5 ) == 10 ||
     TimeHour ( _timeCvrt_M5 ) == 11 ||

     TimeHour ( _timeCvrt_M5 ) == 13 ||
     TimeHour ( _timeCvrt_M5 ) == 14 ||
     TimeHour ( _timeCvrt_M5 ) == 15 ||

     TimeHour ( _timeCvrt_M5 ) == 17 ||
     TimeHour ( _timeCvrt_M5 ) == 18 ||
     TimeHour ( _timeCvrt_M5 ) == 19 ||

     TimeHour ( _timeCvrt_M5 ) == 21 ||
     TimeHour ( _timeCvrt_M5 ) == 22 ||
     TimeHour ( _timeCvrt_M5 ) == 23
)

(내가 조사했기 때문에 이 댓글을 몇 번 업데이트했습니다)

도와주세요.