Gösterge Çeşitli Sorular - sayfa 5

 
Marco vd Heijden :
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 ( 10    ); // 1st will read in 10   | if won't read try next
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.

int counter;
//+------------------------------------------------------------------+
//| 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?
Bu yorumun 'anahtar' operatörü ve zaman aralıkları hakkında çok daha net bir şekilde açıkladığı harika yorum için teşekkürler.

Bir kez daha mükemmel yorum, çok teşekkürler dostum .

//---

Şimdi size bu göstergem hakkında bilgi vermem gerekiyor.
Çünkü belki derdimi anlatamadım (ama son yorumunuz bana daha çok yardımcı oldu)...

...göstergem , istediğim (/ istediğim) (/ istediğim) çalışıyor.

Gösterge şu şekilde çalışır:

otomatik olarak ilerle / 'VLINE'ı göster (hangisini istiyorum)
bana son bir haftadaki 'VLINE'ları gösteriyor (hangisini istiyorum)
geçişli Dönem Çizgisi yok (hangisini istiyorum)
sürekli yükseltme (aralıklarla) sonraki her PERIOD_**' de yalnızca bir kez (hangisini istiyorum)
ve daha fazlası...
Marco & whroeder1'e bir kez daha ÖZEL TEŞEKKÜRLER (sadece bana yardımcı olmadı ve bana çok şey öğretmedi)

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)

Şu anda EURUSD'yi 'diğer semboller ( GBPUSD vb. gibi) ' olarak değiştirirsem, göstergem VLINE'larla dolu olarak yüklenmeyecek . Bu sadece bir problem (/ benim için) .

Aksi takdirde: 'EventSetMillisecondTimer( 1250 );' seçeneğini seçersem Yüklerle ilgili herhangi bir sorun görmüyorum. Mükemmel çalışıyor .
Ama burada bir sorun var (/ benim için) biraz daha 'alakasız' zamanlar alıyor - ZAMAN ÇERÇEVESİ DÖNEMlerini değiştirdiğimde.

Bu yüzden beni bu kadar net anlıyorsan lütfen yorum yapmak için zaman ayır (ve bu sorunu nasıl çözebilirim yardım et) veya beni bu kadar net anlamadıysan zamanını boşa harcama lütfen .

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.

Max Enrik :
Bu yorumun 'anahtar' operatörü ve zaman aralıkları hakkında çok daha net bir şekilde açıkladığı harika yorum için teşekkürler.

Bir kez daha mükemmel yorum, çok teşekkürler dostum .

//---

Şimdi size bu göstergem hakkında bilgi vermem gerekiyor.
Çünkü belki derdimi anlatamadım (ama son yorumunuz bana daha çok yardımcı oldu)...

...göstergem , istediğim (/ istediğim) (/ istediğim) çalışıyor.

Gösterge şu şekilde çalışır:

otomatik olarak ilerle / 'VLINE'ı göster (hangisini istiyorum)
bana son bir haftadaki 'VLINE'ları gösteriyor (hangisini istiyorum)
geçişli Dönem Çizgisi yok (hangisini istiyorum)
sürekli yükseltme (aralıklarla) sonraki her PERIOD_**' de yalnızca bir kez (hangisini istiyorum)
ve daha fazlası...
Marco & whroeder1'e bir kez daha ÖZEL TEŞEKKÜRLER (sadece bana yardımcı olmadı ve bana çok şey öğretmedi)

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)

Şu anda EURUSD'yi 'diğer semboller ( GBPUSD vb. gibi) ' olarak değiştirirsem, göstergem VLINE'larla dolu olarak yüklenmeyecek . Bu sadece bir problem (/ benim için) .

Aksi takdirde: 'EventSetMillisecondTimer( 1250 );' seçeneğini seçersem Yüklerle ilgili herhangi bir sorun görmüyorum. Mükemmel çalışıyor .
Ama burada bir sorun var (/ benim için) biraz daha 'alakasız' zamanlar alıyor - ZAMAN ÇERÇEVESİ DÖNEMlerini değiştirdiğimde.

Bu yüzden beni bu kadar net anlıyorsan lütfen yorum yapmak için zaman ayır (ve bu sorunu nasıl çözebilirim yardım et) veya beni bu kadar net anlamadıysan zamanını boşa harcama lütfen .

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
  }
//+------------------------------------------------------------------+
Ayrıca OnDeint() işlevindeki ObjectsDeleteAll() işlevine dikkat edin; bu, yeni karenizde yeniden oluşturulmadan önce her şeyin kaldırılmasını sağlayacaktır.
 

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:

datetime M1,M5,M15,M30,H1,H4,D1,W1,MN1;
//+------------------------------------------------------------------+
//| 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
  }
//+------------------------------------------------------------------+
Daha fazla sorun varsa, lütfen biraz kod gösterin.
 
Keith Watford :

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 .

Vakit kaybetmeyin dedim.
 

Max Enrik :

Keith Watford'un fotoğrafı.

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 .


Vakit kaybetmeyin dedim.
Neden yorum yapmadan yazımı alıntıladın?