bot

package
v1.4.10 Latest Latest
Warning

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

Go to latest
Published: Jul 5, 2024 License: Apache-2.0 Imports: 14 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type AnalyseFunc

type AnalyseFunc func(id string, candles []*pb.HistoricCandle) (*analyseResponse, error)

AnalyseFunc - Функция для анализа свечей и расчета интервала

type AnalyseType

type AnalyseType int

AnalyseType - Тип анализа исторических свечей при расчете интервала

const (
	// MATH_STAT - Анализ свечей при помощи пакета stats. Интервал для цены это AnalyseLowPercentile-AnalyseHighPercentile
	// из выборки средних цен свечей за последние DaysToCalculateInterval дней
	MATH_STAT AnalyseType = iota
	// BEST_WIDTH - Анализ свечей происходит так:
	// Вычисляется медиана распределения выборки средних цен свечей за последние DaysToCalculateInterval дней, от нее берется
	// сначала фиксированный интервал шириной MinProfit процентов от медианы, далее если это выгодно интервал расширяется.
	// Так же есть возможность задать фиксированный интервал в процентах.
	BEST_WIDTH
	// SIMPLEST - Поиск интервала простым перебором
	SIMPLEST
)

type BacktestConfig

type BacktestConfig struct {
	// Analyse - Тип анализа исторических свечей при расчете интервала
	Analyse AnalyseType
	// LowPercent - Для анализа типа MathStat нижний перцентиль для расчета интервала
	LowPercentile float64
	// HighPercentile - Для анализа типа MathStat верхний перцентиль для расчета интервала
	HighPercentile float64
	// MinProfit - Минимальный профит для рассчета, с которым рассчитывается интервал
	MinProfit float64
	// StopLoss - Процент убытка для выставления стоп-лосс заявки
	StopLoss float64
	// DaysToCalculateInterval - Кол-во дней на которых рассчитывается интервал для цен для торговли
	DaysToCalculateInterval int
	// Commission - Комиссия за 1 сделку в процентах
	Commission float64
}

type Bot

type Bot struct {
	StrategyConfig IntervalStrategyConfig
	Client         *investgo.Client
	// contains filtered or unexported fields
}

Bot - Интервальный бот

func NewBot

func NewBot(ctx context.Context, client *investgo.Client, s *CandlesStorage, e *Executor, config IntervalStrategyConfig) (*Bot, error)

NewBot - Создание нового интервального бота по конфигу

func (*Bot) BackTest

func (b *Bot) BackTest(start time.Time, bc BacktestConfig) (float64, float64, error)

BackTest - Проверка стратегии на исторических данных

func (*Bot) Run

func (b *Bot) Run() error

Run - Запуск интервального бота

func (*Bot) Stop

func (b *Bot) Stop() error

func (*Bot) UpdateIntervals

func (b *Bot) UpdateIntervals(from time.Time, ids []string) error

type CandleDB

type CandleDB struct {
	Id            int     `db:"id"`
	InstrumentUid string  `db:"instrument_uid"`
	Open          float64 `db:"open"`
	Close         float64 `db:"close"`
	High          float64 `db:"high"`
	Low           float64 `db:"low"`
	Volume        int     `db:"volume"`
	Time          int64   `db:"time"`
	IsComplete    int     `db:"is_complete"`
}

type CandlesStorage

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

CandlesStorage - Локально хранилище свечей в sqlite

func NewCandlesStorage

func NewCandlesStorage(req NewCandlesStorageRequest) (*CandlesStorage, error)

NewCandlesStorage - Создание хранилища свечей

func (*CandlesStorage) Candles

func (c *CandlesStorage) Candles(id string, from, to time.Time) ([]*pb.HistoricCandle, error)

Candles - Получение исторических свечей по uid инструмента

func (*CandlesStorage) CandlesAll

func (c *CandlesStorage) CandlesAll(uid string) ([]*pb.HistoricCandle, error)

CandlesAll - Получение всех исторических свечей из хранилища по uid инструмента

func (*CandlesStorage) Close

func (c *CandlesStorage) Close() error

Close - Закрытие хранилища свечей

func (*CandlesStorage) LoadCandlesHistory

func (c *CandlesStorage) LoadCandlesHistory(id string, interval pb.CandleInterval, inc *pb.Quotation, from time.Time) error

LoadCandlesHistory - Начальная загрузка исторических свечей для нового инструмента (from - now)

func (*CandlesStorage) UpdateCandlesHistory

func (c *CandlesStorage) UpdateCandlesHistory(id string) error

UpdateCandlesHistory - Загрузить исторические свечи в хранилище от времени последнего обновления до now

type Executor

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

Executor - Вызывается ботом и исполняет торговые поручения

func NewExecutor

func NewExecutor(ctx context.Context, c *investgo.Client, ids map[string]Instrument) *Executor

func (*Executor) BuyLimit

func (e *Executor) BuyLimit(id string, price float64) error

BuyLimit - Выставление лимитного торгового поручения на покупку инструмента с uid = id по цене ближайшей к price

func (*Executor) CancelLimit

func (e *Executor) CancelLimit(id string) error

CancelLimit - Отмена текущего лимитного поручения, если оно есть, для инструмента с uid = id

func (*Executor) ReplaceLimit

func (e *Executor) ReplaceLimit(id string, price float64) error

ReplaceLimit - Изменение цены лимитного торгового поручения, если оно есть, для инструмента с uid = id

func (*Executor) SellLimit

func (e *Executor) SellLimit(id string, price float64) error

SellLimit - Выставление лимитного торгового поручения на продажу инструмента с uid = id по цене ближайшей к price

func (*Executor) SellOut

func (e *Executor) SellOut() (float64, error)

SellOut - Метод выхода из всех текущих позиций

func (*Executor) Start

func (e *Executor) Start(i map[string]Interval) error

Start - Запуск отслеживания инструментов и непрерывное выставление лимитных заявок по интервалам

func (*Executor) Stop

func (e *Executor) Stop(sellOut bool) error

Stop - Завершение работы

func (*Executor) UpdateInterval

func (e *Executor) UpdateInterval(id string, i Interval) error

UpdateInterval - Обновление интервала для инструмента и замена заявки, если понадобится

type Instrument

type Instrument struct {
	// Quantity - Количество лотов, которое покупает/продает исполнитель за 1 поручение
	Quantity int64
	// lot - Лотность инструмента
	Lot int32
	//currency - Код валюты инструмента
	Currency string
	//ticker - Тикер инструмента
	Ticker string
	//minPriceInc - Минимальный шаг цены
	MinPriceInc *pb.Quotation
	// entryPrice - После открытия позиции, сохраняется цена этой сделки
	EntryPrice float64
	// stopLossPercent - Процент изменения цены, для стоп-лосс заявки
	StopLossPercent float64
}

type InstrumentState

type InstrumentState int
const (
	// WAIT_ENTRY_PRICE - Ожидание нужной last price по инструменту, для выставления лимитной заявки на покупку.
	// Аналог StopLimit заявки на покупку
	WAIT_ENTRY_PRICE InstrumentState = iota
	// OUT_OF_STOCK - Нет открытых позиций по этому инструменту
	OUT_OF_STOCK
	// IN_STOCK - Есть открытая позиция по этому инструменту
	IN_STOCK
	// TRY_TO_BUY - Выставлена лимитная заявка на покупку этого инструмента
	TRY_TO_BUY
	// TRY_TO_SELL - Выставлена лимитная заявка на продажу этого инструмента
	TRY_TO_SELL
)

type Interval

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

Interval - Интервал цены. Low - для покупки, high - для продажи

type IntervalStrategyConfig

type IntervalStrategyConfig struct {
	// Instruments - Слайс идентификаторов инструментов первичный
	Instruments []string
	// PreferredPositionPrice - Предпочтительная стоимость открытия позиции в валюте
	PreferredPositionPrice float64
	// MaxPositionPrice - Максимальная стоимость открытия позиции в валюте
	MaxPositionPrice float64
	// MinProfit - Минимальный процент выгоды, с которым можно совершать сделки
	MinProfit float64
	// IntervalUpdateDelay - Время ожидания для перерасчета интервала цены
	IntervalUpdateDelay time.Duration
	// TopInstrumentsQuantity - Топ лучших инструментов по волатильности
	TopInstrumentsQuantity int
	// SellOut - Если true, то по достижению дедлайна бот выходит из всех активных позиций
	SellOut bool
	// StorageDBPath - Путь к бд sqlite, в которой лежат исторические свечи по инструментам
	StorageDBPath string
	// StorageCandleInterval - Интервал для обновления и запроса исторических свечей
	StorageCandleInterval pb.CandleInterval
	// StorageFromTime - Время, от которого будет хранилище будет загружать историю для новых инструментов
	StorageFromTime time.Time
	// StorageUpdate - Если true, то в хранилище обновятся все свечи до now
	StorageUpdate bool
	// DaysToCalculateInterval - Кол-во дней, на которых рассчитывается интервал цен для торговли
	DaysToCalculateInterval int
	// StopLossPercent - Процент изменения цены, для стоп-лосс заявки
	StopLossPercent float64
	// AnalyseLowPercentile - Нижний процентиль для расчета интервала
	AnalyseLowPercentile float64
	// AnalyseHighPercentile - Верхний процентиль для расчета интервала
	AnalyseHighPercentile float64
	// Analyse - Тип анализа исторических свечей при расчете интервала
	Analyse AnalyseType
}

IntervalStrategyConfig - Конфигурация стратегии интервального бота

type NewCandlesStorageRequest

type NewCandlesStorageRequest struct {
	// DBPath - Путь к файлу sqlite
	DBPath string
	// Update - Нужно ли обновлять историю
	Update bool
	// RequiredInstruments - Требуемые инструменты
	RequiredInstruments map[string]StorageInstrument
	Logger              investgo.Logger
	MarketDataService   *investgo.MarketDataServiceClient
	// From, To - Интервал,
	From, To time.Time
}

NewCandlesStorageRequest - Параметры для создания хранилища свечей

type Positions

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

Positions - Данные о позициях счета

func NewPositions

func NewPositions() *Positions

func (*Positions) Get

func (p *Positions) Get() *pb.PositionData

Get - получение позиций

func (*Positions) Update

func (p *Positions) Update(data *pb.PositionData)

Update - Обновление позиций

type State

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

State - Текущее состояние торгового инструмента

type States

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

States - Состояния инструментов, с которыми работает исполнитель

func NewStates

func NewStates() *States

func (*States) Get

func (s *States) Get(id string) (State, bool)

Get - Получение состояния инструмента

func (*States) Update

func (s *States) Update(id string, st State)

Update - Обновление состояния инструмента

type StorageInstrument

type StorageInstrument struct {
	CandleInterval pb.CandleInterval
	PriceStep      *pb.Quotation
	FirstUpdate    time.Time
	LastUpdate     time.Time
	Ticker         string
}

StorageInstrument - Информация об инструменте в хранилище

Jump to

Keyboard shortcuts

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