65 lines
1.5 KiB
Go
65 lines
1.5 KiB
Go
package provider
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"gitea.computernetthings.ru/yash/crypto_alert_bot/internal/entities"
|
|
)
|
|
|
|
type Provider interface {
|
|
// Price returns the current price of the pair (base currency / quote currency).
|
|
// e.g. BTC/USDT.
|
|
Price(ctx context.Context, instrument entities.Instrument) (*entities.Price, error)
|
|
|
|
// Candles returns OHLC candles for the given interval in the [from, to) range.
|
|
// interval is a provider-specific string (e.g. "1", "5", "60", "D", "W" for Bybit).
|
|
// The implementation handles pagination automatically when the range exceeds one
|
|
// request's capacity.
|
|
Candles(ctx context.Context, instrument entities.Instrument, from, to time.Time, interval KlineInterval) ([]entities.Candle, error)
|
|
}
|
|
|
|
type KlineInterval string
|
|
|
|
const (
|
|
Kline1m = "1"
|
|
Kline3m = "3"
|
|
Kline5m = "5"
|
|
Kline15m = "15"
|
|
Kline30m = "30"
|
|
Kline1H = "1h"
|
|
Kline4H = "4h"
|
|
Kline6H = "6h"
|
|
Kline12H = "12h"
|
|
Kline1D = "1d"
|
|
Kline1W = "1w"
|
|
)
|
|
|
|
func (k KlineInterval) ToDuration() time.Duration {
|
|
switch k {
|
|
case Kline1m:
|
|
return time.Minute
|
|
case Kline3m:
|
|
return 3 * time.Minute
|
|
case Kline5m:
|
|
return 5 * time.Minute
|
|
case Kline15m:
|
|
return 15 * time.Minute
|
|
case Kline30m:
|
|
return 30 * time.Minute
|
|
case Kline1H:
|
|
return time.Hour
|
|
case Kline4H:
|
|
return 4 * time.Hour
|
|
case Kline6H:
|
|
return 6 * time.Hour
|
|
case Kline12H:
|
|
return 12 * time.Hour
|
|
case Kline1D:
|
|
return 24 * time.Hour
|
|
case Kline1W:
|
|
return 7 * 24 * time.Hour
|
|
default:
|
|
return time.Minute
|
|
}
|
|
}
|