From 5ee2df12b5905a014cdf46d3f1fbbd48eb8c3c7c Mon Sep 17 00:00:00 2001 From: Luke Wilson Date: Thu, 31 Oct 2024 20:30:22 -0500 Subject: [PATCH] Error when the Oanda token or account ID is not set --- cmd/ichimoku.go | 8 +++++++- cmd/oanda_testing.go | 8 +++++++- cmd/sma_crossover.go | 7 ++++++- oanda/oanda.go | 10 ++++++++-- 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/cmd/ichimoku.go b/cmd/ichimoku.go index 15af31f..b823402 100644 --- a/cmd/ichimoku.go +++ b/cmd/ichimoku.go @@ -3,6 +3,7 @@ package main import ( + "fmt" "os" "time" @@ -86,7 +87,12 @@ func (s *IchimokuStrategy) Next(t *auto.Trader) { } func main() { - broker := oanda.NewOandaBroker(os.Getenv("OANDA_TOKEN"), os.Getenv("OANDA_ACCOUNT_ID"), true) + broker, err := oanda.NewOandaBroker(os.Getenv("OANDA_TOKEN"), os.Getenv("OANDA_ACCOUNT_ID"), true) + if err != nil { + fmt.Println("error:", err) + return + } + auto.Backtest(auto.NewTrader(auto.TraderConfig{ Broker: auto.NewTestBroker(broker, nil, 10000, 50, 0.0002, 0), Strategy: &IchimokuStrategy{convPeriod: 9, basePeriod: 26, leadingPeriods: 52}, diff --git a/cmd/oanda_testing.go b/cmd/oanda_testing.go index 7198741..2491c60 100644 --- a/cmd/oanda_testing.go +++ b/cmd/oanda_testing.go @@ -3,13 +3,19 @@ package main import ( + "fmt" "os" "github.com/fivemoreminix/autotrader/oanda" ) func main() { - broker := oanda.NewOandaBroker(os.Getenv("OANDA_TOKEN"), os.Getenv("OANDA_ACCOUNT_ID"), true) + broker, err := oanda.NewOandaBroker(os.Getenv("OANDA_TOKEN"), os.Getenv("OANDA_ACCOUNT_ID"), true) + if err != nil { + fmt.Println("error:", err) + return + } + candles, err := broker.Candles("EUR_USD", "D", 100) if err != nil { panic(err) diff --git a/cmd/sma_crossover.go b/cmd/sma_crossover.go index 3e4ec40..be8d016 100644 --- a/cmd/sma_crossover.go +++ b/cmd/sma_crossover.go @@ -3,6 +3,7 @@ package main import ( + "fmt" "os" auto "github.com/fivemoreminix/autotrader" @@ -33,7 +34,11 @@ func main() { panic(err) } */ - broker := oanda.NewOandaBroker(os.Getenv("OANDA_TOKEN"), os.Getenv("OANDA_ACCOUNT_ID"), true) + broker, err := oanda.NewOandaBroker(os.Getenv("OANDA_TOKEN"), os.Getenv("OANDA_ACCOUNT_ID"), true) + if err != nil { + fmt.Println("error:", err) + return + } auto.Backtest(auto.NewTrader(auto.TraderConfig{ Broker: auto.NewTestBroker(broker /* data, */, nil, 10000, 50, 0.0002, 0), diff --git a/oanda/oanda.go b/oanda/oanda.go index 08cff92..46516d7 100644 --- a/oanda/oanda.go +++ b/oanda/oanda.go @@ -16,6 +16,8 @@ const ( TimeLayout = time.RFC3339 ) +var ErrInvalidCred = fmt.Errorf("invalid credentials, token or account ID is invalid") + var _ auto.Broker = (*OandaBroker)(nil) // Compile-time interface check. type OandaBroker struct { @@ -26,7 +28,11 @@ type OandaBroker struct { baseUrl string // Either oandaLiveURL or oandaPracticeURL. } -func NewOandaBroker(token, accountID string, practice bool) *OandaBroker { +func NewOandaBroker(token, accountID string, practice bool) (*OandaBroker, error) { + if token == "" || accountID == "" { + return nil, ErrInvalidCred + } + var baseUrl string if practice { baseUrl = oandaPracticeURL @@ -39,7 +45,7 @@ func NewOandaBroker(token, accountID string, practice bool) *OandaBroker { token: token, accountID: accountID, baseUrl: baseUrl, - } + }, nil } // Price returns the ask price if wantToBuy is true and the bid price if wantToBuy is false.