Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1374

 
Alexey Viktorov # :

Biri sana kötü öğretmiş. _LastError değişkeni, alınan değeri bir sonraki hata oluşana kadar saklar.


Bakın, ana kodun başında, örneğin aşağıdaki hata oluşur:

ERR_INVALID_DATETIME

4010

Yanlış tarih ve/veya saat değeri


Ardından kod bir nesne oluşturur ve _LastError'ın üzerine şununla yazılır:

ERR_OBJECT_NOT_FOUND

4202

Grafik nesnesi bulunamadı


Genelde yaptığım gibi _LastError kontrolü kodun sonundaysa, 4202 alırım ve onu görmezden gelirim. Yani, 4010 hatası fark edilmeyecektir. nerede hatalıyım?

Alexey Viktorov


Piyasanın gereği, broker\ds sunucusundan alınan yürütme hatalarının olmamasıdır.

Teşekkürler, bunu bilmiyordum, tüm hataların yasak olduğunu sanıyordum.

 
leon_17 # :

Bakın, ana kodun başında, örneğin aşağıdaki hata oluşur:

ERR_INVALID_DATETIME

4010

Yanlış tarih ve/veya saat değeri


Ardından kod bir nesne oluşturur ve _LastError'ın üzerine şununla yazılır:

ERR_OBJECT_NOT_FOUND

4202

Grafik nesnesi bulunamadı


Genelde yaptığım gibi _LastError kontrolü kodun sonundaysa, 4202 alırım ve onu görmezden gelirim. Yani, 4010 hatası fark edilmeyecektir. nerede hatalıyım?

Teşekkürler, bunu bilmiyordum, tüm hataların yasak olduğunu sanıyordum.

Aynen öyle. yanılmıyorsun...

 

Merhaba, tavsiye verebilecek olan var mı?

Her çubuğun zaman değerlerini diziye özel olarak yazıyorum. Grafikte 3000 bar sınırı vardır.

Görev:

- Her yeni çubukla değer dizisini kaydırın.

 void CNewBar::PriceHL2()
  {
   int start= 0 ;
   ArrayResize ( this .m_tim_pr_hl2, this .m_rt);
  
   if ( this .m_pc!= 0 )
     {
      start= this .m_pc;
       ArrayCopy ( this .m_tim_pr_hl2, this .m_tim_pr_hl2, 0 , this .m_rt- this .m_pc);
     }  
   for ( int b= start; b < this .m_rt; b++)
     {
       this .m_tim_pr_hl2[b]= iTime ( this .m_symbol, this .m_timeframe, this .m_rt-b);
     }
  }

Düzgün çalışmasını sağlayamıyorum.

(this.m_rt-this.m_pc)=1 ise, diziyi yeni çubukta kaydırmakta haklı mıyım?

 ArrayCopy ( this .m_tim_pr_hl2, this .m_tim_pr_hl2, 0 , this .m_rt- this .m_pc); // this.m_rt-this.m_pc=1
 
Mikhail Toptunov # :

Merhaba, tavsiye verebilecek olan var mı?

Her çubuğun zaman değerlerini diziye özel olarak yazıyorum. Grafikte 3000 bar sınırı vardır.

Görev:

- Her yeni çubukla değer dizisini kaydırın.

Düzgün çalışmasını sağlayamıyorum.

(this.m_rt-this.m_pc)=1 ise, diziyi yeni çubukta kaydırmakta haklı mıyım?

Yani dizinin boyutu tam olarak 3000 olmalı ve yeni bir çubuk oluştuğunda önce sıfır indeksi yeniden yazılmalı ……… ve sonuna yeni bir değer eklenmeli mi?

Eğer doğru anladıysam, o zaman neden döngü? Diziyi ilkinden başlayarak sıfır dizininde kendi içine kopyalamanız ve ardından son dizine yeni değeri girmeniz yeterlidir.

 
Alexey Viktorov # :

Nesne bulunamazsa, bu nesne arama hatasıdır ...

ERR_OBJECT_NOT_FOUND

4202

Grafik nesnesi bulunamadı


Onu uyarmaya gerek yok...

Birkaç test yaptım ... işte olanlar. MQL5'te, nesneler oluşturulurken ObjectFind() kullanılması gerekli değildir.
Bir nesne, varlığı için herhangi bir ön kontrol yapılmadan (sadece ObjectCreate aracılığıyla) oluşturulabilir ve OnTick'in içinde bile bu tür kod herhangi bir _LastError hatası oluşturmaz.

