Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Lütfen ne yapmaya çalıştığınızı açıklayın.
Karışıklık için özür dilerim.
Aşağıdaki gibi 3 adet ' EventSetMillisecondTimer ' ayarlamam gerekiyor (işe yaramadığını söylediniz...) . Mevcut alternatif bir yol var mı, lütfen?
EventSetMillisecondTimer ( 250 ); // 2nd will read in 250 | if won't read try next
EventSetMillisecondTimer ( 1250 ); // 3rd will read in 1250 | if read then stop reading till next PERIOD_M5
En iyi.
Zamanlayıcı, OnInit() işlevinde yalnızca bir kez ayarlanır.
Yeniden başlatmak istiyorsanız, önce eski zamanlayıcıyı öldürmeniz gerekir, bu genellikle OnDeinit() işlevinde olur.
Dediğim gibi alternatif olarak bir sayaç kullanabilirsiniz.
Örneğin 10 Milisaniyelik bir zamanlayıcıya kod koyarsanız, kod her 10 Milisaniyede bir yürütülür.
Bu, çok hızlı olduğu için büyük olasılıkla terminalinizi donduracaktır.
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit ()
{
//--- create timer
EventSetTimer ( 1 ); // 1 second
//---
return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
//--- destroy timer
EventKillTimer ();
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick ()
{
//---
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer ()
{
//--- increment counter
counter++;
//--- comment status on the chart
Comment ( IntegerToString (counter));
//--- switch timer
switch (counter)
{
case 60 :
Alert ( " 1 Minute " );
// Do Something...
break ;
case 300 :
Alert ( " 5 Minutes " );
// Do Something...
break ;
case 900 :
Alert ( " 15 Minutes " );
// Do Something...
counter= 0 ; // Reset counter on highest value.
break ;
}
// end switch timer
if (counter> 900 )
{
counter= 0 ; // Safety Mechanism
}
}
//+------------------------------------------------------------------+
Bir dakikanın yalnızca bir kez tetiklendiğini, yani her dakika tetiklenmediğini unutmayın.
5 dakika da ilk beş dakikadan sonra yalnızca bir kez tetiklenir, yani on dakikada ve 15 dakika işaretinde değil.
Örneğin her dakika tetiklemek istiyorsanız, 60 saniye 120 saniye 180 saniye vb. için kod eklemeniz gerekir.
15 dakika işareti, sayacı sıfıra ayarladığından her 15 dakikada bir tetiklenir.
Hangi mekanizmayı kullanmak istiyorsunuz, zaman aralıklarında hangi kodu tetiklemek istiyorsunuz?
Neyi başarmaya çalışıyorsun?void OnTimer ()
{
static int counter= 0 ;
static int next1m= 60 ;
static int next5m= 300 ;
static int next15m= 900 ;
//--- increment counter
counter++;
//--- comment status on the chart
Comment ( IntegerToString (counter));
//--- timer
if (counter==next1m)
{
Alert ( " 1 Minute " );
// Do Something...
next1m+= 60 ;
}
if (counter==next5m)
{
Alert ( " 5 Minutes " );
// Do Something...
next5m+= 300 ;
}
if (counter==next15m)
{
Alert ( " 15 Minutes " );
// Do Something...
counter= 0 ; // Reset counter on highest value.
next1m= 60 ;
next5m= 300 ;
}
}
İyi biri Marco.
Her zaman aralığında tetiklemek için böyle bir şey yapabilirsiniz.
Marco vd Heijden :
Hangi mekanizmayı kullanmak istiyorsunuz, zaman aralıklarında hangi kodu tetiklemek istiyorsunuz?
Neyi başarmaya çalışıyorsun?Bir kez daha mükemmel yorum, çok teşekkürler dostum .
//---
...göstergem , istediğim (/ istediğim) (/ istediğim) çalışıyor.
Gösterge şu şekilde çalışır:
Endişemi örneklerle açıklamam gerekiyor:
EURUSD grafiğini açıyorum ve göstergemi grafiğe ekliyorum ve istediğim gibi mükemmel çalışıyor , ileriye doğru hareket ediyor / gösteriyor (hatta geçmiş) VLINE'ları, TIMEFRAME PERIOD'u ve otomatik olarak PERİYOD'lara uyarlanmış aralıkları (ki bu benim istediğim) değiştirebiliyor.
Gösterge sorunum nerede? // belki sorun değil ama güncelleme için biraz daha 'alakasız' zaman gerekiyor.
'EventSetMillisecondTimer( 10 );' seçeneğini seçersem ve sonra ZAMAN ÇERÇEVESİ DÖNEMlerini herhangi bir ZAMAN ÇERÇEVESİ DÖNEMİ ile değiştiriyorum ve neredeyse (bunun ne zaman) grafiğe yeni VLINE'lar yüklediğini görmüyorum (hangisini istiyorum)
Yorumlarınız için çok daha fazlası - Marco & whroeder1
(NOT: 'operatörü değiştir' kullanmıyorum - çünkü #18 yorumunuz yükselttiğim ve üzerinde çalıştığım her şeyden daha iyi - ve benim için çok faydalı)
(İngilizce benim ana dilim değil)
Keith Watford :
İyi biri Marco.
Her zaman aralığında tetiklemek için böyle bir şey yapabilirsiniz.
Ayrıca iyi biri Keith . :)
Gerçekten bana çok yardımcı oldu, bir sonraki göstergemde kullanacağım .
Herşey gönlünce olsun.
Başka kimse hakkında bilgim yok ama yazı tipi, renkler, kalın ve italik vb. karışımınızı dikkat dağıtıcı ve sinir bozucu buluyorum. Aslında bu yazıyı okumaya cesaret edemedim.
Bir kez daha mükemmel yorum, çok teşekkürler dostum .
//---
...göstergem , istediğim (/ istediğim) (/ istediğim) çalışıyor.
Gösterge şu şekilde çalışır:
Endişemi örneklerle açıklamam gerekiyor:
EURUSD grafiğini açıyorum ve göstergemi grafiğe ekliyorum ve istediğim gibi mükemmel çalışıyor , ileriye doğru hareket ediyor / gösteriyor (hatta geçmiş) VLINE'ları, TIMEFRAME PERIOD'u ve otomatik olarak PERİYOD'lara uyarlanmış aralıkları (ki bu benim istediğim) değiştirebiliyor.
Gösterge sorunum nerede? // belki sorun değil ama güncellemek için biraz daha 'alakasız' zaman gerekiyor.
'EventSetMillisecondTimer( 10 );' seçeneğini seçersem ve sonra ZAMAN ÇERÇEVESİ DÖNEMlerini herhangi bir ZAMAN ÇERÇEVESİ DÖNEMİ ile değiştiriyorum ve neredeyse (bunun ne zaman) grafiğe yeni VLINE'lar yüklediğini görmüyorum (hangisini istiyorum)
Yorumlarınız için çok daha fazlası - Marco & whroeder1
(NOT: 'operatörü değiştir' kullanmıyorum - çünkü #18 yorumunuz yükselttiğim ve üzerinde çalıştığım her şeyden daha iyi - ve benim için çok faydalı)
(İngilizce benim ana dilim değil)
Peki, zaman dilimlerini değiştirmekle ilgiliyse, zamanlayıcı iyi bir seçenek değildir çünkü zamanlayıcı, kare değiştirildiğinde yok olur.
OnInit() işlevinde satırlarınızı oluşturabilir ve bunları OnTick() veya OnTimer() işlevlerinde güncelleyebilirsiniz.
İşte bir örnek:
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit ()
{
//--- create timer
EventSetTimer ( 60 );
//--- playsound
PlaySound ( "alert2.wav" );
//--- create moving timeline
ObjectCreate ( 0 , "Time" , OBJ_VLINE , 0 , TimeCurrent (), 0 );
//--- detect period
switch ( Period ())
{
case PERIOD_M1 :
MessageBox ( "Switched to 1 Minute Frame" );
//Do Something...
ObjectCreate ( 0 , "1-Minute" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
break ;
case PERIOD_M5 :
MessageBox ( "Switched to 5 Minutes Frame" );
//Do Something...
ObjectCreate ( 0 , "5-Minutes" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
break ;
case PERIOD_M15 :
MessageBox ( "Switched to 15 Minutes Frame" );
//Do Something...
ObjectCreate ( 0 , "15-Minutes" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
break ;
case PERIOD_M30 :
MessageBox ( "Switched to 30 Minutes Frame" );
//Do Something...
ObjectCreate ( 0 , "30-Minutes" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
break ;
case PERIOD_H1 :
MessageBox ( "Switched to 1 Hour Frame" );
//Do Something...
ObjectCreate ( 0 , "1-Hour" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
break ;
case PERIOD_H4 :
MessageBox ( "Switched to 4 Hour Frame" );
//Do Something...
ObjectCreate ( 0 , "4-Hour" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
break ;
case PERIOD_D1 :
MessageBox ( "Switched to Daily Frame" );
//Do Something...
ObjectCreate ( 0 , "Daily" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
break ;
case PERIOD_W1 :
MessageBox ( "Switched to Weekly Frame" );
//Do Something...
ObjectCreate ( 0 , "Weekly" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
break ;
case PERIOD_MN1 :
MessageBox ( "Switched to Monthly Frame" );
//Do Something...
ObjectCreate ( 0 , "Monthly" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
break ;
}
//---
return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
//--- destroy timer
EventKillTimer ();
//--- delete objects
ObjectsDeleteAll ( 0 , 0 ,- 1 );
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick ()
{
//---
ObjectMove ( 0 , "Time" , 0 , TimeCurrent (), 0 ); // Update timeline
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer ()
{
//---
ObjectMove ( 0 , "Time" , 0 , TimeCurrent (), 0 ); // Update timeline
}
//+------------------------------------------------------------------+
Ek olarak, yeni bir mum ortaya çıktığında satırları güncellemek istiyorsanız, size şunu vermek için önceki sayfadaki örneği sonuncusu ile birleştirebilirsiniz:
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit ()
{
//--- create timer
EventSetTimer ( 60 );
//--- playsound
PlaySound ( "alert2.wav" );
//--- 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 );
//--- create moving timeline
ObjectCreate ( 0 , "Time" , OBJ_VLINE , 0 , TimeCurrent (), 0 );
//--- detect period
switch ( Period ())
{
case PERIOD_M1 :
MessageBox ( "Switched to 1 Minute Frame" );
//Do Something...
ObjectCreate ( 0 , "1-Minute" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
M1= Time [ 0 ]; // store current time
break ;
case PERIOD_M5 :
MessageBox ( "Switched to 5 Minutes Frame" );
//Do Something...
ObjectCreate ( 0 , "5-Minutes" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
M5= Time [ 0 ]; // store current time
break ;
case PERIOD_M15 :
MessageBox ( "Switched to 15 Minutes Frame" );
//Do Something...
ObjectCreate ( 0 , "15-Minutes" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
M15= Time [ 0 ]; // store current time
break ;
case PERIOD_M30 :
MessageBox ( "Switched to 30 Minutes Frame" );
//Do Something...
ObjectCreate ( 0 , "30-Minutes" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
M30= Time [ 0 ]; // store current time
break ;
case PERIOD_H1 :
MessageBox ( "Switched to 1 Hour Frame" );
//Do Something...
ObjectCreate ( 0 , "1-Hour" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
H1= Time [ 0 ]; // store current time
break ;
case PERIOD_H4 :
MessageBox ( "Switched to 4 Hour Frame" );
//Do Something...
ObjectCreate ( 0 , "4-Hour" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
H4= Time [ 0 ]; // store current time
break ;
case PERIOD_D1 :
MessageBox ( "Switched to Daily Frame" );
//Do Something...
ObjectCreate ( 0 , "Daily" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
D1= Time [ 0 ]; // store current time
break ;
case PERIOD_W1 :
MessageBox ( "Switched to Weekly Frame" );
//Do Something...
ObjectCreate ( 0 , "Weekly" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
W1= Time [ 0 ]; // store current time
break ;
case PERIOD_MN1 :
MessageBox ( "Switched to Monthly Frame" );
//Do Something...
ObjectCreate ( 0 , "Monthly" , OBJ_VLINE , 0 , Time [ 0 ], 0 );
MN1= Time [ 0 ]; // store current time
break ;
}
//---
return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
//--- destroy timer
EventKillTimer ();
//--- delete objects
ObjectsDeleteAll ( 0 , 0 ,- 1 );
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick ()
{
//--- update timeline
ObjectMove ( 0 , "Time" , 0 , TimeCurrent (), 0 );
//--- check for new candles
if (M1!= iTime ( Symbol (), PERIOD_M1 , 0 ))
{
Alert ( "New candle on M1" );
ObjectMove ( 0 , "1-Minute" , 0 , iTime ( Symbol (), PERIOD_M1 , 0 ), 0 ); // Move line
M1= iTime ( Symbol (), PERIOD_M1 , 0 ); // Overwrite old with new value
}
if (M5!= iTime ( Symbol (), PERIOD_M5 , 0 ))
{
Alert ( "New candle on M5" );
M1= iTime ( Symbol (), PERIOD_M5 , 0 ); // Overwrite old with new value
}
if (M15!= iTime ( Symbol (), PERIOD_M15 , 0 ))
{
Alert ( "New candle on M15" );
M15= iTime ( Symbol (), PERIOD_M15 , 0 ); // Overwrite old with new value
}
if (M30!= iTime ( Symbol (), PERIOD_M30 , 0 ))
{
Alert ( "New candle on M30" );
M30= iTime ( Symbol (), PERIOD_M30 , 0 ); // Overwrite old with new value
}
// and so on to MN1...
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer ()
{
//---
ObjectMove ( 0 , "Time" , 0 , TimeCurrent (), 0 ); // Update timeline
}
//+------------------------------------------------------------------+
Başka kimse hakkında bilgim yok ama yazı tipi, renkler, kalın ve italik vb. karışımınızı dikkat dağıtıcı ve sinir bozucu buluyorum. Aslında bu yazıyı okumaya cesaret edemedim .
Max Enrik :
Başka kimse hakkında bilgim yok ama yazı tipi, renkler, kalın ve italik vb. karışımınızı dikkat dağıtıcı ve sinir bozucu buluyorum. Aslında bu yazıyı okumaya cesaret edemedim .