TimeCurrent() ve iTime() hata/sorunu

 

Merhaba millet,

Sadece ilginç bir sorunla/hatayla karşılaşın ve daha önce tanımlanıp tanımlanmadığından veya komisyoncuya özel olup olmadığından emin değilsiniz.

Bazı gösterge kodlarında aşağıdakileri kullanmayı deneyin, başlangıçta göstergenin çalışmasını sağlayın ve MT4'ü ilk çalıştırdığınızda değerleri not edin (yeniden başlatmadan önce MT4'ün en az 10 dakika boyunca çalışmadığından emin olun).

 Print (TimeToStr( TimeCurrent (), TIME_DATE | TIME_MINUTES ));
Print (TimeToStr(iTime( NULL , PERIOD_M1 , 0 ), TIME_DATE | TIME_MINUTES ));

Döndürülen sürelerin aslında MT4'ün en son çalıştığı zaman olduğunu fark edeceksiniz.

Bunu aşmak için koduma bir gösterge için ideal olmayan bir gecikme eklemek zorunda kaldım.

Herhangi birinin daha anlamlı çözümleri olup olmadığını merak ediyordum. İdeal olarak, her seferinde başlangıçta döndürülen doğru MT4 sunucu saatini istemem.

Saygılarımızla

PaulB

 
Paul_B :

Merhaba millet,

Sadece ilginç bir sorunla/hatayla karşılaşın ve daha önce tanımlanıp tanımlanmadığından veya komisyoncuya özel olup olmadığından emin değilsiniz.

Bazı gösterge kodlarında aşağıdakileri kullanmayı deneyin, başlangıçta göstergenin çalışmasını sağlayın ve MT4'ü ilk çalıştırdığınızda değerleri not edin (yeniden başlatmadan önce MT4'ün en az 10 dakika boyunca çalışmadığından emin olun).

Döndürülen sürelerin aslında MT4'ün en son çalıştığı zaman olduğunu fark edeceksiniz.

Bunu aşmak için koduma bir gösterge için ideal olmayan bir gecikme eklemek zorunda kaldım.

Herhangi birinin daha anlamlı çözümleri olup olmadığını merak ediyordum. İdeal olarak, her seferinde başlangıçta döndürülen doğru MT4 sunucu saatini istemem.

Saygılarımızla

PaulB


Bu ??
 Print (TimeToStr( TimeCurrent (), TIME_DATE | TIME_SECONDS ));
 

Merhaba deVries,

TIME_SECONDS de kullanabilirsiniz, kod init{} içinde veya başlangıç{} başlangıcında olduğu sürece gerçekten önemli değil.

Mesele şu ki, potansiyel olarak saatler veya günler önce olabilecek MT4'ün en son ne zaman çalıştığını alırsınız.

 
Paul_B :

Merhaba millet,

Sadece ilginç bir sorunla/hatayla karşılaşın ve daha önce tanımlanıp tanımlanmadığından veya komisyoncuya özel olup olmadığından emin değilsiniz.

Bazı gösterge kodlarında aşağıdakileri kullanmayı deneyin, başlangıçta göstergenin çalışmasını sağlayın ve MT4'ü ilk çalıştırdığınızda değerleri not edin (yeniden başlatmadan önce MT4'ün en az 10 dakika boyunca çalışmadığından emin olun).

Döndürülen sürelerin aslında MT4'ün en son çalıştığı zaman olduğunu fark edeceksiniz.

Bunu aşmak için koduma bir gösterge için ideal olmayan bir gecikme eklemek zorunda kaldım.

Herhangi birinin daha anlamlı çözümleri olup olmadığını merak ediyordum. İdeal olarak, her seferinde başlangıçta döndürülen doğru MT4 sunucu saatini istemem.

Saygılarımızla

PaulB

Belgeler bu noktada %100 açık değil mi? "Bilinen son sunucu saatini (en son teklifin gelme zamanı), 1 Ocak 1970 00:00'dan itibaren geçen saniye sayısı olarak döndürür." son onay 10 dakika önceyse, TimeCurrent() o zamana dayalı bir tarih saat döndürür. . .
 
RaptorUK :
Belgeler bu noktada %100 açık değil mi?

Gerçekten değil, hayır değil.

EA'lar ve belgelerde kapsanmayan göstergeler arasında önemli bir ayrım vardır: EA'lar yalnızca bir aracı bağlantısı ve yeni bir onay varsa start() öğesine bir çağrı alır, oysa göstergeler her zaman önce veya onsuz start() öğesine bir ilk çağrı alır. bir komisyoncu bağlantısı kuruluyor. Bu nedenle, TimeCurrent(), EA'larda ve göstergelerde farklı anlamlara sahip olabilir.

