finamclient

package module
v0.0.0-...-88182a4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 6, 2023 License: GPL-3.0 Imports: 7 Imported by: 0

README

FinamTradeGo

Finam GRPC-client on Golang

Go Report Card GoDoc

Installation

  go get github.com/DBoyara/FinamTradeGo

Examples

Пример получения портфеля
func main() {
	ctx := context.Background()
	client, err := NewFinamClient("clientId", "token", ctx)
	if err != nil {
		log.Panicln(err)
	}

	defer client.CloseConnection()

	res, err := client.GetPortfolio(true, true, true, true)
	if err != nil {
		log.Panicln(err)
	}

	log.Printf("Входящая оценка портфеля в рублях: %f", res.Balance)
	log.Println(res.Positions)
}
Пример выставления заявки на покупку по рынку. Не рекомендация к действию.
func main() {
	ctx := context.Background()
	client, err := NewFinamClient("clientId", "token", ctx)
	if err != nil {
		log.Panicln(err)
	}

	defer client.CloseConnection()

	in := &ta.NewOrderRequest{
		ClientId:      "ClientId",
		SecurityBoard: "FUT",
		SecurityCode:  "SiM3",
		BuySell:       2,
		Quantity:      1,
		UseCredit:     false,
		Price:         &wrapperspb.DoubleValue{},
		Property:      1,
		Condition:     &ta.OrderCondition{},
		ValidBefore:   &ta.OrderValidBefore{},
	}

	res_order, err := client.NewOrder(in)
	if err != nil {
		log.Panicln(err)
	}

	log.Printf("Id заявки: %d", res_order.TransactionId)
}
Пример выставления стопов по рынку. Не рекомендация к действию. Подробнее про стоп-завявки тут
func main() {
	...

	in_stop := &tradeapi.NewStopRequest{
		ClientId:      "ClientId",
		SecurityBoard: "FUT",
		SecurityCode:  "SiM3",
		BuySell:       1,
		StopLoss: &tradeapi.StopLoss{
			ActivationPrice: 69000,
			Price:           69000,
			MarketPrice:     true,
			Quantity: &tradeapi.StopQuantity{
				Value: 1,
				Units: tradeapi.StopQuantityUnits_STOP_QUANTITY_UNITS_LOTS,
			},
			UseCredit: false,
		},
		TakeProfit: &tradeapi.TakeProfit{
			ActivationPrice: 70000,
			CorrectionPrice: &tradeapi.StopPrice{},
			SpreadPrice: &tradeapi.StopPrice{},
			MarketPrice: true,
			Quantity: &tradeapi.StopQuantity{
				Value: 1,
				Units: tradeapi.StopQuantityUnits_STOP_QUANTITY_UNITS_LOTS,
			},
			UseCredit: false,
		},
		ExpirationDate: &timestamppb.Timestamp{},
		LinkOrder: int64(res_order.TransactionId),
		ValidBefore: &tradeapi.OrderValidBefore{},
	}

	res_stop, err := client.NewStop(in_stop)
	if err != nil {
		log.Panicln(err)
	}

	log.Printf("Id стопа: %d", res_stop.GetStopId())
}
Пример подписки на биржевой стакан. Не рекомендация к действию.
func main() {
	ctx := context.Background()
	client, err := NewFinamClient("clientId", "token", ctx)
	if err != nil {
		log.Panicln(err)
	}

	defer client.CloseConnection()

	in := &tradeapi.OrderBookSubscribeRequest{
		RequestId:     "ffc38cb7-2072",
		SecurityCode:  "GAZP",
		SecurityBoard: "TQBR",
	}

	go client.SubscribeOrderBook(in)

	chan1 := client.GetOrderBooksChan()
	chan_err := client.GetErrorChan()

	for {
		select {
		case res := <-chan1:
			fmt.Println("Response from orderBooksChan", res)
		case err := <-chan_err:
			fmt.Println("Response from errorChan", err)
			client.CloseConnection()
			break
		}
	}
}

Authors

License

ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ ГАРАНТИИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ, НО НЕ ОГРАНИЧИВАЯСЬ ИМИ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО КАКИМ-ЛИБО ИСКАМ, ЗА УЩЕРБ ИЛИ ПО ИНЫМ ТРЕБОВАНИЯМ, В ТОМ ЧИСЛЕ, ПРИ ДЕЙСТВИИ КОНТРАКТА, ДЕЛИКТЕ ИЛИ ИНОЙ СИТУАЦИИ, ВОЗНИКШИМ ИЗ-ЗА ИСПОЛЬЗОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫХ ДЕЙСТВИЙ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

