Hatalar, hatalar, sorular - sayfa 1781

 

Kararsız yürütme

  • Gösterge konumu yolu: \Indicators\Test_i.ex5
  • Uzman konumu yolu: \Experts\Test.ex5
  • Komut Dosyası Konumu Yolu: \Scripts\Test_s.ex5

Eylemlerin sırası: 'Test_s.ex5' Komut Dosyasını M15 grafiğine birkaç kez ekleyin (EURUSD sembolü)

Sonuç:

2017.02.05 15:17:59.076 OnStart 1. kez katıldı
2017.02.05 15:18:03.293 OnStart 2. kez katıldı
2017.02.05 15:18:07.760 OnStart 3. kez katıldı
2017.02.05 15:18:07.778 OnInit
2017.02.05 15:18:07.781 AçıkDeinit:1
2017.02.05 15:18:16.891 OnStart 4. kez katıldı

Katılma sonuçları farklıdır. Sonucun rastgele olması dışında farklılık göstermemeleri bekleniyordu: OnInit\OnDeinit ile satır 1. kez ve belki de 10. kez görünebilir.

//Test_i.mq5 //Индикатор
void OnInit ()                    { Print ( __FUNCTION__ ); }
void OnDeinit ( const int reason ) { Print ( __FUNCTION__ , ":" , reason ); }
int OnCalculate ( const int , const int , const int , const double & [] ) { return 0 ; }
//Test_s.mq5 //Скрипт
#import "..\\Experts\\Test.ex5"
         void OnInit ();
#import
void OnStart ()
{
         Print ( __FUNCTION__ );
         OnInit ();
}

uzman dosyası ekte (aslında kitaplık olarak kullanılıyor), kod burada https://www.mql5.com/en/forum/1111/page1801#comment_4059227

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • www.mql5.com
Форум алго-трейдеров MQL5
Dosyalar:
Test.mq5  1 kb
 

Benim hatam mı yoksa terminalin mi hatası bilmiyorum.

5. işarette
void OnStart ()
  {

double A= 1.11111 ;
double B= 1.11111 ;
double C= 1.11111 ;

long CalcX=
NormalizeDouble (A, Digits )* MathPow ( 10 ,( Digits + 1 )* 3 - 1 )+
NormalizeDouble (B, Digits )* MathPow ( 10 ,( Digits + 1 )* 2 - 1 )+
NormalizeDouble (C, Digits )* MathPow ( 10 ,( Digits + 1 )* 1 - 1 );

Print ( "CalcX=" ,CalcX);  
  }

CalcX=1111111111111111104 beklenen değeri yazdırır CalcX=1111111111111111111

 
A100 :

Grafik periyodunu değiştirirken yanlış fonksiyon çağrıları sırası

  • Gösterge konumu yolu: \Indicators\Test_i.ex5
  • Uzman konumu yolu: \Experts\Test.ex5

sıralama:

  1. Uzman Danışman 'Test.ex5'i M5 grafiğine ekleyin (sembol GBPUSD)
  2. Grafik dönemini M15 olarak değiştir
  3. Grafik dönemini M30 olarak değiştir
  4. Uzmanı grafikten kaldır

Günlükleri göster. Zamanı görmek için.

Bir grafiğe gösterge eklemenin ve bir göstergeyi grafikten çıkarmanın eşzamanlı olmayan işlemler olduğunu burada eklemek kalır.

Ayrıca, zaman çerçevesi değiştirilirken, gösterge bu zaman çerçevesinden hemen boşaltılmaz. Yeni bir zaman diliminde göstergenin yeni bir kopyası oluşturulurken. Yapıcı-yıkıcınızda baskılar görüyorum, yıkıcının hemen çağrıldığını varsayıyor musunuz? Hayır hatalısın. Yıkıcı, gösterge boşaltıldığında çağrılır ve gösterge boşaltıldıktan sadece birkaç saniye sonra gösterge boşaltılır.
 
Slawa :
Günlükleri göster. Zamanı görmek için.
Bir grafiğe gösterge eklemenin ve bir göstergeyi grafikten çıkarmanın eşzamanlı olmayan işlemler olduğunu burada eklemek kalır.
Ayrıca, zaman çerçevesi değiştirilirken, gösterge bu zaman çerçevesinden hemen boşaltılmaz. Yeni bir zaman diliminde göstergenin yeni bir kopyası oluşturulurken. Yapıcı-yıkıcınızda baskılar görüyorum, yıkıcının hemen çağrıldığını varsayıyor musunuz? Hayır hatalısın. Yıkıcı, gösterge boşaltıldığında çağrılır ve gösterge boşaltıldıktan sadece birkaç saniye sonra gösterge boşaltılır.

Adımlar arasında yeterli zaman geçtiği varsayılır (grafik periyodundaki değişiklikler)

