https://github.com/dboyara/quikgo
Доступ к функционалу Quik из связки Lua&Golang
https://github.com/dboyara/quikgo
Last synced: 9 months ago
JSON representation
Доступ к функционалу Quik из связки Lua&Golang
- Host: GitHub
- URL: https://github.com/dboyara/quikgo
- Owner: DBoyara
- License: apache-2.0
- Created: 2025-01-23T09:03:17.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2025-06-20T05:24:23.000Z (12 months ago)
- Last Synced: 2025-07-11T18:46:19.725Z (11 months ago)
- Language: Lua
- Size: 73.2 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# QuikGo
Доступ к функционалу Quik из связки Lua&Golang

[](https://goreportcard.com/report/github.com/DBoyara/QuikGo)
[](https://godoc.org/github.com/DBoyara/QuikGo)
[](https://github.com/DBoyara/QuikGo/blob/main/LICENSE)
[](https://GitHub.com/DBoyara/QuikGo/releases/)
[](https://snyk.io/test/github/DBoyara/QuikGo)
## Install
go get -u github.com/DBoyara/QuikGo@v0.4.6
## Examples
### Пример подключения к серверу LUA и команды Ping
```go
func main() {
logger, _ := zap.NewDevelopment()
client, err := quik.NewQuikClient("127.0.0.1", 54320, true) // development = true — режим разработки, false — продакшен
if err != nil {
logger.Error("Failed to create Quik client", zap.Error(err))
return
}
defer client.Close()
context := context.Background()
response, err := client.Ping(context)
if err != nil {
logger.Error("Failed to ping Quik server", zap.Error(err))
return
}
logger.Info("Ping response", zap.Any("response", response))
}
```
### Пример создания DataSource и получения свечей
```go
func main() {
dataDataSource := quik.CreateDataSourceRequest{
quik.DataSourceRequest: quik.DataSourceRequest{
Ticker: "SBER",
Interval: 1,
}
Class: "TQBR",
}
err := client.CreateDataSource(dataDataSource, context)
if err != nil {
logger.Error("Failed to create data source", zap.Error(err))
return
}
dataCandles := quik.GetCandlesRequest{
Ticker: "SBER",
Interval: 1,
Count: 10,
Class: "TQBR",
}
candles, err := client.GetCandles(dataCandles, context)
if err != nil {
logger.Error("Failed to get candles", zap.Error(err))
return
}
for _, candle := range candles {
fmt.Printf("Candle: %s O: %.2f H: %.2f L: %.2f C: %.2f V: %d\n",
candle.Timestamp,
candle.Open,
candle.High,
candle.Low,
candle.Close,
candle.Volume,
)
}
}
```
### Пример получения аккаунтов
```go
accounts, err := client.GetTradeAccounts(context)
if err != nil {
logger.Error("Failed to get trade accounts", zap.Error(err))
return
}
fmt.Println(accounts)
```
### Пример денежных лимитов
```go
limits, err := client.GetMoneyLimits(context)
if err != nil {
logger.Error("Failed to get limits", zap.Error(err))
return
}
fmt.Println(limits)
```
### Account, ClientCode, FirmId - можно разово получить из GetTradeAccounts и GetMoneyLimits
### Пример заявок на покупку
```go
transID := quik.NewCounter(1)
dataOrder := quik.CreateOrderRequest{
ClassCode: "TQBR",
SecCode: "SBER",
Account: "your-account-code",
Trans_id: transID.Next(),
Operation: "B",
Price: "100.00",
Quantity: "1",
Action: "NEW_ORDER",
Type: "L",
}
err = client.SendTransaction(dataOrder, context)
if err != nil {
logger.Error("Failed to create order", zap.Error(err))
return
}
```
### Пример портфолио
```go
dataPortfolio := quik.GetPortfolioRequest{
ClientCode: "your-client-code",
FirmId: "your-firm-id",
}
portfolio, err := client.GetPortfolioInfo(dataPortfolio, context)
if err != nil {
logger.Error("Failed to get portfolio", zap.Error(err))
return
}
fmt.Println(portfolio)
```
### Пример обработки Callback
```go
func eventHandler(event quik.Event) {
switch event.Cmd {
case "OnConnected":
fmt.Println("✅ Подключение установлено:", event.Data)
case "OnDisconnected":
fmt.Println("❌ Подключение разорвано:", event.Data)
case "OnTrade":
fmt.Println("📊 Новая сделка:", event.Data)
default:
fmt.Println("⚠️ Неизвестное событие:", event.Cmd, "| Данные:", event.Data)
}
}
func main() {
logger, _ := quik.NewLogger(true)
quik.RunServer(54321, true, eventHandler, logger)
}
```