"MQL5 Tarif Defteri Pozisyon Parametrelerini MetaTrader 5 Strateji Test Cihazında Analiz Etme" makalesi için tartışma
İyi akşamlar, lütfen bana yardımcı olun, CheckNewBar fonksiyonunda new_bar statik değişkeni ilk satırda sıfırlanıyor ve daha sonra fonksiyonun mantığı sıfıra eşit olup olmadığına dayanıyor. Lütfen anlamadığım yeri söyler misiniz?!?!!!?!
bool CheckNewBar() { //--- Geçerli bar açılış zamanı için değişken static datetime new_bar=NULL; //--- Geçerli bar açılış zamanını elde etmek için dizi static datetime time_last_bar[1]={0}; //--- Geçerli çubuğun açılış zamanını alır // Alım sırasında bir hata oluştuysa, bunu rapor edeceğiz if(CopyTime(_Symbol,Period(),0,1,time_last_bar)==-1) { Print(__FUNCTION__,": Bar açılış saati kopyalanırken hata oluştu: "+IntegerToString(GetLastError())+""); } //--- Eğer bu ilk fonksiyon çağrısı ise if(new_bar==NULL) { // Saati ayarlayın new_bar=time_last_bar[0]; Print(__FUNCTION__,": Başlatma ["+_Symbol+"][TF: "+TimeframeToString(Period())+"][" +TimeToString(time_last_bar[0],TIME_DATE|TIME_MINUTES|TIME_SECONDS)+"]"); return(false); // Yanlış döndür ve çık } //--- Zaman farklıysa if(new_bar!=time_last_bar[0]) { new_bar=time_last_bar[0]; // Saati ayarlayın ve çıkın return(true); // Zamanı hatırlayın ve true değerini döndürün } //--- Bu noktaya geldik - yani çubuk yeni değil, false döndürelim return(false); }
İyi akşamlar, lütfen bana yardımcı olun, CheckNewBar fonksiyonunda new_bar statik değişkeni ilk satırda sıfırlanıyor ve daha sonra fonksiyonun mantığı sıfıra eşit olup olmadığına dayanıyor. Lütfen anlamadığım yeri söyler misiniz?!?!!!?!
Yardım diyor ki:
static anahtar sözcüğüyle bildirilenyerel değişkenler, işlevin var olduğu süre boyunca değerlerini korur. İşlevin her bir sonraki çağrısında, bu tür yerel değişkenler bir önceki çağrıda sahip oldukları değerleri içerir.
Yani, CheckNewBar() fonksiyonunun yeni bir çağrısında, new_bar değişkeni fonksiyonun bir önceki çağrısında aldığı değeri koruyacaktır, ancak ilk satırda yeni bir değer atanacaktır NULL...... ve sonra tüm bunların nedenini ve nasıl çalıştığını anlamıyorum. Lütfen kafa karışıklığımı giderin, büyük olasılıkla aptal bir yerdeyim, ama NEREDE ?????
İyi akşamlar, lütfen bana yardımcı olun, CheckNewBar fonksiyonunda new_bar statik değişkeni ilk satırda sıfırlanıyor ve daha sonra fonksiyonun mantığı sıfıra eşit olup olmadığına dayanıyor. Lütfen anlamadığım yeri söyler misiniz?!?!!!?!
Yardımı doğru anladıysam,static datetimenew_bar=NULL; satırında" Başlangıç değerleri belirtilmezse, statik bellek sınıfının değişkenleri sıfır başlangıç değeri alır". Yani hiç null ile başlatılmamalıydı ve o zaman mantık kusursuz olurdu. Ya da değil ????
Yardımı doğru anladıysam,static datetimenew_bar=NULL; " Başlangıç değerleri belirtilmezse, statik bellek sınıfı değişkenleri sıfır başlangıç değeri alır." Yani hiç null ile başlatılmamalıydı ve o zaman mantık kusursuz olurdu. Ya da değil mi?
Değişkenler her zaman başlatılmalıdır. Bu yazılı olmayan bir yasadır. Bunu yerine getirmeyenler er ya da geç bulunması çok zor hatalar yakalarlar :)
Statik değişken nasıl çalışır:
//+------------------------------------------------------------------+ //|Test EA.mq5 | //|Telif Hakkı © 2018, Vladimir Karputov | //| http://wmua.ru/slesar/ | //+------------------------------------------------------------------+ #property copyright "Telif Hakkı © 2018, Vladimir Karputov" #property link "http://wmua.ru/slesar/" #property version "1.000" //+------------------------------------------------------------------+ //| Uzman başlatma işlevi| //+------------------------------------------------------------------+ int OnInit() { //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Uzman başlangıçtan kaldırma işlevi| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Uzman tik fonksiyonu| //+------------------------------------------------------------------+ void OnTick() { //--- sadece yeni çubuğun doğumu sırasında çalışırız static datetime PrevBars=0; Print("PrevBars ",PrevBars); datetime time_0=iTime(Symbol(),Period(),0); if(time_0==PrevBars) return; PrevBars=time_0; Print("New bar. PrevBars ",PrevBars); } //+------------------------------------------------------------------+
Uzmanlar sekmesine yazdırın. OnTick() işlevinin ilk girdisi, yeni bir çubuk olan statik bir değişkenin başlatılmasıdır.
2018.01.08 00:00:00 PrevBars 1970.01.01 00:00:00 2018.01.08 00:00:00 New bar. PrevBars 2018.01.08 00:00:00 2018.01.08 00:00:30 PrevBars 2018.01.08 00:00:00 2018.01.08 00:00:59 PrevBars 2018.01.08 00:00:00 2018.01.08 00:01:00 PrevBars 2018.01.08 00:00:00 2018.01.08 00:01:00 New bar. PrevBars 2018.01.08 00:01:00 2018.01.08 00:01:30 PrevBars 2018.01.08 00:01:00 2018.01.08 00:02:00 PrevBars 2018.01.08 00:01:00
Değişkenler her zaman başlatılmalıdır. Bu yazılı olmayan bir yasadır. Bunu yerine getirmeyenler er ya da geç bulunması çok zor hataları yakalıyor :)
Statik değişken nasıl çalışır?
Uzmanlar sekmesine çıktı. OnTick() işlevinin ilk girdisi, yeni bir çubuk olan statik bir değişkenin başlatılmasıdır.
Tamam, anladım, kısa ve anlaşılır cevabınız için teşekkürler.

- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Yeni makale MQL5 Tarif Defteri Pozisyon Parametrelerini MetaTrader 5 Strateji Test Cihazında Analiz Etme yayınlandı:
"MQL5 Tarif Defteri: Özel Bilgi Panelindeki Pozisyon Özellikleri" adlı önceki makalesinden Uzman Danışmanın değiştirilmiş bir versiyonunu sunacağız. Ele alacağımız sorunlardan bazıları, çubuklardan veri alma, mevcut sembol üzerindeki yeni çubuk olaylarını kontrol etme, Standart Kitaplığın bir alım satım sınıfını bir dosyaya ekleme, alım satım sinyallerini aramak için bir fonksiyon ve alım satım işlemlerini yürütmek için bir fonksiyon oluşturmanın yanı sıra OnTrade() fonksiyonundaki alım satım olaylarını belirlemeyi içerir.
Temel olarak, her şey hazır ve teste geçebiliriz. Strateji Test Cihazı, görselleştirme modunda bir test yapmanızı ve varsa hataları bulmanızı sağlar. Strateji Test Cihazının kullanımı, piyasaların kapalı olduğu hafta sonlarında bile programınızı geliştirmeye devam edebilmeniz nedeniyle faydalı görülebilir.
Strateji Test Cihazını kurun, görselleştirme modunu etkinleştirin ve Başlat seçeneğine tıklayın. Uzman Danışman, Strateji Test Cihazında alım satım yapmaya başlayacak ve aşağıda gösterilene benzer bir resim ortaya çıkacaktır:
Yazar: Anatoli Kazharski