//+------------------------------------------------------------------+
//| 交易函数 |
//+------------------------------------------------------------------+
void OnTrade()
{
//--- 从周交易历史记录接收最后订单的标签
ulong last_deal=GetLastDealTicket();
if(HistoryDealSelect(last_deal))
{
//--- 从1970.01.01起以毫秒为单位的交易执行的时间
long deal_time_msc=HistoryDealGetInteger(last_deal,DEAL_TIME_MSC);
PrintFormat("Deal #%d DEAL_TIME_MSC=%i64 => %s",
last_deal,deal_time_msc,TimeToString(deal_time_msc/1000));
}
else
PrintFormat("HistoryDealSelect() failed for #%d. Eror code=%d",
last_deal,GetLastError());
//---
}
//+------------------------------------------------------------------+
//| 返回历史记录中最后交易的标签或-1 |
//+------------------------------------------------------------------+
ulong GetLastDealTicket()
{
//--- 请求最近7天的历史记录
if(!GetTradeHistory(7))
{
//--- 通知不成功的调用和返回-1
Print(__FUNCTION__," HistorySelect() returned false");
return -1;
}
//---
ulong first_deal,last_deal,deals=HistoryDealsTotal();
//--- 如果有,从事订单工作
if(deals>0)
{
Print("Deals = ",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;
}
//--- 未发现成交,返回 -1
return -1;
}
//+--------------------------------------------------------------------------+
//| 请求最近几日的历史记录,如果失败,则返回false |
//+--------------------------------------------------------------------------+
bool GetTradeHistory(int days)
{
//--- 设置一个星期的周期请求交易历史记录
datetime to=TimeCurrent();
datetime from=to-days*PeriodSeconds(PERIOD_D1);
ResetLastError();
//--- 发出请求检察结果
if(!HistorySelect(from,to))
{
Print(__FUNCTION__," HistorySelect=false. Error code=",GetLastError());
return false;
}
//--- 成功接收历史记录
return true;
}
|