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

 

#객체 순서

나는 3개의 객체 를 만들었고 그 객체는 서로 교차합니다.

#1 수평 라인 , #2 수직 라인, #3 추세선

나는 그들에게 z 위치 를 설정해야합니다.

그렇다면 어떻게 z 위치 값을 줄 수 있습니까?

감사해요.

 
Marco vd Heijden :

음, OnInit()에서 모든 선을 그린 다음 마지막 막대의 오픈 시간이 변경될 때마다 새 막대가 있다는 것을 알게 될 때마다 새로 그릴 수 있습니다.

하지만 정확히 무엇을 하려는 것인지 잘 모르겠습니다.

확인! 나는 무언가를 시도 할 것이다. 그럼 나는 여기로 돌아올 것이다 .

감사해요.

 

@마르코 vd 하이덴

그것에 대한 연구 를 시작하기 전에. 정말 묻고 싶습니다. start() 함수 가 차트(/MT4 플랫폼)를 느리게 합니까?

ps 나는 모든 코드를 start() 특수 함수에 넣었습니다. 이 코드는 H1, H4, D1, W1, MN1의 기간 라인 에서 작동합니다.

좋은 주말 되시고 미리 감사드립니다.

 
Max Enrik : 정말 묻고 싶습니다. start() 함수가 차트(/MT4 플랫폼)를 느리게 합니까?
모든 표시기가 업데이트되는 동안 터미널은 다른 작업을 수행하지 않습니다. 이것이 지표가 잠을 잘 수 없거나 거래하거나 웹 요청 을 할 수 없는 이유입니다.
 
whroeder1 :
모든 표시기가 업데이트되는 동안 터미널은 다른 작업을 수행하지 않습니다. 이것이 지표가 잠을 자거나 거래하거나 웹 요청을 할 수 없는 이유입니다.

당신의 의견에 감사드립니다. (귀하의 의견을 듣고 난 내 표시기에서 모든 것을 변경하기로 결정했습니다 - 거의 내가 start() 함수 에서 내 모든 표시기를 만들었기 때문입니다.)

나는 start() 함수에 아래 코드를 넣었습니다. 그래서 당신은 내 지표에 어떤 방식이 좋은지 도와줄 수 있습니까?

실제로 (init() 함수에 모든 start() 코드를 넣지 않고) 지속적으로 업데이트를 중지 하기 위해 아래 코드를 어떻게 편집할 수 있는지 전혀 모릅니다.

//---MN1
int _cnt_MN1 = 11 ; // 12 lines for a year 24 for two years and etc.
for ( int i_MN = 0 ; i_MN < _cnt_MN1; i_MN++ )
{
     if ( _Period < PERIOD_MN1 )
    {
         //---time convert
         datetime _tltpMN1      = TimeToString ( iTime ( Symbol (), PERIOD_MN1 , i_MN ), TIME_DATE );
         datetime _time         = iTime ( Symbol (), PERIOD_MN1 , i_MN ); // + PeriodSeconds( PERIOD_MN1  );
         //---name
         string _vlineName_MN = "PERIOD_MN1- " + IntegerToString ( i_MN );

         ObjectCreate      ( 0 , _vlineName_MN, OBJ_VLINE           , 0 , _time, 0      );
         ObjectSetString   ( 0 , _vlineName_MN, OBJPROP_TOOLTIP     , _tltpMN1        );
         ObjectSetInteger ( 0 , _vlineName_MN, OBJPROP_COLOR       , C'180,160,080'   );
         ObjectSet         (    _vlineName_MN, OBJPROP_BACK        , true             );
         ObjectSet         (    _vlineName_MN, OBJPROP_HIDDEN      , true             );
         ObjectSet         (    _vlineName_MN, OBJPROP_SELECTABLE , false            );
         ObjectSet         (    _vlineName_MN, OBJPROP_STYLE       , STYLE_SOLID      );
    }   //---if Close
}   //---for Close

감사해요!

 

정말 도움 이 필요합니다. 누군가 내 질문에 대답해 주세요.