2017.02.05 19:49:49.984 I::I->M5 #adım 1: ekle
2017.02.05 19:49:49.984 OnInit->M5

2017.02.05 19:51:39.853 I::I->M15 #adım 2: değişim periyodu M5 ->M15
2017.02.05 19:51:39.853 OnInit->M15
2017.02.05 19:53:29.813 OnDeinit->M15:3 #adım 3: değişim periyodu M15->M30
2017.02.05 19:53:29.813 I::~I->M15
2017.02.05 19:53:29.864 I::I->M30
2017.02.05 19:53:29.864 OnInit->M30

2017.02.05 19:54:03.245 OnDeinit->M30:3 #adım 4: değişim periyodu M30->H1
2017.02.05 19:54:03.245 I::~I->M30
2017.02.05 19:54:03,286 I::I->H1
2017.02.05 19:54:03.286 OnInit->H1
2017.02.05 19:55:02.984 I::I->H4 #adım 5: değişim periyodu H1 ->H4
2017.02.05 19:55:02.984 OnInit->H4
2017.02.05 19:55:02.984 OnDeinit->H1:3
2017.02.05 19:55:02.984 I::~I->H1

2017.02.05 19:55:50.697 I::I->D1 #adım 6: değişim periyodu H4 ->D1
2017.02.05 19:55:50.697 OnInit->D1
2017.02.05 19:55:50.697 OnDeinit->H4:3
2017.02.05 19:55:50.697 I::~I->H4
2017.02.05 19:56:11.122 OnDeinit->M5: 1 #adım 7: sil
2017.02.05 19:56:11.122 I::~I->M5

2017.02.05 19:56:11.122 OnDeinit->D1:1
2017.02.05 19:56:11.123 I::~I->D1

Eşzamansızlık yalnızca bir adımdaki farklı işlev çağrıları sırasını etkiler (3 ve 5 numaralı adımlarda görüldüğü gibi)