The Finam clieint is open-sourced software licensed under the GNU GPLv3

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type FinamClient

type FinamClient struct {
	// contains filtered or unexported fields
}

FinamClient

func (*FinamClient) CancelOrder

func (f *FinamClient) CancelOrder(transactionId int32) (*tradeapi.CancelOrderResult, error)

func (*FinamClient) CancelStop

func (f *FinamClient) CancelStop(stopId int32) (*tradeapi.CancelStopResult, error)

func (*FinamClient) CloseConnection

func (f *FinamClient) CloseConnection()

func (*FinamClient) CreateRequestContext

func (f *FinamClient) CreateRequestContext()

func (*FinamClient) GetErrorChan

func (f *FinamClient) GetErrorChan() chan error

func (*FinamClient) GetOrderBooksChan

func (f *FinamClient) GetOrderBooksChan() chan *tradeapi.OrderBookEvent

func (*FinamClient) GetOrderChan

func (f *FinamClient) GetOrderChan() chan *tradeapi.OrderEvent

func (*FinamClient) GetOrderTradeChan

func (f *FinamClient) GetOrderTradeChan() chan *tradeapi.TradeEvent

func (*FinamClient) GetOrders

func (f *FinamClient) GetOrders(includeMatched, includeCanceled, includeActive bool) (*tradeapi.GetOrdersResult, error)

func (*FinamClient) GetPortfolio

func (f *FinamClient) GetPortfolio(includeCurrencies, includeMoney, includePositions, includeMaxBuySell bool) (*tradeapi.GetPortfolioResult, error)

func (*FinamClient) GetStops

func (f *FinamClient) GetStops(IncludeExecuted, includeCanceled, includeActive bool) (*tradeapi.GetStopsResult, error)

func (*FinamClient) NewOrder

func (*FinamClient) NewStop

func (*FinamClient) SubscribeOrderBook

func (f *FinamClient) SubscribeOrderBook(in *tradeapi.OrderBookSubscribeRequest)

func (*FinamClient) SubscribeOrderTrade

func (f *FinamClient) SubscribeOrderTrade(in *tradeapi.OrderTradeSubscribeRequest)

func (*FinamClient) UnSubscribeOrderBook

func (*FinamClient) UnSubscribeOrderTrade

type IFinamClient

type IFinamClient interface {
	// Подписка на биржевой стакан
	SubscribeOrderBook(in *tradeapi.OrderBookSubscribeRequest)
	// Удаление подписки на биржевой стакан
	UnSubscribeOrderBook(in *tradeapi.OrderBookUnsubscribeRequest) *tradeapi.ResponseEvent
	// Подписка на заявки и сделки
	SubscribeOrderTrade(in *tradeapi.OrderTradeSubscribeRequest)
	// Удаление подписки на заявки и сделки
	UnSubscribeOrderTrade(in *tradeapi.OrderTradeUnsubscribeRequest) *tradeapi.ResponseEvent
	// Создать новую заявку.
	NewOrder(in *tradeapi.NewOrderRequest) (*tradeapi.NewOrderResult, error)
	// Отменяет заявку.
	CancelOrder(transactionId int32) (*tradeapi.CancelOrderResult, error)
	// Возвращает список заявок.
	GetOrders(includeMatched, includeCanceled, includeActive bool) (*tradeapi.GetOrdersResult, error)
	// Возвращает список стоп-заявок.
	GetStops(includeExecuted, includeCanceled, includeActive bool) (*tradeapi.GetStopsResult, error)
	// Снимает стоп-заявку.
	CancelStop(stopId int32) (*tradeapi.CancelStopResult, error)
	// Выставляет стоп-заявку.
	NewStop(in *tradeapi.NewStopRequest) (*tradeapi.NewStopResult, error)
	// Посмотреть портфель
	GetPortfolio(includeCurrencies, includeMoney, includePositions, includeMaxBuySell bool) (*tradeapi.GetPortfolioResult, error)
	// Получение канала orderBooksChan
	GetOrderBooksChan() chan *tradeapi.OrderBookEvent
	// Получение канала orderTradeChan
	GetOrderTradeChan() chan *tradeapi.TradeEvent
	// Получение канала orderChan
	GetOrderChan() chan *tradeapi.OrderEvent
	// Получение канала ошибок
	GetErrorChan() chan error
	// Закрытие подключения
	CloseConnection()
}

func NewFinamClient

func NewFinamClient(clientId, token string, ctx context.Context) (IFinamClient, error)

Directories

Path Synopsis
examples

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL