Documentation ¶
Overview ¶
Package trengin предоставляет каркас для создания торгового робота. Определяет интерфейс Strategy и Broker, позволяя связать реализации этих интерфейсов через экземпляр Engine.
Strategy имеет возможность гибко выполнять действия по открытию новой позиции (OpenPositionAction), изменении условной заявки позиции (стоп-лосс и тейк-профит) (ChangeConditionalOrderAction) и закрытию позиции (ClosePositionAction).
Broker должен реализовывать функционал открытия сделки, отслеживания статуса условной заявки, изменения условной заявки и закрытия позиции.
Для выполнения дополнительного функционала можно устанавливать коллбеки на события изменения позиции c помощью методов OnPositionOpened, OnPositionClosed и OnConditionalOrderChanged
Index ¶
- Variables
- type Actions
- type Broker
- type BrokerRunner
- type ChangeConditionalOrderAction
- type ChangeConditionalOrderActionResult
- type ClosePositionAction
- type ClosePositionActionResult
- type Engine
- type MockBroker
- func (_m *MockBroker) ChangeConditionalOrder(ctx context.Context, action ChangeConditionalOrderAction) (Position, error)
- func (_m *MockBroker) ClosePosition(ctx context.Context, action ClosePositionAction) (Position, error)
- func (_m *MockBroker) OpenPosition(ctx context.Context, action OpenPositionAction) (Position, PositionClosed, error)
- type MockBrokerRunner
- func (_m *MockBrokerRunner) ChangeConditionalOrder(ctx context.Context, action ChangeConditionalOrderAction) (Position, error)
- func (_m *MockBrokerRunner) ClosePosition(ctx context.Context, action ClosePositionAction) (Position, error)
- func (_m *MockBrokerRunner) OpenPosition(ctx context.Context, action OpenPositionAction) (Position, PositionClosed, error)
- func (_m *MockBrokerRunner) Run(ctx context.Context) error
- type MockStrategy
- type OpenPositionAction
- type OpenPositionActionResult
- type Option
- type Position
- func (p *Position) AddCommission(val float64)
- func (p *Position) Close(closeTime time.Time, closePrice float64) (err error)
- func (p *Position) Closed() <-chan struct{}
- func (p *Position) Duration() time.Duration
- func (p *Position) Extra(key interface{}) interface{}
- func (p *Position) IsClosed() bool
- func (p *Position) IsLong() bool
- func (p *Position) IsShort() bool
- func (p *Position) Profit() float64
- func (p *Position) ProfitByPrice(price float64) float64
- func (p *Position) RangeExtra(f func(key interface{}, val interface{}))
- func (p *Position) SetExtra(key interface{}, val interface{}) *Position
- func (p *Position) UnitCommission() float64
- func (p *Position) UnitProfit() float64
- type PositionClosed
- type PositionID
- type PositionType
- type Runner
- type Strategy
Constants ¶
This section is empty.
Variables ¶
Functions ¶
This section is empty.
Types ¶
type Actions ¶
type Actions chan interface{}
Actions это канал для передачи торговых действий от Strategy к Broker Может принимать типы OpenPositionAction, ClosePositionAction, ChangeConditionalOrderAction. Неожиданные типы приведут к ошибке и завершению работы Engine
type Broker ¶
type Broker interface { // OpenPosition opens a position and returns Position and PositionClosed channel, // which will be sent closed position. OpenPosition(ctx context.Context, action OpenPositionAction) (Position, PositionClosed, error) // ClosePosition closes a position and returns closed position. ClosePosition(ctx context.Context, action ClosePositionAction) (Position, error) // ChangeConditionalOrder changes conditional orders and returns changed position. ChangeConditionalOrder(ctx context.Context, action ChangeConditionalOrderAction) (Position, error) }
Broker describes client for execution of trading operations.
type BrokerRunner ¶
type ChangeConditionalOrderAction ¶
type ChangeConditionalOrderAction struct { PositionID PositionID StopLoss float64 TakeProfit float64 // contains filtered or unexported fields }
ChangeConditionalOrderAction описывает действие на изменение условной заявки позиции с идентификатором PositionID. При передаче StopLoss или TakeProfit равным 0 данные значения не должны изменяться.
func NewChangeConditionalOrderAction ¶
func NewChangeConditionalOrderAction(positionID PositionID, stopLoss, takeProfit float64) ChangeConditionalOrderAction
NewChangeConditionalOrderAction создает действие на изменение условной заявки по позиции с указанным positionID и новыми значения stopLoss и takeProfit. Если менять stopLoss или takeProfit не требуется, то нужно передать их равными 0.
func (*ChangeConditionalOrderAction) Result ¶
func (a *ChangeConditionalOrderAction) Result(ctx context.Context) (ChangeConditionalOrderActionResult, error)
Result возвращает канал, который вернет результат выполнения действия на изменения условной заявки.
type ChangeConditionalOrderActionResult ¶
type ChangeConditionalOrderActionResult struct { Position Position // contains filtered or unexported fields }
ChangeConditionalOrderActionResult описывает результат изменения условной заявки
type ClosePositionAction ¶
type ClosePositionAction struct { PositionID PositionID // contains filtered or unexported fields }
ClosePositionAction описывает действие по закрытию позиции.
func NewClosePositionAction ¶
func NewClosePositionAction(positionID PositionID) ClosePositionAction
NewClosePositionAction создает действие на закрытие позиции с идентификатором positionID.
func (*ClosePositionAction) Result ¶
func (a *ClosePositionAction) Result(ctx context.Context) (ClosePositionActionResult, error)
Result возвращает результат выполнения действия на закрытия позиции.
type ClosePositionActionResult ¶
type ClosePositionActionResult struct { Position Position // contains filtered or unexported fields }
ClosePositionActionResult описывает результат закрытия позиции.
type Engine ¶
type Engine struct {
// contains filtered or unexported fields
}
Engine описывыет торговый движок. Создавать следует через конструктор New
func (*Engine) OnConditionalOrderChanged ¶
OnConditionalOrderChanged устанавливает коллбек f на изменение условной заявки по позиции. Актуальная позиция передается параметром в метод f. Возвращает указатель на Engine, реализуя текучий интерфейс.
Метод не потокобезопасен. Не следует вызывать в разных горутинах и после запуска Engine
func (*Engine) OnPositionClosed ¶
OnPositionClosed устанавливает коллбек f на закрытие позиции. Актуальная позиция передается параметром в метод f. Возвращает указатель на Engine, реализуя текучий интерфейс.
Метод не потокобезопасен. Не следует вызывать в разных горутинах и после запуска Engine
func (*Engine) OnPositionOpened ¶
OnPositionOpened устанавливает коллбек f на открытие позиции. Актуальная позиция передается параметром в метод f. Возвращает указатель на Engine, реализуя текучий интерфейс.
Метод не потокобезопасен. Не следует вызывать в разных горутинах и после запуска Engine
type MockBroker ¶
MockBroker is an autogenerated mock type for the Broker type
func NewMockBroker ¶
func NewMockBroker(t mockConstructorTestingTNewMockBroker) *MockBroker
NewMockBroker creates a new instance of MockBroker. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
func (*MockBroker) ChangeConditionalOrder ¶
func (_m *MockBroker) ChangeConditionalOrder(ctx context.Context, action ChangeConditionalOrderAction) (Position, error)
ChangeConditionalOrder provides a mock function with given fields: ctx, action
func (*MockBroker) ClosePosition ¶
func (_m *MockBroker) ClosePosition(ctx context.Context, action ClosePositionAction) (Position, error)
ClosePosition provides a mock function with given fields: ctx, action
func (*MockBroker) OpenPosition ¶
func (_m *MockBroker) OpenPosition(ctx context.Context, action OpenPositionAction) (Position, PositionClosed, error)
OpenPosition provides a mock function with given fields: ctx, action
type MockBrokerRunner ¶
MockBrokerRunner is an autogenerated mock type for the BrokerRunner type
func NewMockBrokerRunner ¶
func NewMockBrokerRunner(t mockConstructorTestingTNewMockBrokerRunner) *MockBrokerRunner
NewMockBrokerRunner creates a new instance of MockBrokerRunner. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
func (*MockBrokerRunner) ChangeConditionalOrder ¶
func (_m *MockBrokerRunner) ChangeConditionalOrder(ctx context.Context, action ChangeConditionalOrderAction) (Position, error)
ChangeConditionalOrder provides a mock function with given fields: ctx, action
func (*MockBrokerRunner) ClosePosition ¶
func (_m *MockBrokerRunner) ClosePosition(ctx context.Context, action ClosePositionAction) (Position, error)
ClosePosition provides a mock function with given fields: ctx, action
func (*MockBrokerRunner) OpenPosition ¶
func (_m *MockBrokerRunner) OpenPosition(ctx context.Context, action OpenPositionAction) (Position, PositionClosed, error)
OpenPosition provides a mock function with given fields: ctx, action
type MockStrategy ¶
MockStrategy is an autogenerated mock type for the Strategy type
func NewMockStrategy ¶
func NewMockStrategy(t mockConstructorTestingTNewMockStrategy) *MockStrategy
NewMockStrategy creates a new instance of MockStrategy. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
type OpenPositionAction ¶
type OpenPositionAction struct { SecurityBoard string // Trading mode identifier. Example, TQBR SecurityCode string // Example, SBER FIGI string // Financial Instrument Global Identifier Type PositionType Quantity int64 StopLossOffset float64 // Stop loss offset from the opening price. If 0 then stop loss is not set TakeProfitOffset float64 // Take profit offset from the opening price. If 0 then stop loss is not set // contains filtered or unexported fields }
OpenPositionAction is an action to open a position
func NewOpenPositionAction ¶
func NewOpenPositionAction( figi string, positionType PositionType, quantity int64, stopLossOffset float64, takeProfitOffset float64, ) OpenPositionAction
NewOpenPositionAction creates OpenPositionAction with the given figi, type of position, quantity of lots, stop loss and take profit offsets. If offset is 0 then conditional order is not set.
func (*OpenPositionAction) IsValid ¶
func (a *OpenPositionAction) IsValid() bool
IsValid проверяет, что действие валидно
func (*OpenPositionAction) Result ¶
func (a *OpenPositionAction) Result(ctx context.Context) (OpenPositionActionResult, error)
Result возвращает результат выполнения действия на открытие позиции.
type OpenPositionActionResult ¶
type OpenPositionActionResult struct { Position Position Closed PositionClosed // Канал, для отслеживания закрытия сделки // contains filtered or unexported fields }
OpenPositionActionResult результат открытия позиции
type Option ¶
type Option func(*Engine)
func WithPreventBrokerRun ¶
WithPreventBrokerRun returns Option which sets preventBrokerRun. The default preventBrokerRun is false
type Position ¶
type Position struct { ID PositionID SecurityBoard string // Trading mode identifier. Example, TQBR SecurityCode string // Example, SBER FIGI string // Financial Instrument Global Identifier Type PositionType Quantity int64 OpenTime time.Time OpenPrice float64 CloseTime time.Time ClosePrice float64 StopLoss float64 TakeProfit float64 Commission float64 // contains filtered or unexported fields }
Position is a trading position.
func NewPosition ¶
func NewPosition(action OpenPositionAction, openTime time.Time, openPrice float64) (*Position, error)
NewPosition создает новую позицию по action, с временем открытия openTime и с ценой открытия openPrice. Если action невалиден, то вернет ErrActionNotValid.
func (*Position) AddCommission ¶
AddCommission add commission to position
func (*Position) Close ¶
Close закрывает позицию с временем закрытия closeTime и ценой закрытия closePrice. При повторном вызове вернет ошибку ErrAlreadyClosed, время и цена закрытия в этом случае не изменится.
func (*Position) Closed ¶
func (p *Position) Closed() <-chan struct{}
Closed возвращает канал, который будет закрыт при закрытии позиции
func (*Position) Extra ¶
func (p *Position) Extra(key interface{}) interface{}
Extra получает значение дополнительного поля по ключу key. Если значение не задано, то вернет nil
func (*Position) Profit ¶
Profit возвращает прибыль по закрытой сделке. Для получения незафиксированной прибыли по открытой позиции следует использовать метод ProfitByPrice
func (*Position) ProfitByPrice ¶
ProfitByPrice возвращает прибыль позиции при указанной цене price
func (*Position) RangeExtra ¶
func (p *Position) RangeExtra(f func(key interface{}, val interface{}))
RangeExtra применяет функцию f ко всем элементам списка Extra
func (*Position) SetExtra ¶
SetExtra устанавливает значение дополнительного поля с ключом key. Может использоваться для хранения дополнительных необязательных информационных данных при реализации стратегии или брокера. Не следует завязываться на эти данные при реализации логики работы Strategy или Broker. Исключение: локальное использование в рамках реализации Strategy или Broker
func (*Position) UnitCommission ¶
UnitCommission returns commission per volume unit
func (*Position) UnitProfit ¶
UnitProfit returns profit per volume unit
type PositionClosed ¶
type PositionClosed <-chan Position
PositionClosed канал, в который отправляется позиция при закрытии
type PositionID ¶
func (PositionID) String ¶
func (p PositionID) String() string
type PositionType ¶
type PositionType int
const ( Long PositionType = iota + 1 Short )
func (PositionType) Inverse ¶
func (t PositionType) Inverse() PositionType
Inverse returns inverted position type
func (PositionType) IsLong ¶
func (t PositionType) IsLong() bool
IsLong returns true if position is long
func (PositionType) IsShort ¶
func (t PositionType) IsShort() bool
IsShort returns true if position is short
func (PositionType) IsValid ¶
func (t PositionType) IsValid() bool
IsValid returns true if position is valid
func (PositionType) Multiplier ¶
func (t PositionType) Multiplier() float64
Multiplier возвращает 1 для значения Long, -1 для значения Short и 0 на любое другое значение. Может использоваться как множитель при вычислениях, которые зависят от типа позиции, например, при вычислении прибыли по позиции
type Runner ¶
Runner can be implemented Broker client to starts background tasks such as tracking open position.
type Strategy ¶
type Strategy interface { // Run запускает стратегию в работу Run(ctx context.Context, actions Actions) error }
Strategy описывает интерфейс торговой стратегии. Позволяет реализовать стратегию, взаимодействуя с Engine через канал, которые возвращает метод Actions. Actions используется для отправки торговых действий. Есть закрыть канал Actions, то Engine завершит свою работу