//+------------------------------------------------------------------+
//| OnTrade_Sample.mq5 |
//| Copyright 2018, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2000-2024, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
input int days=7; // günlerde alım-satım geçmişinin derinliği
//--- alım-satım geçmişinin sınırlarını küresel kapsamda belirle
datetime start; // önbellekteki alım-satım geçmişi için başlangıç zamanı
datetime end; // önbellekteki alım-satım geçmişi için bitiş zamanı
//--- global sayaçlar
int orders; // aktif emirlerin sayısı
int positions; // açık pozisyonların sayısı
int deals; // alım-satım geçmişi önbelleğinde işlemlerin sayısı
int history_orders; // alım-satım geçmişi önbelleğinde emirlerin sayısı
bool started=false; // sayaç ilgi bayrağı
//+------------------------------------------------------------------+
//| Uzman danışman başlatma fonksiyonu |
//+------------------------------------------------------------------+
int OnInit()
{
//---
end=TimeCurrent();
start=end-days*PeriodSeconds(PERIOD_D1);
PrintFormat("Yüklenebilir alım-satım geçmişin sınırları: başlangıç - %s, bitiş - %s",
TimeToString(start),TimeToString(end));
InitCounters();
//---
return(0);
}
//+------------------------------------------------------------------+
//| Pozisyon, emir ve işlem sayaçlarının başlatılması |
//+------------------------------------------------------------------+
void InitCounters()
{
ResetLastError();
//--- geçmişi yükle
bool selected=HistorySelect(start,end);
if(!selected)
{
PrintFormat("%s. Önbellek geçmişini %s ten %s konumuna yükleme başarısız oldu. Hata kodu: %d",
__FUNCTION__,TimeToString(start),TimeToString(end),GetLastError());
return;
}
//--- Mevcut değeri elde edin
orders=OrdersTotal();
positions=PositionsTotal();
deals=HistoryDealsTotal();
history_orders=HistoryOrdersTotal();
started=true;
Print("emirlerin, pozisyonların ve işlemlerin sayaçları başarılı bir şekilde başlatıldı");
}
//+------------------------------------------------------------------+
//| Uzman danışman tik fonksiyonu |
//+------------------------------------------------------------------+
void OnTick()
{
if(started) SimpleTradeProcessor();
else InitCounters();
}
//+------------------------------------------------------------------+
//| bir Trade olayı gerçekleştiğinde çağrılır |
//+------------------------------------------------------------------+
void OnTrade()
{
if(started) SimpleTradeProcessor();
else InitCounters();
}
//+------------------------------------------------------------------+
//| alım-satım işlemlerindeki ve geçmişteki değişiklikleri işlemenin örneği
//+------------------------------------------------------------------+
void SimpleTradeProcessor()
{
end=TimeCurrent();
ResetLastError();
//--- işlem geçmişini belirtilen aralıktan program önbelleğine yükle
bool selected=HistorySelect(start,end);
if(!selected)
{
PrintFormat("%s. Önbellek geçmişini %s ten %s konumuna yükleme başarısız oldu. Hata kodu: %d",
__FUNCTION__,TimeToString(start),TimeToString(end),GetLastError());
return;
}
//--- mevcut değerleri elde et
int curr_orders=OrdersTotal();
int curr_positions=PositionsTotal();
int curr_deals=HistoryDealsTotal();
int curr_history_orders=HistoryOrdersTotal();
//--- aktif emirlerin sayısının değişip değişmediğini kontrol edin
if(curr_orders!=orders)
{
//--- aktif emirlerin sayısı değişti
PrintFormat("emirlerin sayısı değişti. Önceki değer %d, şu anki is %d dir",
orders,curr_orders);
//--- değeri güncelle
orders=curr_orders;
}
//--- açık pozisyonların sayısındaki değişiklikler
if(curr_positions!=positions)
{
//--- açık pozisyonların sayısı değişti
PrintFormat("Pozisyonların sayısı değişti. Önceki değer %d, şu anki is %d dir",
positions,curr_positions);
//--- değeri güncelle
positions=curr_positions;
}
//--- işlem geçmişi önbelleğindeki emirlerin sayısındaki değişiklikler
if(curr_deals!=deals)
{
//--- işlem geçmişi önbelleğindeki emirlerin sayısı değişti
PrintFormat("İşlemlerin sayısı değişti. Önceki değer %d, şu anki is %d dir",
deals,curr_deals);
//--- değeri güncelle
deals=curr_deals;
}
//--- işlem geçmişi önbelleğindeki geçmiş emirlerin sayısındaki değişiklikler
if(curr_history_orders!=history_orders)
{
//--- işlem geçmişi önbelleğindeki geçmiş emirlerin sayısı değişti
PrintFormat("Geçmişteki emirlerin sayısı değişti. Önceki değer %d, şu anki is %d dir",
history_orders,curr_history_orders);
//--- değeri güncelle
history_orders=curr_history_orders;
}
//--- önbellekte istenecek işlem geçmişinin sınırlarının değiştirilmesinin gerekli olup olmadığını kontrol et
CheckStartDateInTradeHistory();
}
//+------------------------------------------------------------------+
//| işlem geçmişini istemek için başlangıç zamanını değiştirme |
//+------------------------------------------------------------------+
void CheckStartDateInTradeHistory()
{
//--- başlangıç aralığı, şu an çalışmaya başlayacak olsaydık
datetime curr_start=TimeCurrent()-days*PeriodSeconds(PERIOD_D1);
//--- işlem geçmişinin başlangıç sınırının gitmediğinden emin ol
//--- hedeflenen tarihten 1 günden fazla
if(curr_start-start>PeriodSeconds(PERIOD_D1))
{
//--- önbelleğe yüklenecek geçmişin başlangıç tarihini doğrula
start=curr_start;
PrintFormat("Yüklenecek işlem geçmişinin yeni başlangıç sınırı: başlangıç => %s",
TimeToString(start));
//--- şimdi güncellenmiş aralık için işlem geçmişini yeniden yükle
HistorySelect(start,end);
//--- ilerki karşılaştırma için geçmişteki işlem ve emir sayaçlarını doğrula
history_orders=HistoryOrdersTotal();
deals=HistoryDealsTotal();
}
}
//+------------------------------------------------------------------+
/* Örnek çıktı:
Yüklenecek geçmişin limiti: başlangıç - 2018.07.16 18:11, bitiş - 2018.07.23 18:11
Emirlerin, pozisyonların ve işlemlerin sayaçları başarılı bir şekilde başlatıldı
Emirlerin sayısı değişti. Önceki değer 0, şu anki değer 1
Emirlerin sayısı değişti. Previous value 1, current value 0
Pozisyonların sayısı değişti. Önceki değer 0, şu anki değer 1
İşlemlerin sayısı değişti. Önceki değer 0, şu anki değer 1
Geçmişteki emirlerin sayısı değişti. Önceki değer 0, şu anki değer 1
*/
|