//+--------------------------------------------------------------------------------+
//| Funzione di Trade |
//+--------------------------------------------------------------------------------+
void OnTrade()
{
//--- riceve i ticket dell'ultimo affare dalla cronistoria di trading della settimana
ulong last_deal=GetLastDealTicket();
if(HistoryDealSelect(last_deal))
{
//--- orario di esecuzione dell'affare in millisecondi dal 01.01.1970
long deal_time_msc=HistoryDealGetInteger(last_deal,DEAL_TIME_MSC);
PrintFormat("Affare #%d DEAL_TIME_MSC=%i64 => %s",
last_deal,deal_time_msc,TimeToString(deal_time_msc/1000));
}
else
PrintFormat("HistoryDealSelect() fallito per #%d. Codice Errore=%d",
last_deal,GetLastError());
//---
}
//+--------------------------------------------------------------------------------+
//| Restituisce l'ultimo ticket nella cronistoria oppure -1 |
//+--------------------------------------------------------------------------------+
ulong GetLastDealTicket()
{
//--- richiede la cronistoria per gli ultimi 7 giorni
if(!GetTradeHistory(7))
{
//--- notifica sull'insuccesso della chiamata e restituisce -1
Print(__FUNCTION__," HistorySelect() ha restituito false");
return -1;
}
//---
ulong first_deal,last_deal,deals=HistoryDealsTotal();
//--- lavora con gli ordini se ce ne sono
if(deals>0)
{
Print("Affari = ",deals);
first_deal=HistoryDealGetTicket(0);
PrintFormat("first_deal = %d",first_deal);
if(deals>1)
{
last_deal=HistoryDealGetTicket((int)deals-1);
PrintFormat("last_deal = %d",last_deal);
return last_deal;
}
return first_deal;
}
//--- nessun affare trovato, restituito -1
return -1;
}
//+-----------------------------------------------------------------------------------------+
//| Richiede la cronistoria per gli ultimi giorni e restituisce false in caso di fallimento |
//+-----------------------------------------------------------------------------------------+
bool GetTradeHistory(int days)
{
//--- imposta il periodo di una settimana per richiedere la cronistoria di trading
datetime to=TimeCurrent();
datetime from=to-days*PeriodSeconds(PERIOD_D1);
ResetLastError();
//---- fa una richiesta e controlla il risultato
if(!HistorySelect(from,to))
{
Print(__FUNCTION__," HistorySelect=false. Error code=",GetLastError());
return false;
}
//--- cronitoria ricevuta con successo
return true;
}
|