Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Название темы: СОМ-интерфейс на AutoIt-е
Показать сообщение отдельно

Новый участник


Сообщения: 17
Благодарности: 1

Профиль | Отправить PM | Цитировать


Не могу не сказать еще раз спасибо.
Вот структура 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-е можно сказать, что он смысловой нагрузки не несет. Он просто входит в биржевой терминал (вводит имя и пароль), вводит в Эксель начальные установки (типа тикера, размера позиции и т.д), периодически читает данные в Экселе и посылает отчет в виде е-мейла.
Да забыл сказать, что все это что-то типа торгового робота.

Отправлено: 15:14, 05-08-2009 | #5

Название темы: СОМ-интерфейс на AutoIt-е