Kütüphaneler: Takvim

 

Takvim:

Takvim - geçmiş ve gerçek zamanlı temel analiz.

Takvim

Author: fxsaber

 
Üstat temeli üstlendi. Bravo! Büyük değişiklikler geliyor :)
 
Aleksey Mavrin:
Üstat temeli üstlendi. Bravo! Büyük değişiklikler geliyor :)

Henüz bir şey gelmedi. Kütüphaneler.

 
İlk yayın sırasında, kaynak kodun içine yanlışlıkla çöp girdi. Kod güncellendi.
 
Kendim için bunu bir hatırlatma olarak kullanıyorum.
#include <fxsaber\Calendar\Calendar.mqh> // https://www.mql5.com/tr/code/32430

int OnInit()
{
  return(!EventSetTimer(1));
}

void OnTimer()
{
  CALENDAR Calendar;
  
  string Currencies[2];
  
  // Geçerli karakterin para birimlerini alın.
  Currencies[0] = ::SymbolInfoString(_Symbol, SYMBOL_CURRENCY_BASE);
  Currencies[1] = ::SymbolInfoString(_Symbol, SYMBOL_CURRENCY_PROFIT);
    
  // Sembol para birimlerine göre yaklaşan önemli olayları aldı.
  Calendar.Set(Currencies);
  
  Comment(Calendar.ToString(0, 5, true)); // Çıktılarını aldım.
}

Önemli haberleri kaçırma olasılığı büyük ölçüde azalır.


Sıfırdan böyle bir balta çağrısı 0,6 ms içinde gerçekleştirilir. Elbette tüketimi sıfıra indirmek mümkündür.

 

Etkinlik takvimi çok daha ileriye doğru yazılır. Bu nedenle, MT4 verilerinden bir dosya kaydederek (örneğin bir ay önceden) MT5'te bir hatırlatıcı da kullanabilirsiniz.

MT4 için yaptığım şey bu.

 
IMHO, daha ayrıntılı dokümantasyon hala eksik. Koda bakabileceğiniz açık, ancak o zaman başkalarının kodunu analiz etmek yerine kendi kodunuzu yazabilirsiniz ;-). Özellikle, önce Set yapmadan Get'i çağırıp çağıramayacağınız ve filtreyi geri alıp alamayacağınız (anladığım kadarıyla alamazsınız) net değil. Yukarıdaki örneklerden olayın oluşumunu izlemenin daha uygun bir yolu olup olmadığı net değil - özellikle, doğru anladıysam, TimeCurrent'ın oluşumunu değil change_id'yi karşılaştırmalıyız, çünkü veri güncellemesi tam olarak olayın başlangıcına denk gelmeyebilir.
 

Stanislav Korotky:
ИМХО, все же не хватает более подробной документации. Понятно, что можно заглянуть в код, но тогда вместо разбирания в чужом коде можно и свой написать ;-).

mqh içinde ALT+M tuşlarına basın. Yöntemlerin isimleri mantıklı görünüyor.

Özellikle, önce Set yapmadan Get'in çağrılıp çağrılamayacağı ve filtreyi geri alıp alamayacağınız (anladığım kadarıyla alamazsınız) net değil.

Set - nesneyi olaylarla doldurur. Erişim, bir dizinin elemanlarına erişmek gibidir.

Yukarıdaki örneklerden, olayın oluşumunu izlemenin daha uygun bir yolu olup olmadığı net değildir - özellikle, doğru anladıysam, TimeCurrent'ın oluşumunu değil change_id'yi karşılaştırmanız gerekir, çünkü veri güncellemesi tam olarak olayın başlangıcına denk gelmeyebilir.

Eğer geriye dönük testten bahsediyorsak, change_id diye bir şey yoktur ve olamaz.

Gerçek zamana gelince, bu işlevsellik kütüphaneye biraz sonra eklenecektir.


Filtre geri alma işlemi her yerde olduğu gibi aynıdır: filtreden önce nesnenin bir kopyasını oluşturun.

 

Mimari olarak, diğer veri kaynaklarını ayrıştırıcılar şeklinde yerleştirmek mümkün olacak şekilde yapılmıştır. Bu amaçla, artık yalnızca bir "MetaTrader5" değerine eşit olan bir EVENT::Source alanı bile vardır.

Yani takvimleri yığmak için işlevsellik var. Birkaç kaynaktan veri aldığı ve daha sonra bunları tek bir yerde birleştirdiği varsayıldı.

 
fxsaber:

Eğer backtestten bahsediyorsak, orada change_id yoktur ve olamaz da.

Bu sorgulanabilir bir nüanstır: gerçek hayatta olaylar değişebilir ve test eden kişi (kütüphane aracılığıyla) değişikliklerin geçmişini yeniden üretmezse, testin yeterliliği düşer. Benzer bir konuya burada bazı başlıklarda değinilmişti: bir olaydaki çevrimiçi göstergeler aynıdır ve daha sonra düzeltilirler. Düzeltilmiş değerleri kullanarak test yaparsak, uzmanın "anında" analiz ettiği resmi elde edemeyiz. Ya da ben güncellemelere erişimle ilgili durumu yanlış anladım.

 
Stanislav Korotky:

Bu sorgulanabilir bir nüanstır: gerçek hayatta olaylar değişebilir ve test eden kişi (kütüphane aracılığıyla) değişikliklerin geçmişini yeniden üretmezse, testin yeterliliği düşer. Benzer bir konuya burada bazı başlıklarda değinilmişti: bir etkinlikteki çevrimiçi göstergeler aynıdır ve daha sonra düzeltilirler. Düzeltilmiş değerleri kullanarak test yaparsak, uzmanın "anında" analiz ettiği resmi elde edemeyiz. Ya da ben güncellemelere erişimle ilgili durumu yanlış anladım.

Takvim her olay için dört değer içerir:

  • Güncel (Gerçek) - haber yayınlandıktan sonra alınan ilk değer.
  • Tahmin - haber yayınlanmadan önce hangi değer tahmin edilmişti (kim tarafından?).
  • Önceki - aynı takvim haberi bir önceki sefer yayınlandıktan sonra ilk alınan değer. Yani, önceki zaman için Gerçek'e eşittir: Önceki[i] = Gerçek[i - 1].
  • Revize - önceki Gerçek değerin düzeltilmiş değeri. Bu güncellemenin zamanı (ve sayısı) takvimde saklanmaz.

Tüm HTML takvimlerinde ( standart olan ve Terminal dahil) üçlü (Gerçek, Tahmin, Önceki) = (Gerçek, Tahmin, Revize). Bu nedenle, bir sonraki ilgili olay gerçekleşene kadar Revize alanını geçmişte kullanamazsınız. Diğerleri kullanılabilir.

Gerçek'i almanın gecikme değeri hakkında veya daha doğrusu belirli bir işlem sunucusu ile haber kaynağının senkronizasyonu hakkında bilgi yoktur (ve olamaz). Bu nedenle geriye dönük testte dikkate alınmaz. Bu nüans açıktır.


Yukarıdakiler dikkate alındığında, TimeTradeServer ile backtestteki olayın zamanını karşılaştırmak tamamen meşrudur. Ve olaydan hemen önce ( Önceki, Tahmin,Revize) , (Gerçek, Tahmin,Önceki) değerlerini kullanarak- hemen sonra.