Gördüğünüz gibi, ilki (adım #2: iki satır çıktı) hariç, grafik periyodundaki tüm sonraki değişiklikler beklendiği gibi gerçekleşir (3. adıma benzer: dört satır çıktı). Ve neden harita periyodunun ilk değişikliği diğerlerinden farklı olsun? Nasıl daha iyi/daha kötü? Neden 2. adımdaki (ve yalnızca ondan gelen) iki eksik çıktı satırı 7. adıma geçti (kırmızıyla vurgulanmıştır)?

 
-Aleks- :

Benim hatam mı yoksa terminalin mi hatası bilmiyorum.

CalcX=1111111111111111104 beklenen değeri yazdırır CalcX=1111111111111111111

Önemli ondalık basamak sayısı iki katına çıkarsa > DBL_DIG=15 , o zaman olağan kurallar - çalışmaz
 
A100 :

Adımlar arasında yeterli zaman geçtiği varsayılır (grafik periyodundaki değişiklikler)

2017.02.05 19:49:49.984 I::I->M5 #adım 1: ekle
2017.02.05 19:49:49.984 OnInit->M5

2017.02.05 19:51:39.853 I::I->M15 #adım 2: değişim periyodu M5 ->M15
2017.02.05 19:51:39.853 OnInit->M15
2017.02.05 19:53:29.813 OnDeinit->M15:3 #adım 3: değişim periyodu M15->M30
2017.02.05 19:53:29.813 I::~I->M15
2017.02.05 19:53:29.864 I::I->M30
2017.02.05 19:53:29.864 OnInit->M30

2017.02.05 19:54:03.245 OnDeinit->M30:3 #adım 4: değişim periyodu M30->H1
2017.02.05 19:54:03.245 I::~I->M30
2017.02.05 19:54:03,286 I::I->H1
2017.02.05 19:54:03.286 OnInit->H1
2017.02.05 19:55:02.984 I::I->H4 #adım 5: değişim periyodu H1 ->H4
2017.02.05 19:55:02.984 OnInit->H4
2017.02.05 19:55:02.984 OnDeinit->H1:3
2017.02.05 19:55:02.984 I::~I->H1

2017.02.05 19:55:50.697 I::I->D1 #adım 6: değişim periyodu H4 ->D1
2017.02.05 19:55:50.697 OnInit->D1
2017.02.05 19:55:50.697 OnDeinit->H4:3
2017.02.05 19:55:50.697 I::~I->H4
2017.02.05 19:56:11.122 OnDeinit->M5:1 #adım 7: sil
2017.02.05 19:56:11.122 I::~I->M5

2017.02.05 19:56:11.122 OnDeinit->D1:1
2017.02.05 19:56:11.123 I::~I->D1

Eşzamansızlık yalnızca bir adımdaki farklı işlev çağrıları sırasını etkiler (3. ve 5. adımlarda görüldüğü gibi)

Gördüğünüz gibi, ilki (2. adım) hariç, grafik periyodundaki sonraki tüm değişiklikler beklendiği gibi gerçekleşir (3. adıma benzer şekilde). Ve neden harita periyodunun ilk değişikliği diğerlerinden farklı olsun? Nasıl daha iyi/daha kötü?

tekrar açıklamaya çalışacağım

M5 grafiğinde bazı göstergeler var. Zaman çerçevesini M5'ten M15'e değiştirirken, aynı göstergenin ikinci bir kopyası oluşturulur. Her iki göstergeye de bir komut gönderilir - ilki M5 Deinit'te, ikincisi M15 Init'te. Aynı zamanda, bu komutlardan hangisinin diğerinden önce yürütüleceği önceden bilinmiyor - burada farklı iplikler arasında klasik yarışlar var.

Bundan sonra, ilk gösterge için kullanım sayacı azaltılacaktır. Kullanım sayacı sıfırlandıktan birkaç saniye sonra gösterge tablodan kaldırılacaktır. Bu durumda, bu göstergenin global nesnelerinin yıkıcıları çağrılır.
 
Slawa :
tekrar açıklamaya çalışacağım

M5 grafiğinde bazı göstergeler var. Zaman çerçevesini M5'ten M15'e değiştirirken, aynı göstergenin ikinci bir kopyası oluşturulur. Her iki göstergeye de bir komut gönderilir - ilki M5 Deinit'te, ikincisi M15 Init'te. Aynı zamanda, bu komutlardan hangisinin diğerinden önce yürütüleceği önceden bilinmiyor - burada farklı iplikler arasında klasik yarışlar var.

Bundan sonra, ilk gösterge için kullanım sayacı azaltılacaktır. Kullanım sayacı sıfırlandıktan birkaç saniye sonra gösterge tablodan kaldırılacaktır. Bu durumda, bu göstergenin global nesnelerinin yıkıcıları çağrılır.

Zaman çerçevesini M5'ten M15'e değiştirirken, ilk göstergeye (ve sadece ona - bu durumda M5) hiçbir M5 Deinit komutunun gönderilmediğini ve şu ana kadar grafikten boşaltılmayacağını iddia ediyorum (ve bunu kontrol etmeyi öneriyorum). kullanıcı uzmanı siler

'Test_i.ex5' içindeki yapı I hariç tutulursa (etkilemez), çıktı basitleştirilir:


2017.02.05 20:49:06.842 OnInit->M5

2017.02.05 20:49:21.253 OnInit->M15
(*) dönem değişikliği M5 -> M15: gösterge M5 yüksüz değil
2017.02.05 20:56:40.001 OnDeinit->M15:3             periyot değişikliği M15 -> M30: gösterge M15 hemen boşaltılır
2017.02.05 20:56:40.132 OnInit->M30

(*) üzerinden 5 dakikadan fazla zaman geçti ve M5 göstergesi boşaltılmadı

Uzmanı grafikten çıkarma

2017.02.05 20:57:35.176 OnDeinit->M5:1 göstergesi M5 yalnızca uzman silindikten sonra kaldırılır
2017.02.05 20:57:35.177 OnDeinit->M30:1

 
Slawa :
tekrar açıklamaya çalışacağım

M5 grafiğinde bazı göstergeler var. Zaman çerçevesini M5'ten M15'e değiştirirken, aynı göstergenin ikinci bir kopyası oluşturulur. Her iki göstergeye de bir komut gönderilir - ilki M5 Deinit'te, ikincisi M15 Init'te. Aynı zamanda, bu komutlardan hangisinin diğerinden önce yürütüleceği önceden bilinmiyor - burada farklı iplikler arasında klasik yarışlar var.

Bundan sonra, ilk gösterge için kullanım sayacı azaltılacaktır. Kullanım sayacı sıfırlandıktan birkaç saniye sonra gösterge tablodan kaldırılacaktır. Bu durumda, bu göstergenin global nesnelerinin yıkıcıları çağrılır.
Hangi yayınlardan bahsettiğinizi açıklar mısınız? Bir karakterin tüm göstergeleri aynı iş parçacığında çalışmıyor mu?
 
Vladimir Gribachev :

Bill Williams tarafından göstergeleri kurarken hatalar

fraktalları koy - koy

AO koy - ADX koy

1031 inşa

100-500 yıllık bir hata, /MQx/Indicators dizin yapısı değiştiğinde menü güncellenmiyor :-) Hata o kadar eski ki, zaten bir özellik olarak algılanıyor, alışın.
 
A100 :
Önemli ondalık basamak sayısı iki katına çıkarsa > DBL_DIG=15 , o zaman olağan kurallar - çalışmaz

Ve hangileri çalışıyor?

Yardım, uzun süre için maksimum değerin 9223372036854775807 olduğunu söylüyor - açıkçası buna ulaşamıyorum.

Neden: