//+------------------------------------------------------------------+
//| 거래 함수 |
//+------------------------------------------------------------------+
void OnTrade()
{
//--- 지난 거래 내역에서 최근 티켓 수령
ulong last_deal=GetLastDealTicket();
if(HistoryDealSelect(last_deal))
{
거래 실행 시간(밀리초)(1970.01.01 이후) //--- 1970년 1월 1일 이후 밀리세컨드 단위의 거래 실행 시간
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;
}
|