Gösterge Çeşitli Sorular - sayfa 3

 
whroeder1 :

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.

Evet! Şu anda sizi çok net anlıyorum ve çok daha fazla teşekkürler .

Ve 20 numaralı yorumunuz bana başka bir fikir verdi. (bir zamanlar bunu benimle paylaşmıştın ve şimdi aklımda tutuyorum)

Ayrıca göstergem için daha iyi kod yazmaya çalışıyorum ve şimdi #18 - @Marco vd Heijden yorumunu öğrenmeye çalışıyorum

O zaman yorumunuzu kapsamlı bir şekilde araştıracağım.

Tekrar teşekkürler!

 
Marco vd Heijden :

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;

Öncelikle çok net yorumunuz için çok teşekkür ederim .

Hâlâ Göstergede kalıyorum. Bir şey denedim ve benim için iyi çalışıyor, ancak bir sorunla karşılaştım, bunu 'Strateji Test Cihazı'nda test edemiyorum - bu bana ölümcül bir hata veriyor: MT4 'Yanıt Vermiyor'.

#1 - Marco, nereden geldiğini bana bildirir misin lütfen?

#2 - Aşağıdaki kod doğru mu?

Denediğim kodun altında.

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

Üzerinde çalışmayı bıraktım, yorumunuzdan sonra devam edeceğim. (Aslında yukarıdaki kod için endişeleniyorum, birlikte kullanırken diğer göstergelerimi ezecek.)

Çok teşekkürler.

 
Zamanlayıcı işlevi MT4 strateji test cihazında çalışmaz, bu nedenle onu onay işlevine koymanız gerekir.
 
Marco vd Heijden : Zamanlayıcı işlevi MT4 strateji test cihazında çalışmıyor, bu yüzden onu onay işlevine koymanız gerekiyor.
Backtest'te OnTimer() çalışmıyor (M. Ali) - MQL4 forum
MT4 Backtester (Migel) İçin Grafik Etkinliği - MQL4 forum
 
Marco vd Heijden :
Zamanlayıcı işlevi MT4 strateji test cihazında çalışmaz, bu nedenle onu onay işlevine koymanız gerekir.

Çok teşekkürler!

Kesin olarak biliyorum , bu sorun koddan gelmiyor.

 
Nereden biliyorsunuz?
 

Marco vd Heijden :

İşte bir örnek:

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

Çok teşekkür ederim.

Bu yorum bana çok şey öğretti .

Görünüşe göre bu kod benim için iyi çalışıyor, hangisini önceki yorumumda yayınladım.

Ama bu kodun (hangisi Period_M5 için çalışıyor) Saat 12:00'de (belki 13:00, 14:00...) ve 'OBJ_VLINE'ın geçmiş zamanlarını yok sayan kodun altında çalışmamasına ihtiyacım var (bu iyi benim için) ama şu anda Saat 12:00 iken aşağıdaki kod bana ayrıca şu anki VLINE saatini gösteriyor ama ben istemiyorum.

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

Sorunumu çözen bir şey denedim ama düzgün çalışmadı .

Ayrıca ekran görüntüsü ekledim.


Lütfen bana yardım edin, bu sorunu gerçekten çözmem gerekiyor.

Şimdiden çok teşekkürler.

Dosyalar:
 
Marco vd Heijden :
Nereden biliyorsunuz?

Çünkü bağlantı kesildi ve bağlantı kesilirken ' Strateji Test Cihazı ' kullanmaya çalıştım ve bu benim için mükemmel çalışıyor .

Sizin ve Bay William'ın yorumlarını okuduktan sonra bundan emin olacağım .

Bu yeterli değil mi, üzgünüm?

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

Bu örnekte her saat başı bir satır alırsınız AMA 12:00 çünkü !=farklı 12 ifadeyle hariç tutarsınız, yani == 12'ye eşit olduğunda satır yok.

 
Marco vd Heijden :

Bu örnekte her saat başı bir satır alırsınız AMA 12:00 çünkü !=farklı 12 ifadeyle hariç tutarsınız, yani == 12'ye eşit olduğunda satır yok.

Harika adam , teşekkürler :))

Bu basit ama buna aldırmıyorum. Sadece basit ve sadece vay .

(Aslında bu göstergemde '==' kullanıyorum ama gerçekten 'OnTimer'a odaklandım)

//--- ikinci kez düzenlendi...

Bu benim için iyi çalışıyor, ancak saat 00:00 olduğunda - ek geçerli saat VLINE'ı tekrar gösterir.

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
)

(Araştırıldığım için bu yorumu birkaç kez güncelledim)

Lütfen bana yardım et.