注文詳細画面のHTMLソース(一部を抜粋)は以下のようになっています。
<html>
<head></head>
<body>
<table>
<table></table>
<table></table>
<table></table>
<table>
<tr>
<th>日時</div></th>
<th>区分</div></th>
<th>内容</div></th>
<th>数量</div></th>
<th>単価[円]</div></th>
<th>条件</div></th>
<th>注文区分</div></th>
<th>逆指値条件</div></th>
</tr>
<tr>
<td>
<div>
<nobr>MM/DD </nobr>
<nobr>hh:mm</nobr>
</div>
</td>
<td>
<div>
<nobr>通常</nobr>
</div>
</td>
<td>
<div>
<nobr>買付</nobr>
</div>
</td>
<td>
<div>
<nobr>100 株</nobr>
</div>
</td>
<td>
<div>
<nobr>162</nobr>
</div>
</td>
<td>
<div>
<nobr>本日中</nobr>
</div>
</td>
<td>
<div>
<nobr>通常注文</nobr>
</div>
</td>
<td>
<div>
-
</div>
</td>
</tr>
</table>
</table>
<table></table>
<table></table>
<table></table>
</body>
</html>
Public Class OrderDetailList
Inherits AbstructOrderFrame
Implements IWebScreenPaging
Private Shared ReadOnly log As log4net.ILog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)
Private _pageNo As Integer = 1
Public ReadOnly Property PageNo As Integer Implements IWebScreenPaging.PageNo
Get
Return _pageNo
End Get
End Property
Private _trade As IDayTrade
Private _buysell As AbstructWebOrder.OrderType
Sub New(ByVal screen As OrderList, ByVal dt As IDayTrade, ByVal bs As AbstructWebOrder.OrderType)
MyBase.new(DirectCast(screen, AbstructWebScreen))
_trade = dt
_buysell = bs
End Sub
Function ConfirmDetail() As Boolean
Return ConfirmDetailInner("", 0, 0)
End Function
Private Function ConfirmDetailInner(Optional ByVal strTime As String = "", Optional ByVal totalPrice As Long = 0, Optional ByVal totalUnit As Long = 0) As Boolean
Dim order As TradeOrder
If _buysell = AbstructWebOrder.OrderType.買付 Then
order = _trade.BuyOrder
Else
order = _trade.SellOrder
End If
Try
Dim objTable As New IEWrapperFixed(_ie.RootElement().Element("table", 4))
Dim strContent As String, strUnit As String, strPrice As String
For i = 0 To _ie.Element("tr").length - 1
_ie = objTable.GetIE()
Dim objTr As New IEWrapperFixed(_ie.Element("tr", i))
If _ie.IsNothingElement() Then Continue For
If _ie.Element("td").length >= 8 Then
strContent = _ie.Element("td", 2).Element("nobr", 0).InnerText
If strContent = "約定" Then
If strTime = "" Then
_ie = objTr.GetIE()
strTime = _ie.Element("td", 0).Element("nobr", 1).InnerText
End If
_ie = objTr.GetIE()
strUnit = _ie.Element("td", 3).Element("nobr", 0).InnerText
Dim unit As Long = Long.Parse(strUnit.Substring(0, strUnit.Length - 2), Globalization.NumberStyles.AllowThousands)
_ie = objTr.GetIE()
strPrice = _ie.Element("td", 4).Element("nobr", 0).InnerText
totalUnit += unit
totalPrice += unit * Long.Parse(strPrice, Globalization.NumberStyles.AllowThousands)
End If
End If
Next
If Not GoNext() Is Nothing Then
Return ConfirmDetailInner(strTime, totalPrice, totalUnit)
End If
If totalPrice = 0 Then
log.WarnFormat("{0}の詳細確認に失敗しました。約定はありません。code={1} unit={2} price={3}", _buysell, _trade.company_id, _trade.unit, order.price)
Return False
End If
If totalUnit <> _trade.unit Then
log.WarnFormat("{0}の詳細確認に失敗しました。約定数が一致しません。再取得が必要です。code={1} unit={2} price={3} totalUnit={4}", _buysell, _trade.company_id, _trade.unit, order.price, totalUnit)
Return False
End If
Dim tday As DateTime = DateTime.Today
If strTime.Length = 8 Then
order.datetime = tday.Add(TimeSpan.ParseExact(strTime, "hh\:mm\:ss", Nothing)).AddSeconds((order.order_no Mod 10) / 10)
Else
order.datetime = tday.Add(TimeSpan.ParseExact(strTime, "hh\:mm", Nothing)).AddSeconds((order.order_no Mod 10) / 10)
End If
order.avr_price = totalPrice / _trade.unit
Catch e As Exception
DispatchException(e, String.Format("{0}注文の詳細確認", _buysell.ToString()))
End Try
Return True
End Function
Private Function GoNext() As IWebScreen Implements IWebScreenPaging.GoNext
_pageNo += 1
Return GoNextCommon()
End Function
End Class
スポンサーリンク