Bir göstergede TimeCurrent() için kesinlikle yenilenmiş bir değer istiyorsanız, muhtemelen IsConnected()'i kullanarak TimeCurrent()'in önceki bir oturumda bilinen son zamana atıfta bulunup bulunmadığını kontrol edebilirsiniz.

 

Ek bir nokta olarak, denedim bile

https://docs.mql4.com/windows/RefreshRates

TimeCurrent() öğesini çağırmadan önce ve hiçbir fark yaratmadı. Kesinlikle akılda tutulması gereken bir şey.

MT4 sunucu zamanı ile GMT arasındaki farkı almak için bazı kodların parçası olarak kullanıyorum ve sonraki hesaplamaları atıyor.

 
cyclops993 :

Gerçekten değil, hayır değil.

EA'lar ve belgelerde kapsanmayan göstergeler arasında önemli bir ayrım vardır: EA'lar yalnızca bir aracı bağlantısı ve yeni bir onay varsa start() öğesine bir çağrı alır, oysa göstergeler her zaman önce veya onsuz start() öğesine bir ilk çağrı alır. bir komisyoncu bağlantısı kuruluyor. Bu nedenle, TimeCurrent(), EA'larda ve göstergelerde farklı anlamlara sahip olabilir.

Bunu, belgelerin söylediklerini göz önünde bulundurarak alakalı olarak görmüyorum. . . TimeCurrent()'i yeni bir tik gelmeden önce kontrol ederseniz, son tik saatini alırsınız. Belgelerin söylediği bu değil mi?
 
RaptorUK :
Bunu, belgelerin söylediklerini göz önünde bulundurarak alakalı olarak görmüyorum. . . TimeCurrent()'i yeni bir tik gelmeden önce kontrol ederseniz, son tik saatini alırsınız. Belgelerin söylediği bu değil mi?

Yine de yanıltıcı, ancak bilgiç olmak istiyorsanız, sorunun TimeCurrent() tanımında değil, bunun yerine https://docs.mql4.com/runtime/start adresindeki tanımda olduğunu söyleyebilirsiniz. Bu, "Yeni teklifler geldiğinde, eklenen uzmanların start() işlevi ve özel göstergeler yürütülecek" diyor. EA'larda olduğu gibi start() öğesinin yalnızca yeni tiklerle ilişkili olarak çağrıldığına ve dolaylı olarak TimeCurrent() öğesinin MT4 yazılımının kullanıldığı önceki bir oturumdaki son tikin zamanını döndüremeyeceğine dair açık bir çıkarım vardır. .

[Yine, tüm bunlara verilecek bir yanıt, IsConnected() false döndürürse, bir göstergede start() öğesine yapılan çağrıları yok saymaktır.]

 
cyclops993 :

Hala yanıltıcı, ancak bilgiçlik yapmak istiyorsanız [...]

Daha da bilgiç olmak, yepyeni bir MT4 kurulumunuz varsa ve MT4'ü ilk kez başlatmadan önce bir gösterge eklenmiş bir grafik dosyasına kopyalarsanız, muhtemelen gösterge TimeCurrent() bildirilen start() için bir çağrı alır. 1/1/1970 olarak. Bu nedenle, TimeCurrent() belgesinin "...bilinen son sunucu zamanı veya sunucu bağlantısı yoksa 1/1/1970" demesi gerekir.

 
cyclops993 :

Daha da bilgiç olmak, yepyeni bir MT4 kurulumunuz varsa ve MT4'ü ilk kez başlatmadan önce bir gösterge eklenmiş bir grafik dosyasına kopyalarsanız, muhtemelen gösterge TimeCurrent() bildirilen start() için bir çağrı alır. 1/1/1970 olarak. Bu nedenle, TimeCurrent() dokümantasyonu "...bilinen son sunucu zamanı veya sunucu bağlantısı yoksa 1/1/1970" demelidir.

Yaygara yapmaya gerek yok. Sadece ilk/sonraki onay işaretini bekleyin, TimeCurrent() güncellendi ve her şey yolunda. Yalnızca geçmiş fiyatlarına ilişkin bir gösterge işe yaramaz.
 
angevoyageur :
Yaygara yapmaya gerek yok. Sadece ilk/sonraki onay işaretini bekleyin, TimeCurrent() güncellendi ve her şey yolunda. Yalnızca geçmiş fiyatlarına ilişkin bir gösterge işe yaramaz.
Bence sorun, ilk kez start() öğesinin bir Gösterge için çağrılmasının yeni bir onay işaretinin sonucu olmayabileceğidir. . . bu durumda TimeCurrent() yanlış zamanı bildirir. Bunu doğrulamadım. . .

Bu durumda, ilk onay işaretini görmezden gelirdim. . . ve tik 2'den itibaren normal şekilde devam edin.