sixth version
This commit is contained in:
@@ -463,6 +463,12 @@ func (s *Scheduler) placeEntryOrders(ctx context.Context, now time.Time) error {
|
||||
if err != nil {
|
||||
tradingStatus = domain.TradingStatusUnknown
|
||||
}
|
||||
if err := s.checkEntryInstrumentBeforeOrder(instrument, tradingStatus); err != nil {
|
||||
if insertErr := s.recordPreTradeReject(ctx, sig.InstrumentUID, err.Error(), `{"reason":"instrument_pre_trade"}`); insertErr != nil {
|
||||
return insertErr
|
||||
}
|
||||
continue
|
||||
}
|
||||
portfolio, err = s.svc.Gateway.GetPortfolio(ctx, s.svc.AccountID)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -1153,6 +1159,12 @@ func (s Scheduler) repostPreTradeCheck(ctx context.Context, now time.Time, order
|
||||
if err != nil {
|
||||
tradingStatus = domain.TradingStatusUnknown
|
||||
}
|
||||
if order.Side == domain.SideBuy {
|
||||
if err := s.checkEntryInstrumentBeforeOrder(instrument, tradingStatus); err != nil {
|
||||
_ = s.recordPreTradeReject(ctx, order.InstrumentUID, err.Error(), `{"reason":"instrument_pre_trade","stage":"repost"}`)
|
||||
return err
|
||||
}
|
||||
}
|
||||
portfolio, err := s.svc.Gateway.GetPortfolio(ctx, s.svc.AccountID)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -1172,6 +1184,16 @@ func (s Scheduler) repostPreTradeCheck(ctx context.Context, now time.Time, order
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s Scheduler) checkEntryInstrumentBeforeOrder(instrument domain.Instrument, tradingStatus domain.TradingStatus) error {
|
||||
if err := instruments.CheckInstrument(instrument, tradingStatus); err != nil {
|
||||
return err
|
||||
}
|
||||
if s.cfg.RequireZeroCommission && instrument.ExpectedCommissionBpsPerSide.IsPositive() {
|
||||
return errors.New(signal.ReasonCommission)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s Scheduler) preTradeCheck(ctx context.Context, now time.Time, instrumentUID string, portfolio domain.Portfolio, openPositions int, tradingStatus domain.TradingStatus, quoteReceivedAt time.Time) (risk.PreTradeResult, error) {
|
||||
metrics, err := s.riskMetrics(ctx, now, portfolio)
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user