forked from stellar-deprecated/kelp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexchangeFeed.go
45 lines (37 loc) · 1.14 KB
/
exchangeFeed.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package plugins
import (
"fmt"
"log"
"github.com/stellar/kelp/api"
"github.com/stellar/kelp/model"
)
// encapsulates a priceFeed from a tickerAPI
type exchangeFeed struct {
name string
tickerAPI *api.TickerAPI
pairs []model.TradingPair
}
// ensure that it implements PriceFeed
var _ api.PriceFeed = &exchangeFeed{}
func newExchangeFeed(name string, tickerAPI *api.TickerAPI, pair *model.TradingPair) *exchangeFeed {
return &exchangeFeed{
name: name,
tickerAPI: tickerAPI,
pairs: []model.TradingPair{*pair},
}
}
// GetPrice impl
func (f *exchangeFeed) GetPrice() (float64, error) {
tickerAPI := *f.tickerAPI
m, e := tickerAPI.GetTickerPrice(f.pairs)
if e != nil {
return 0, fmt.Errorf("error while getting price from exchange feed: %s", e)
}
p, ok := m[f.pairs[0]]
if !ok {
return 0, fmt.Errorf("could not get price for trading pair: %s", f.pairs[0].String())
}
centerPrice := (p.BidPrice.AsFloat() + p.AskPrice.AsFloat()) / 2
log.Printf("price from exchange feed (%s): bidPrice=%.7f, askPrice=%.7f, centerPrice=%.7f", f.name, p.BidPrice.AsFloat(), p.AskPrice.AsFloat(), centerPrice)
return centerPrice, nil
}