Skip to content

Commit 6dbf5f4

Browse files
committed
generate symbols file
1 parent 2e882c2 commit 6dbf5f4

8 files changed

Lines changed: 549 additions & 3 deletions

File tree

pkg/exchange/hyperliquid/Makefile

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
generate: symbols go-generate
2+
3+
symbols:
4+
@echo "Generate symbols.go" && go run ./gensymbols.go
5+
6+
go-generate:
7+
@echo "Running \`go generate\`" && go generate ./...

pkg/exchange/hyperliquid/convert.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ func toGlobalSpotMarket(s hyperapi.UniverseMeta, tokens []hyperapi.TokenMeta) ty
1717
return types.Market{
1818
Exchange: types.ExchangeHyperliquid,
1919
Symbol: base.Name + quote.Name,
20-
LocalSymbol: strconv.Itoa(s.Index + 1000),
20+
LocalSymbol: "@" + strconv.Itoa(s.Index),
2121
BaseCurrency: base.Name,
2222
QuoteCurrency: quote.Name,
2323
TickSize: tickSize,

pkg/exchange/hyperliquid/exchange_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ func TestQueryMarkets(t *testing.T) {
4242
assert.Equal(t, "PURRUSDC", purrUsdcMarket.Symbol)
4343
assert.Equal(t, "PURR", purrUsdcMarket.BaseCurrency)
4444
assert.Equal(t, "USDC", purrUsdcMarket.QuoteCurrency)
45-
assert.Equal(t, "1000", purrUsdcMarket.LocalSymbol)
45+
assert.Equal(t, "@0", purrUsdcMarket.LocalSymbol)
4646
assert.Equal(t, 8, purrUsdcMarket.PricePrecision)
4747
assert.Equal(t, 0, purrUsdcMarket.VolumePrecision)
4848
})

pkg/exchange/hyperliquid/futures.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ func (e *Exchange) queryFuturesMarkets(ctx context.Context) (types.MarketMap, er
2424
markets.Add(types.Market{
2525
Exchange: types.ExchangeHyperliquid,
2626
Symbol: u.Name + QuoteCurrency,
27-
LocalSymbol: strconv.Itoa(i),
27+
LocalSymbol: u.Name + "@" + strconv.Itoa(i),
2828
BaseCurrency: u.Name,
2929
QuoteCurrency: QuoteCurrency,
3030
PricePrecision: 8,
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
//go:build ignore
2+
// +build ignore
3+
4+
package main
5+
6+
import (
7+
"context"
8+
"log"
9+
"os"
10+
"strconv"
11+
"text/template"
12+
13+
"github.com/c9s/bbgo/pkg/exchange/hyperliquid"
14+
"github.com/c9s/bbgo/pkg/exchange/hyperliquid/hyperapi"
15+
)
16+
17+
var packageTemplate = template.Must(template.New("").Parse(`// Code generated by go generate; DO NOT EDIT.
18+
package hyperliquid
19+
20+
var spotSymbolMap = map[string]string{
21+
{{- range $k, $v := .spot }}
22+
{{ printf "%q" $k }}: {{ printf "%q" $v }},
23+
{{- end }}
24+
}
25+
26+
var futuresSymbolMap = map[string]string{
27+
{{- range $k, $v := .futures }}
28+
{{ printf "%q" $k }}: {{ printf "%q" $v }},
29+
{{- end }}
30+
}
31+
32+
`))
33+
34+
func main() {
35+
ctx := context.Background()
36+
client := hyperapi.NewClient()
37+
38+
spotMeta, err := client.NewSpotGetMetaRequest().Do(ctx)
39+
if err != nil {
40+
log.Fatal(err)
41+
}
42+
43+
spotSymbolMap := map[string]string{}
44+
tokens := spotMeta.Tokens
45+
for _, s := range spotMeta.Universe {
46+
base, quote := tokens[s.Tokens[0]], tokens[s.Tokens[1]]
47+
spotSymbolMap[base.Name+quote.Name] = "@" + strconv.Itoa(s.Index)
48+
}
49+
50+
futuresMeta, err := client.NewFuturesGetMetaRequest().Do(ctx)
51+
if err != nil {
52+
log.Fatal(err)
53+
}
54+
55+
futuresSymbolMap := map[string]string{}
56+
for i, s := range futuresMeta.Universe {
57+
futuresSymbolMap[s.Name+hyperliquid.QuoteCurrency] = s.Name + "@" + strconv.Itoa(i)
58+
}
59+
60+
f, err := os.Create("symbols.go")
61+
if err != nil {
62+
log.Fatal(err)
63+
}
64+
65+
defer f.Close()
66+
67+
err = packageTemplate.Execute(f, map[string]map[string]string{"spot": spotSymbolMap, "futures": futuresSymbolMap})
68+
if err != nil {
69+
log.Fatal(err)
70+
}
71+
}

pkg/exchange/hyperliquid/hyperapi/client.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,19 @@ func (c *Client) SetVaultAddress(address string) {
7575
c.vaultAddress = address
7676
}
7777

78+
// NewRequest create new API request. Relative url can be provided in refURL.
79+
func (c *Client) NewRequest(
80+
ctx context.Context, method, refPath string, params url.Values, payload interface{},
81+
) (*http.Request, error) {
82+
req, err := c.BaseAPIClient.NewRequest(ctx, method, refPath, params, payload)
83+
if req != nil {
84+
req.Header.Set("Content-Type", "application/json")
85+
req.Header.Add("Accept", "application/json")
86+
}
87+
88+
return req, err
89+
}
90+
7891
// NewAuthenticatedRequest creates new http request for authenticated routes.
7992
func (c *Client) NewAuthenticatedRequest(
8093
ctx context.Context, method, refURL string, params url.Values, payload interface{},

pkg/exchange/hyperliquid/stream_callbacks.go

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)