Gösterge Çeşitli Sorular - sayfa 2

 

#Nesne Sırası

3 Nesne yarattım ve bu nesneler birbirini geçiyor.

#1 Yatay Çizgi , #2 Dikey Çizgi, #3 Trend Çizgisi

Onları z konumlarına ayarlamam gerekiyor.

Peki onlara nasıl z pozisyon değeri verebilirim?

Teşekkürler.

 
Marco vd Heijden :

Peki, OnInit() içinde tüm satırları çizebilir ve ardından son çubuğun açık zamanı değiştiğinde yeni bir çubuk olduğunu bileceksiniz.

Ama tam olarak ne yapmak istediğinden emin değilim.

TAMAM! Bir şey deneyeceğim . Sonra buraya geri geleceğim .

Teşekkürler.

 

@Marco vd Heijden

Bununla ilgili araştırmaya başlamadan önce. Gerçekten sormam gerek , start() işlevi grafiği (/ MT4 Platformları) yavaşlatıyor mu?

ps Tüm kodları start() özel işlevine koydum, bu kod Dönem Satırları - H1, H4, D1, W1, MN1 için çalışıyor.

İyi hafta sonları ve şimdiden teşekkürler.

 
Max Enrik : Gerçekten sormam gerek , start() işlevi grafiği (/ MT4 Platformları) yavaşlatıyor mu?
Tüm göstergeler güncellenirken terminal başka bir şey yapmaz. Bu nedenle göstergeler uyuyamaz, ticaret yapamaz veya web istekleri yapamaz.
 
whroeder1 :
Tüm göstergeler güncellenirken terminal başka bir şey yapmaz. Bu nedenle göstergeler uyuyamaz, ticaret yapamaz veya web istekleri yapamaz.

Yorumun için teşekkür ederim. (Yorumunuzdan sonra göstergelerimde bir şeyleri değiştirmeye karar verdim - çünkü neredeyse tüm göstergelerimi start() işlevinde yaptım.)

Aşağıdaki kodu start() işlevine koydum, bu yüzden göstergem için hangi yolun iyi olduğu konusunda bana yardımcı olabilir misiniz?

Aslında, sürekli güncellemeyi durdurmak için aşağıdaki kodu nasıl düzenleyebilirim hiçbir fikrim yok (tüm start() kodları init() işlevine konmadan) .

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

Teşekkürler!

 

Gerçekten yardıma ihtiyacım var, lütfen biri soruma cevap versin.

Teşekkürler.

 
Max Enrik : Aslında sürekli güncellemeyi durdurmak için aşağıdaki kodu nasıl düzenleyebilirim hiçbir fikrim yok
  1. Yeni barkodu yeni aya uyarlayın.
    Çubuklar güvenilmezdir (yenileme/yeniden bağlanma, çizelgedeki çubukların sayısını değiştirebilir) hacim güvenilmezdir (kayıp tikler) Daima süreyi kullanın. Yeni mum - MQL4 forumu
    Yeni bir çubuk işlevi oluşturmaya katılmıyorum, çünkü her onay için yalnızca bir kez çağrılabilir. Bir değişken birden çok kez test edilebilir.
    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 );
    Nesne adlarında kaydırma numaralarını kullanmayın . Yeni bir çubuk başladığında, tüm nesneleriniz yanlış adlandırılır ve yeni bir "<prefix> 0 " oluşturamazsınız. Orijinal yayınınızda haklıydınız (zaman kullanarak)
    string    _vlineName_MN1 = _prefix + "PERIOD_MN1 - " + TimeToStr ( _timeCvrt_MN1, TIME_DATE )    ;
    Veya zamanı bir int'ye bir dizgeye dönüştürün.
 

Lütfen bunu gösterge yerine bir uzmana koyun, bu gelecekte ticaret stratejinizi eklemek istediğinizde daha kolay kullanım sağlar.

Çubuk sorunu için, çubuk açılış saatini bir tarih saat değişkeninde saklayın ve kaydedilen zamanı gerçek zamanla karşılaştırın, ardından yeni bir çubuk ortaya çıktığında tetiklenir.

İşte bir örnek:

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. Yeni barkodu yeni aya uyarlayın.
    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 );
    Nesne adlarında kaydırma numaralarını kullanmayın . Yeni bir çubuk başladığında, tüm nesneleriniz yanlış adlandırılır ve yeni bir "<prefix> 0 " oluşturamazsınız. Orijinal yayınınızda haklıydınız (zaman kullanarak)
    string    _vlineName_MN1 = _prefix + "PERIOD_MN1 - " + TimeToStr ( _timeCvrt_MN1, TIME_DATE )    ;
    Veya zamanı bir int'ye bir dizgeye dönüştürün.

Yorumun için teşekkürler.

Yorumunuzdan beri yorumunuzu araştırmaya başladım. (çünkü 'Void OnTick()' işlevini hiç kullanmadım)

Bu yüzden, aşağıdaki bağlantıyı okudum ve 'OnTick()' işlevinin yalnızca Uzman Danışmanlar için çalıştığını anlıyorum.

Grafiğimde zaten bir Uzman Danışman (Ticaret Paneli) kullanıyorum (tüm göstergelerimi ve uzman danışmanımı tek bir grafik penceresinde kullanmam gerekiyor) .

Eğer 'Expert Advisor'da sizin kodunuzu kullanabilirim demek istediyseniz, aslında kullanmayacağım çünkü 'Ticaret Panelimi' geliştireceğim, ayrıca ayrı ayrı kod yazmak istiyorum. (Gelecekte bu göstergeleri (benim için önemli olan) birleştireceğim - ama şimdilik değil.)

Her neyse, Bay William yorumunuz gerçekten bana fikir verdi ve bana bir şeyler öğretti.

(ps, yanlış düşünüyorsam lütfen bana bildirin)

Ve bir kez daha büyük teşekkürler!
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 : (çünkü 'Void OnTick()' işlevini hiç kullanmadım)

Pre-build 600 (3 Şubat 20 14 ) sadece start() vardı. Şimdi OnTick (EA'lar), OnCalculate (göstergeler) ve OnStart (scriptler) var. Bir göstergeden bahsettiğinizi unutmuşum.

Yeni Olay İşleme İşlevleri-İşlevler-Dil Temelleri-MQL4 Başvurusunu kullanmaya başlayın. Geri incelemelerinizi nasıl doğru şekilde yapacağınıza bakın.

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
Neden: