ここまでできれば、あとわずかです。「証券会社のWeb画面をクラス化する」で作成したクラスを連携させていきます。まず、ブローカーの基本クラス化を行っておきます。
Public Interface IWebOrder
ReadOnly Property Name As String
Function Buy(ByVal dt As IDayTrade) As Boolean
Function Sell(ByVal dt As IDayTrade) As Boolean
Function ConfirmBuy(ByVal dt As IDayTrade, Optional ByVal timing As Date = #12:00:00 AM#) As Boolean
Function ConfirmSell(ByVal dt As IDayTrade, Optional ByVal timing As Date = #12:00:00 AM#) As Boolean
Function ConfirmCancelBuy(ByVal dt As IDayTrade, Optional ByRef contructUnit As Integer = 0, Optional ByVal timing As Date = #12:00:00 AM#) As Boolean
Function ConfirmCancelSell(ByVal dt As IDayTrade, Optional ByRef contructUnit As Integer = 0, Optional ByVal timing As Date = #12:00:00 AM#) As Boolean
Function CancelBuy(ByVal dt As IDayTrade, Optional ByVal timing As Date = #12:00:00 AM#) As Boolean
Function CancelSell(ByVal dt As IDayTrade, Optional ByVal timing As Date = #12:00:00 AM#) As Boolean
Function ModifyBuy(ByVal dt As IDayTrade, ByVal price As Long, Optional ByVal timing As Date = #12:00:00 AM#) As Boolean
Function ModifySell(ByVal dt As IDayTrade, ByVal price As Long, Optional ByVal timing As Date = #12:00:00 AM#) As Boolean
Function ConfirmDetailBuy(ByVal dt As IDayTrade, Optional ByVal timing As Date = #12:00:00 AM#) As Boolean
Function ConfirmDetailSell(ByVal dt As IDayTrade, Optional ByVal timing As Date = #12:00:00 AM#) As Boolean
Function Balance() As Long
End Interface
Public MustInherit Class AbstructWebOrder
Implements IWebOrder
Private Shared ReadOnly log As log4net.ILog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)
Protected MustOverride Function ConfirmContruct(ByVal buysell As AbstructWebOrder.OrderType, ByVal confType As AbstructWebOrder.ConfirmType, ByVal dt As IDayTrade, Optional ByRef contructUnit As Integer = 0, Optional ByVal timing As Date = #12:00:00 AM#) As Boolean
Protected MustOverride Function CancelContruct(ByVal buysell As AbstructWebOrder.OrderType, ByVal dt As IDayTrade, Optional ByVal timing As Date = #12:00:00 AM#) As Boolean
Protected MustOverride Function ModifyContruct(ByVal buysell As AbstructWebOrder.OrderType, ByVal dt As IDayTrade, ByVal price As Long, Optional ByVal timing As Date = #12:00:00 AM#) As Boolean
Protected MustOverride Function ConfirmDetailContruct(ByVal buysell As AbstructWebOrder.OrderType, ByVal dt As IDayTrade, Optional ByVal timing As Date = #12:00:00 AM#) As Boolean
Protected _fundMgr As FundManager
Public Enum OrderType
買付
売付
End Enum
Public Enum ConfirmType
約定
取消済
End Enum
Public Enum ConfirmActionType
取消
訂正
注文詳細
End Enum
Public Enum OrderActionType
新規注文
訂正注文
End Enum
Public Enum ExecuteConditionType
本日中
今週中
寄付
引け
不成
End Enum
MustOverride Function Balance() As Long Implements IWebOrder.Balance
MustOverride Function Buy(ByVal dt As IDayTrade) As Boolean Implements IWebOrder.Buy
MustOverride Function Sell(ByVal dt As IDayTrade) As Boolean Implements IWebOrder.Sell
Sub New(ByVal fundMgr As FundManager)
_fundMgr = fundMgr
End Sub
'買い注文約定確認
Function ConfirmBuy(ByVal dt As IDayTrade, Optional ByVal timing As Date = #12:00:00 AM#) As Boolean Implements IWebOrder.ConfirmBuy
Return ConfirmContruct(AbstructWebOrder.OrderType.買付, AbstructWebOrder.ConfirmType.約定, dt, 0, timing)
End Function
'買い注文キャンセル確認
Function ConfirmCancelBuy(ByVal dt As IDayTrade, Optional ByRef contructUnit As Integer = 0, Optional ByVal timing As Date = #12:00:00 AM#) As Boolean Implements IWebOrder.ConfirmCancelBuy
Dim rtn As Boolean = ConfirmContruct(AbstructWebOrder.OrderType.買付, AbstructWebOrder.ConfirmType.取消済, dt, contructUnit, timing)
If rtn Then
_fundMgr.AddBalance((dt.unit - contructUnit) * dt.BuyOrder.price)
End If
Return rtn
End Function
'買い注文キャンセル
Function CancelBuy(ByVal dt As IDayTrade, Optional ByVal timing As Date = #12:00:00 AM#) As Boolean Implements IWebOrder.CancelBuy
Return CancelContruct(AbstructWebOrder.OrderType.買付, dt, timing)
End Function
'買い注文訂正
Function ModifyBuy(ByVal dt As IDayTrade, ByVal price As Long, Optional ByVal timing As Date = #12:00:00 AM#) As Boolean Implements IWebOrder.ModifyBuy
Return ModifyContruct(AbstructWebOrder.OrderType.買付, dt, price, timing)
End Function
'買い注文詳細確認
Function ConfirmDetailBuy(ByVal dt As IDayTrade, Optional ByVal timing As Date = #12:00:00 AM#) As Boolean Implements IWebOrder.ConfirmDetailBuy
Return ConfirmDetailContruct(AbstructWebOrder.OrderType.買付, dt, timing)
End Function
'売り注文約定確認
Function ConfirmSell(ByVal dt As IDayTrade, Optional ByVal timing As Date = #12:00:00 AM#) As Boolean Implements IWebOrder.ConfirmSell
Dim rtn As Boolean = ConfirmContruct(AbstructWebOrder.OrderType.売付, AbstructWebOrder.ConfirmType.約定, dt, 0, timing)
If rtn Then
_fundMgr.AddBalance(dt.unit * dt.SellOrder.price)
End If
Return rtn
End Function
'売り注文キャンセル確認
Function ConfirmCancelSell(ByVal dt As IDayTrade, Optional ByRef contructUnit As Integer = 0, Optional ByVal timing As Date = #12:00:00 AM#) As Boolean Implements IWebOrder.ConfirmCancelSell
Return ConfirmContruct(AbstructWebOrder.OrderType.売付, AbstructWebOrder.ConfirmType.取消済, dt, contructUnit, timing)
End Function
'売り注文キャンセル
Function CancelSell(ByVal dt As IDayTrade, Optional ByVal timing As Date = #12:00:00 AM#) As Boolean Implements IWebOrder.CancelSell
Return CancelContruct(AbstructWebOrder.OrderType.売付, dt, timing)
End Function
'売り注文訂正
Function ModifySell(ByVal dt As IDayTrade, ByVal price As Long, Optional ByVal timing As Date = #12:00:00 AM#) As Boolean Implements IWebOrder.ModifySell
Return ModifyContruct(AbstructWebOrder.OrderType.売付, dt, price, timing)
End Function
'売り注文詳細確認
Function ConfirmDetailSell(ByVal dt As IDayTrade, Optional ByVal timing As Date = #12:00:00 AM#) As Boolean Implements IWebOrder.ConfirmDetailSell
Dim rtn As Boolean = ConfirmDetailContruct(AbstructWebOrder.OrderType.売付, dt, timing)
Return rtn
End Function
Public MustOverride ReadOnly Property Name As String Implements IWebOrder.Name
End Class
スポンサーリンク