Не могу не сказать еще раз спасибо.
Вот структура VBA-код модуля сервера (тип Class Modules, имя StserverTest)
Код:
Public WithEvents stClient As StServer
Private Sub Class_Initialize()
If stClient Is Nothing Then
Set stClient = New StServer
If Err.Number <> 0 Then MsgBox ("Error " & Err.Description)
If stClient Is Nothing Then
MsgBox ("Невозможно установить соединение")
Else
'MsgBox ("Соединение установлено")
End If
End If
End Sub
Private Sub Class_Terminate()
If stClient Is Nothing Then
MsgBox ("Соединение уже разорвано")
Else
Set stClient = Nothing
'MsgBox ("Соединение разорвано")
End If
End Sub
Private Sub stClient_Connected()
Range("connection_status_time").Value = Now
Range("connection_status").Value = "соединен"
End Sub
Private Sub stClient_Disconnected(ByVal reason As String)
Range("connection_status_time").Value = Now
Range("connection_status").Value = "НЕТ СОЕДИНЕНИЯ : " & reason
End Sub
Private Sub stClient_OrderFailed(ByVal cookie As Long, ByVal reason As String)
Range("order_status_time").Value = Now
Range("order_status").Value = 1 ' ОШИБКА ОТПРАВКИ приказа на сервер
Range("order_status_note").Value = reason & " * " & cookie
End Sub
Private Sub stClient_OrderSucceeded(ByVal cookie As Long)
Range("order_status_time").Value = Now
Range("order_status").Value = 0 ' успех отправки приказа на сервер
Range("order_status_note").Value = cookie
End Sub
Private Sub stClient_SetPortfolio( _
ByVal portfolio As String, _
ByVal cash As Double, _
ByVal leverage As Double, _
ByVal comission As Double, _
ByVal saldo As Double)
Range("a_portfolio").Value = PortfolioArray
Range("set_portfolio_time") = Now
End Sub
Private Sub stClient_UpdateOrder( _
ByVal portfolio As String, _
ByVal symbol As String, _
ByVal state As Long, _
ByVal action As Long, _
ByVal otype As Long, _
ByVal validity As Long, _
ByVal price As Double, _
ByVal amount As Double, _
ByVal stopp As Double, _
ByVal filled As Double, _
ByVal datetime As Date, _
ByVal orderid As String, _
ByVal orderno As String)
...
End Sub
Private Sub stClient_UpdatePosition( _
ByVal portfolio As String, _
ByVal symbol As String, _
ByVal avprice As Double, _
ByVal amount As Double, _
ByVal planned As Double)
...
End Sub
Private Sub stClient_UpdateQuote( _
ByVal symbol As String, _
ByVal datetime As Date, _
ByVal opn As Double, _
ByVal high As Double, _
ByVal low As Double, _
ByVal closse As Double, _
ByVal last As Double, _
ByVal volume As Double, _
ByVal size As Double, _
ByVal bid As Double, _
ByVal ask As Double, _
ByVal bidsize As Double, _
ByVal asksize As Double, _
ByVal open_int As Double, _
ByVal go_buy As Double, _
ByVal go_sell As Double, _
ByVal go_base As Double, _
ByVal go_base_backed As Double)
...
End Sub
Private Sub stClient_AddBar( _
ByVal symbol As String, _
ByVal interval As Long, _
ByVal datetime As Date, _
ByVal opn As Double, _
ByVal high As Double, _
ByVal low As Double, _
ByVal closse As Double, _
ByVal volume As Double)
...
End Sub
А в клиентской части (не знаю, верно ли использую это название), т.е. там где вызываются методы, вот такой код (тип Modules, имя abb)
Код:
Private stSrv As StServerTest
Sub RunConnect()
If stSrv Is Nothing Then
Set stSrv = New StServerTest
If Not stSrv.stClient.IsConnected() Then
MsgBox ("Убедитесь что установлено соединение с сервером")
End If
Else
MsgBox ("Соединение уже установлено")
End If
End Sub
Sub PlaceOrder()
If stSrv Is Nothing Then
MsgBox ("Соединение не установлено!")
Else
Response = MsgBox("Выставить приказ?", vbYesNo)
If Response = vbYes Then
Call stSrv.stClient.PlaceOrder( _
Range("portfolio").Value, _
Range("quote_ticker").Value, _
Range("o_action_new").Value, _
Range("o_type_new").Value, _
Range("o_validity_new").Value, _
Range("o_price_new").Value, _
Range("o_amount_new").Value, _
0, _
0)
End If
End If
End Sub
и т.д.
Общая структура интерфейса такая
МЕТОД --> СОБЫТИЯ, вызываемые методом
ListenQuotes (1 параметр)/CancelQuotes (1 параметр) --> UpdateQuote (18 параметров)
ListenBidAsks (1 параметр)/CancelBidAsks (1 параметр) --> UpdateBidAsk (7 параметров)
ListenTicks (1 параметр)/CancelTicks (1 параметр) --> AddTick (4 параметра)
GetBars (4 параметра) --> AddBar (8 параметров)
ListenPortfolio (1 параметр)/CancelPortfolio (1 параметр) --> SetPortfolio (5 параметров);UpdateOrder (13 параметров);AddTrade (6 параметров);UpdatePosition (5 параметров)
PlaceOrder (9 параметров) --> OrderSucceeded (1 параметр);OrderFailed (2 параметра)
CancelOrder (3 параметра) --> -
GetSymbols() --> AddSymbol (10 параметров)
- --> Connected ()
- --> Disconnected (1 параметр)
IsConnected () -->??? True/False
А про код на AutoIt-е можно сказать, что он смысловой нагрузки не несет. Он просто входит в биржевой терминал (вводит имя и пароль), вводит в Эксель начальные установки (типа тикера, размера позиции и т.д), периодически читает данные в Экселе и посылает отчет в виде е-мейла.
Да забыл сказать, что все это что-то типа торгового робота.