감사해요.

 
Max Enrik : 실제로 계속 업데이트를 중지 하려면 아래 코드를 편집하는 방법을 모르겠습니다.
  1. 새 달에 새 바코드를 적용합니다.
    막대가 신뢰할 수 없음(새로 고침/재연결이 차트의 막대 수를 변경할 수 있음) 볼륨이 신뢰할 수 없음(눈금 누락) 항상 시간을 사용하십시오. 새 양초 - MQL4 forum
    틱당 한 번만 호출할 수 있기 때문에 새 막대 기능을 만드는 데 동의하지 않습니다. 변수는 여러 번 테스트할 수 있습니다.
    void OnTick (){
       static datetime BOMcur= 0 ;                dateTime BOMpre     = BOMcur;  
       BOMcur = iTime ( _Symbol , PERIOD_MN1 , 0 ); bool      isNewMonth = BOMcur != BOMpre;
       if (isNewMonth){
          DO_UPDATE(); ...
       }

  2. for ( int i_MN = 0 ; i_MN < _cnt_MN1; i_MN++ ){ ...
       string _vlineName_MN = "PERIOD_MN1- " + IntegerToString ( i_MN );
    개체 이름에 시프트 번호 를 사용하지 마십시오 . 새 막대가 시작되면 모든 개체의 이름이 잘못 지정되어 새 "<prefix> 0 "을 만들 수 없습니다. 당신은 당신의 원래 게시물에 바로 그것을 가지고 있습니다 (시간 사용)
    string    _vlineName_MN1 = _prefix + "PERIOD_MN1 - " + TimeToStr ( _timeCvrt_MN1, TIME_DATE )    ;
    또는 시간을 int를 문자열로 변환합니다.
 

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

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

다음은 예입니다.

datetime M1,M5,M15,M30,H1,H4,D1,W1,MN1;
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- create timer
   EventSetMillisecondTimer ( 250 );

//--- create some things

   CreateLines(); // Function that creates time lines

//--- 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 );


//--- set timelines
   ObjectMove ( 0 , "Time-M1" , 0 ,M1, 0 );
   ObjectMove ( 0 , "Time-M5" , 0 ,M5, 0 );
   ObjectMove ( 0 , "Time-M15" , 0 ,M15, 0 );
   ObjectMove ( 0 , "Time-M30" , 0 ,M30, 0 );
   ObjectMove ( 0 , "Time-H1" , 0 ,H1, 0 );
   ObjectMove ( 0 , "Time-H4" , 0 ,H4, 0 );
   ObjectMove ( 0 , "Time-D1" , 0 ,D1, 0 );
   ObjectMove ( 0 , "Time-W1" , 0 ,W1, 0 );
   ObjectMove ( 0 , "Time-MN1" , 0 ,MN1, 0 );



//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+


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

   if (M5!= iTime ( Symbol (), PERIOD_M5 , 0 ))
     {
      M5= iTime ( Symbol (), PERIOD_M5 , 0 );
       //Alert("New Bar on M5! ",TimeToString(M5,TIME_SECONDS));
       // do something...
       //ObjectMove(0,"Time-M5",0,M5,0);
     }

   if (M15!= iTime ( Symbol (), PERIOD_M15 , 0 ))
     {
      M15= iTime ( Symbol (), PERIOD_M15 , 0 );
       //Alert("New Bar on M15! ",TimeToString(M15,TIME_SECONDS));
       // do something...
       //ObjectMove(0,"Time-M15",0,M15,0);
     }

   if (M30!= iTime ( Symbol (), PERIOD_M30 , 0 ))
     {
      M30= iTime ( Symbol (), PERIOD_M30 , 0 );
       //Alert("New Bar on M30! ",TimeToString(M30,TIME_SECONDS));
       // do something...
       //ObjectMove(0,"Time-M30",0,M30,0);
     }

   if (H1!= iTime ( Symbol (), PERIOD_H1 , 0 ))
     {
      H1= iTime ( Symbol (), PERIOD_H1 , 0 );
       //Alert("New Bar on H1! ",TimeToString(H1,TIME_SECONDS));
       // do something...
       //ObjectMove(0,"Time-H1",0,H1,0);
     }

   if (H4!= iTime ( Symbol (), PERIOD_H4 , 0 ))
     {
      H4= iTime ( Symbol (), PERIOD_H4 , 0 );
       //Alert("New Bar on H4! ",TimeToString(H4,TIME_SECONDS));
       // do something...
       //ObjectMove(0,"Time-H4",0,H4,0);
     }

   if (D1!= iTime ( Symbol (), PERIOD_D1 , 0 ))
     {
      D1= iTime ( Symbol (), PERIOD_D1 , 0 );
       //Alert("New Bar on D1! ",TimeToString(D1,TIME_SECONDS));
       // do something...
       //ObjectMove(0,"Time-D1",0,D1,0);
     }

   if (W1!= iTime ( Symbol (), PERIOD_W1 , 0 ))
     {
      W1= iTime ( Symbol (), PERIOD_W1 , 0 );
       //Alert("New Bar on W1! ",TimeToString(W1,TIME_SECONDS));
       // do something...
       //ObjectMove(0,"Time-W1",0,W1,0);
     }

   if (MN1!= iTime ( Symbol (), PERIOD_MN1 , 0 ))
     {
      MN1= iTime ( Symbol (), PERIOD_MN1 , 0 );
       //Alert("New Bar on MN1! ",TimeToString(MN1,TIME_SECONDS));
       // do something...
       //ObjectMove(0,"Time-MN1",0,MN1,0);
     }

  }
//+------------------------------------------------------------------+
 
whroeder1 :
  1. 새 달에 새 바코드를 적용합니다.
    void OnTick (){
       static datetime BOMcur= 0 ;                dateTime BOMpre     = BOMcur;  
       BOMcur = iTime ( _Symbol , PERIOD_MN1 , 0 ); bool      isNewMonth = BOMcur != BOMpre;
       if (isNewMonth){
          DO_UPDATE(); ...
       }

  2. for ( int i_MN = 0 ; i_MN < _cnt_MN1; i_MN++ ){ ...
       string _vlineName_MN = "PERIOD_MN1- " + IntegerToString ( i_MN );
    개체 이름에 시프트 번호 를 사용하지 마십시오 . 새 막대가 시작되면 모든 개체의 이름이 잘못 지정되어 새 "<prefix> 0 "을 만들 수 없습니다. 당신은 당신의 원래 게시물에 바로 그것을 가지고 있습니다 (시간 사용)
    string    _vlineName_MN1 = _prefix + "PERIOD_MN1 - " + TimeToStr ( _timeCvrt_MN1, TIME_DATE )    ;
    또는 시간을 int로 변환하여 문자열로 변환합니다.

귀하의 의견에 감사드립니다.

귀하의 의견 이후 로 귀하의 의견을 조사하기 시작했습니다. (나는 'Void OnTick()' 함수를 사용한 적이 없기 때문에)

그래서 나는 아래 링크를 읽고 'OnTick()' 기능이 Expert Advisors에 대해서만 실행되고 있음을 이해합니다.

내 차트에서 이미 하나의 전문가 고문 (무역 패널) 을 사용하고 있습니다( 하나의 차트 창에서 모든 지표와 전문가 고문을 사용해야 함) .

'Expert Advisor'에서 귀하의 코드를 사용할 수 있다는 것을 의미했다면 실제로 'Trade Panel' 을 개선할 것이기 때문에 사용하지 않을 것이며 별도로 코드를 작성 하고 싶습니다. (나에게 중요한 지표 의 무리를 결합할 가능성이 있지만 지금은 아닙니다.)

어쨌든, Mr. William 당신의 코멘트는 정말로 저에게 아이디어를 줬고 또한 저에게 무언가를 가르쳐주었습니다.

(ps 혹시 제가 잘못 생각하고 있다면 알려주세요)

그리고 다시 한 번 큰 감사를 드립니다!
Event Handling Functions - Functions - Language Basics - MQL4 Reference
Event Handling Functions - Functions - Language Basics - MQL4 Reference
  • docs.mql4.com
Event Handling Functions - Functions - Language Basics - MQL4 Reference
 
Max Enrik : (나는 'Void OnTick()' 함수를 사용한 적이 없기 때문에)

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

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

Event Handling Functions - Functions - Language Basics - MQL4 Reference
Event Handling Functions - Functions - Language Basics - MQL4 Reference
  • docs.mql4.com
Event Handling Functions - Functions - Language Basics - MQL4 Reference
사유: