Documentation ¶
Overview ¶
Package trengin предоставляет каркас для создания торгового робота. Определяет интерфейс Strategy и Broker, позволяя связать реализации этих интерфейсов через экземпляр Engine.
Strategy имеет возможность гибко выполнять действия по открытию новой позиции (OpenPositionAction), изменении условной заявки позиции (стоп-лосс и тейк-профит) (ChangeConditionalOrderAction) и закрытию позиции (ClosePositionAction).
Broker должен реализовывать функционал открытия сделки, отслеживания статуса условной заявки, изменения условной заявки и закрытия позиции.
Для выполнения дополнительного функционала можно устанавливать коллбеки на события изменения позиции c помощью методов OnPositionOpened, OnPositionClosed и OnConditionalOrderChanged
Index ¶
- Variables
- type Actions
- type Broker
- 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 MockStrategy
- type OpenPositionAction
- type OpenPositionActionResult
- type Position
- 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) 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
- type PositionClosed
- type PositionID
- type PositionType
- 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 открывает позицию и запускает отслеживание условной заявки // Возвращает открытую позицию, и канал PositionClosed, в который будет отправлена // позиция при закрытии. OpenPosition(ctx context.Context, action OpenPositionAction) (Position, PositionClosed, error) // ClosePosition закрывает позицию. Возвращает закрытую позицию ClosePosition(ctx context.Context, action ClosePositionAction) (Position, error) // ChangeConditionalOrder изменяет условную заявку по позиции. Возвращает измененную позицию ChangeConditionalOrder(ctx context.Context, action ChangeConditionalOrderAction) (Position, error) }
Broker описывает интерфейс клиента, исполняющего торговые операции и отслеживающего статус условных заявок по позициям.
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 (*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 MockStrategy ¶
MockStrategy is an autogenerated mock type for the Strategy type
func (*MockStrategy) Actions ¶
func (_m *MockStrategy) Actions() Actions
Actions provides a mock function with given fields:
func (*MockStrategy) Errors ¶
func (_m *MockStrategy) Errors() <-chan error
Errors provides a mock function with given fields:
func (*MockStrategy) Run ¶
func (_m *MockStrategy) Run(ctx context.Context)
Run provides a mock function with given fields: ctx
type OpenPositionAction ¶
type OpenPositionAction struct { Type PositionType // Отступ стоп-лосса от цены открытия. Если равен 0, то стоп-лосс не должен использоваться StopLossIndent float64 // Отступ тейк-профита от цены открытия. Если равен 0, то тейк-профит не должен использоваться TakeProfitIndent float64 // contains filtered or unexported fields }
OpenPositionAction описывает действие по открытию позиции с типом Type и отступами условной заявки StopLossIndent и TakeProfitIndent
func NewOpenPositionAction ¶
func NewOpenPositionAction(positionType PositionType, stopLossIndent, takeProfitIndent float64) OpenPositionAction
NewOpenPositionAction создает действие на открытие позиции с типом positionType, отступом стоп-лосса от цены открытия stopLossIndent и отступом тейк-профита от цены открытия takeProfitIndent. Если стоп-лосс или тейк-профит не требуются, то соответствующие значения отступов должны быть равны 0.
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 Position ¶
type Position struct { ID PositionID Type PositionType OpenTime time.Time OpenPrice float64 CloseTime time.Time ClosePrice float64 StopLoss float64 TakeProfit float64 // contains filtered or unexported fields }
Position описывает торговую позицию. Идентификатор ID является уникальным только в рамках одного запуска
func NewPosition ¶
func NewPosition(action OpenPositionAction, openTime time.Time, openPrice float64) (*Position, error)
NewPosition создает новую позицию по action, с временем открытия openTime и с ценой открытия openPrice. Если action невалиден, то вернет ErrActionNotValid.
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
type PositionClosed ¶
type PositionClosed <-chan Position
PositionClosed канал, в который отправляется позиция при закрытии
type PositionID ¶
type PositionID int64
type PositionType ¶
type PositionType int
const ( Long PositionType = iota + 1 Short )
func (PositionType) Multiplier ¶
func (t PositionType) Multiplier() float64
Multiplier возвращает 1 для значения Long, -1 для значения Short и 0 на любое другое значение. Может использоваться как множитель при вычислениях, которые зависят от типа позиции, например, при вычислении прибыли по позиции
type Strategy ¶
type Strategy interface { // Run запускает стратегию в работу Run(ctx context.Context) // Actions возвращает канал для получения торговых действий. При закрытии // канала Engine завершит работу. Actions() Actions // Errors возвращает канал для получения ошибок. При получении сообщения // из канала или на его закрытие Engine завершит работу. Errors() <-chan error }
Strategy описывает интерфейс торговой стратегии. Позволяет реализовать стратегию, взаимодействуя с Engine через каналы, которые возвращают методы Actions и Errors. Actions используется для отправки торговых действий, Errors для оповещения о критической ошибке. Есть закрыть любой из каналов или отправить значение в канал ошибок, то Engine завершит свою работу