Maklum bahwa pendekatan ini tidak dapat diandalkan, karena MT berhenti memperbarui jumlah pub setelah setelan pub maksimum tercapai. Jadi, di sana! Metode yang dapat diandalkan adalah memeriksa waktu.Originally Posted by ;
Maklum bahwa pendekatan ini tidak dapat diandalkan, karena MT berhenti memperbarui jumlah pub setelah setelan pub maksimum tercapai. Jadi, di sana! Metode yang dapat diandalkan adalah memeriksa waktu.Originally Posted by ;
Yup, setuju, tentu saja tidak menggunakan metode Bars. Metode untuk menggunakan SeriesInfoInteger dan memanggilnya untuk LASTBAR_DATE Anda dan tanyakan lagi hingga waktu fungsi Anda habis atau Anda mendapatkan hasil yang bersih. Berikut ini contoh fungsi MTF isNewBar ... Inserted Code #include lt; Arrays \ ArrayObj.mqhgt; class NewBars: public CObject {ENUM_TIMEFRAMES m_timeframe; datetime m_last_bar_time; orang: NewBars (ENUM_TIMEFRAMES tf): m_timeframe (tf), m_last_bar_time (0) {} bool isNewBar () uint ms = GetTickCount (); arus datetime; lakukan ResetLastError (); curr = (datetime) SeriesInfoInteger (_Symbol, m_timeframe, SERIES_LASTBAR_DATE); while (_LastError! = ERR_NO_ERROR GetTickCount () - ms lt; 500); if (curr gt; 0 _LastError == ERR_NO_ERROR curr! = m_last_bar_time) bool res = true; if (m_last_bar_time == 0) res = false; m_last_bar_time = curr; kembali res; return false; bool isMatching (ENUM_TIMEFRAMES tf) mengembalikan m_timeframe == tf? Benar salah; }; bool isNewBar (konst ENUM_TIMEFRAMES interval) static CArrayObj tfs; untuk (int I = tfs.Total () - 1; igt; = 0; I--) NewBars * tf = dynamic_castlt; NewBars * gt; (tfs.At (I)); if (tf.isMatching (interval)) kembalikan tf.isNewBar (); tfs.Add (new NewBars (interval)); return false;Originally Posted by ;
1 Attachment (s)
Itu tidak (berhenti memperbarui) Bar () melebihi jumlah maksimum bar dalam skenario ketika pengaturan pub maksimal tercapai (dan terlampaui)Originally Posted by ;
Terima kasih, Anda sangat baik dalam memberikan contoh ini, di sini dan di utas saya yang lain. Saya tahu apa yang telah Anda lakukan di sini tetapi linguistik tidak memahami saya karena saya belum mempelajari sisi OO dari MQL4. Saya juga tidak sepenuhnya yakin bahwa kode Anda akan bekerja dalam konteks naskah, tetapi saya tidak sepenuhnya berpendidikan.Originally Posted by ;
Terima kasih, saya membaca jawaban yang bertentangan di berbagai utas jadi saya tidak yakin tapi itu berhasil untuk saya, jadi saya tahu apa sihOriginally Posted by ;
Terima kasih telah menjawab, jadi saya berhak menggunakan metode Bars ini atau tidak? Merasa seperti itu lebih mudah maka sistem Waktu dan bahwa saya lebih suka untuk menjaga hal-hal sederhanaOriginally Posted by ;
Tidak ada metode yang kompleks: Kode Tersimpan statis datetime _prevTime = 0; datetime _currTime = iTime (NULL, kerangka waktu yang diinginkan, 0); bool _isNewBar = (_prevTime! = _currTime); if (_isNewBar) _prevTime = _currTime;Originally Posted by ;
Terima kasih, saya memiliki sesuatu seperti skrip saya tetapi tidak berfungsi (diposting sebelumnya di artikel awal) bahkan ketika saya menambahkan RefreshRates (). Saya akan mencoba lagi dengan kode Anda, dengan menambahkan ResreshRate () di dalam dan di luar lingkaran sehingga skrip mendapat informasi baru.Originally Posted by ;
Dimasukkan Kode/- Variabel Worldwide ------------------------------------------ ------------------------ datetime ArrayTime # 91; # 93 ;, LastTime; void OnTick () if (NewBar (PERIOD_CURRENT))/kode Anda bool NewBar (int period) bool firstRun = false, newBar = false; ArraySetAsSeries (ArrayTime, true); CopyTime (Symbol (), periode, 0,2, ArrayTime); if (LastTime == 0) firstRun = true; if (ArrayTime # 91; 0 # 93; gt; LastTime) jika (firstRun == false) newBar = true; LastTime = ArrayTime # 91; 0 # 93 ;; Menghasilkan newBar;
Selain itu, periksa kode ini yang cocok untuk kerangka waktu acak (ditemukan menggunakan kutipan harga pertama): Kode Disisipkan #property void ketat OnStart () detik waktu = _Stage * 60;/nyatakan jumlah apa pun dalam detik datetime t_last_recorded = 0;/untuk kepentingan demonstrasi: D while (! IsStopped ()) RefreshRate (); datetime t = TimeCurrent ();/waktu terakhir yang diketahui, tanggal kutipan t_normalized = t/momen * momen; when (t_normalized gt; t_last_recorded)/bar baru printf (bar baru!); t_last_recorded = t_normalized; Tidur (1);