MQL5 sistem kodunun derinliklerinde nasıl uygulandığını bilmiyorum, belki de zaten mevcut değilse, nesnenin yaratılacağına dair bir tür kontrol vardır. Ancak en azından MQL5 ObjectFind() içinde bir nesne oluştururken ortaya çıkıyor.   sadece gerekli değil. Ve görünüşe göre tüm özellikleri her kene üzerinde sürekli olarak güncellenmektedir .

MQL4 hakkında söylenemez. Orada, zaten var olan bir nesnenin üzerine bir nesne oluşturmak 4200 hatasına neden olur ( "Nesne zaten var"). Yani, onu oluşturmak için ObjectFind() kullanımı zaten zorunludur. Aynı zamanda, özelliklerini _LastError hataları oluşturmadan sürekli yeniden güncellemeden kapatmak için basit bir fırsat olmaya devam ediyor.

Lütfen bulgularımı onaylayın.

 
Alexey Viktorov # :

Yani dizinin boyutu tam olarak 3000 olmalı ve yeni bir çubuk oluştuğunda önce sıfır indeksi yeniden yazılmalı ……… ve sonuna yeni bir değer eklenmeli mi?

Eğer doğru anladıysam, o zaman neden döngü? Diziyi ilkinden başlayarak sıfır dizininde kendi içine kopyalamanız ve ardından son dizine yeni değeri girmeniz yeterlidir.

Eh, evet, her şey açık görünüyor, ancak bir ara, örneğin bir gecikme ortaya çıkarsa, iki çubuk belirir, onları yazarım.

Teşekkürler anladım, CopyTime'ı deneyeceğim.

 
leon_17 # :

Birkaç test yaptım ... işte olanlar. MQL5'te, nesneler oluşturulurken ObjectFind() kullanılması gerekli değildir.
Bir nesne, varlığı için herhangi bir ön kontrol yapılmadan (sadece ObjectCreate aracılığıyla) oluşturulabilir ve OnTick'in içinde bile bu tür kod herhangi bir _LastError hatası oluşturmaz.

MQL5 sistem kodunun derinliklerinde nasıl uygulandığını bilmiyorum, belki de zaten mevcut değilse, nesnenin yaratılacağına dair bir tür kontrol vardır. Ancak en azından MQL5 ObjectFind() içinde bir nesne oluştururken ortaya çıkıyor.   sadece gerekli değil. Ve görünüşe göre tüm özellikleri her kene üzerinde sürekli olarak güncellenmektedir .

MQL4 hakkında söylenemez. Orada, zaten var olan bir nesnenin üzerine bir nesne oluşturmak 4200 hatasına neden olur ( "Nesne zaten var"). Yani, onu oluşturmak için ObjectFind() kullanımı zaten gereklidir. Aynı zamanda, özelliklerini _LastError hataları oluşturmadan sürekli yeniden güncellemeden kapatmak için basit bir fırsat olmaya devam ediyor.

Lütfen bulgularımı onaylayın.

Bu kesinlikle hatalarla ilgili değil. Gerçek şu ki, bir nesne oluşturduktan sonra, ona belirli özellikler atanır ve neden makine zamanını ve kaynaklarını, özellikleri değiştirmeden yeniden tanımlamak için boşa harcar. Varlığını kontrol etmek çok daha ucuzdur ve nesne varsa, yalnızca değiştirilmesi gerekenlere yeni özellikler atayın. Örneğin, bir metin etiketi veya Etiket, genellikle yalnızca bu nesnelerdeki metnin değiştirilmesi gerekir. Ve her şey olduğu gibi kalır...
 
Mikhail Toptunov # :

Eh, evet, her şey açık görünüyor, ancak bir ara, örneğin bir gecikme ortaya çıkarsa, iki çubuk belirir, onları yazarım.

Teşekkürler anladım, CopyTime'ı deneyeceğim.

Eh, eğer CopyTime aracılığıyla o zaman hiç sorun olmaz. Sadece mevcut 3000 çubuktan kopyalayın ve bu kadar.

 

Bekleyen bir emir verirken veya piyasadan bir pozisyon açarken program kodunda normal takip eden durdurma seviyesi nasıl ayarlanır?

Manuel olarak nasıl yapıldığı anlaşılır. Anormal takip durdurma programları ilgi çekici değildir.

Şimdiden teşekkür ederim.

 
   for ( int symbols; symbols < SymbolsTotal ( true ); symbols++) 
      {
         Print ( SymbolName (symbols , true ));
      }

Bu tasarım neden çalışmıyor? Hata nerede... (günlük boş)


Ve emaye, ayrıca boş

 enum c_mode
  {
   Auto,
   Manual,    
  };

input c_mode MODE         = Auto;

if (MODE==Auto) 
      {
       Print ( "MODE=Auto" );
      }