fc2ブログ

ブローカーの基本クラス

ここまでできれば、あとわずかです。「証券会社の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
IWebOrderインタフェースは、ブローカーを表すインタフェースです。各メソッドのtiming引数は、メソッドを呼び出した日時を渡します。
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
AbstructWebOrderクラスは、IWebOrderインタフェースを実装した抽象クラスです。FundManagerクラスは、資金の管理を行うためのクラスです。これについては、後で別途説明します。これらの基本クラスを用意する理由は、今後、実売買を行わないブローカーのシミュレータを作れるようにするためです。
スポンサーリンク
<<注文詳細画面 | ホーム | ログイン>>
コメント(0)
コメントの投稿
トラックバック(0)