ADD: added first version
This commit is contained in:
82
internal/alpaca/client.go
Normal file
82
internal/alpaca/client.go
Normal file
@@ -0,0 +1,82 @@
|
||||
package alpaca
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"alpaca-bot/internal/config"
|
||||
"alpaca-bot/internal/model"
|
||||
|
||||
"github.com/alpacahq/alpaca-trade-api-go/v3/alpaca"
|
||||
"github.com/alpacahq/alpaca-trade-api-go/v3/marketdata"
|
||||
"github.com/shopspring/decimal"
|
||||
)
|
||||
|
||||
type Client struct {
|
||||
alpacaClient *alpaca.Client
|
||||
mdClient *marketdata.Client
|
||||
}
|
||||
|
||||
// Create new Alpaca client
|
||||
func NewClient(cfg config.AlpacaConfig) *Client {
|
||||
c := alpaca.NewClient(alpaca.ClientOpts{
|
||||
APIKey: cfg.ApiKey,
|
||||
APISecret: cfg.ApiSecret,
|
||||
BaseURL: cfg.TradeURL,
|
||||
})
|
||||
|
||||
md := marketdata.NewClient(marketdata.ClientOpts{
|
||||
APIKey: cfg.ApiKey,
|
||||
APISecret: cfg.ApiSecret,
|
||||
})
|
||||
|
||||
return &Client{
|
||||
alpacaClient: c,
|
||||
mdClient: md,
|
||||
}
|
||||
}
|
||||
|
||||
// Fetch historical bars
|
||||
func (c *Client) GetHistoricalBars(symbol string, timeframe string, start, end time.Time) ([]model.Bar, error) {
|
||||
req := marketdata.GetBarsRequest{
|
||||
TimeFrame: marketdata.OneHour, // e.g. "1Day", "1Min"
|
||||
Start: start,
|
||||
End: end,
|
||||
}
|
||||
|
||||
resp, err := c.mdClient.GetBars(symbol, req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
bars := []model.Bar{}
|
||||
for _, b := range resp {
|
||||
bars = append(bars, model.Bar{
|
||||
Symbol: symbol,
|
||||
Time: b.Timestamp,
|
||||
Open: b.Open,
|
||||
High: b.High,
|
||||
Low: b.Low,
|
||||
Close: b.Close,
|
||||
// Volume: b.Volume,
|
||||
})
|
||||
}
|
||||
|
||||
return bars, nil
|
||||
}
|
||||
|
||||
// Example: submit an order
|
||||
func (c *Client) SubmitOrder(symbol string, qty *decimal.Decimal, side alpaca.Side, orderType alpaca.OrderType, timeInForce alpaca.TimeInForce) (*alpaca.Order, error) {
|
||||
orderReq := alpaca.PlaceOrderRequest{
|
||||
Symbol: symbol,
|
||||
Qty: qty,
|
||||
Side: side,
|
||||
Type: orderType,
|
||||
TimeInForce: timeInForce,
|
||||
}
|
||||
|
||||
order, err := c.alpacaClient.PlaceOrder(orderReq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return order, nil
|
||||
}
|
||||
Reference in New Issue
Block a user