📌  相关文章
📜  gme stock - Go 编程语言 - Go 编程语言(1)

📅  最后修改于: 2023-12-03 15:30:59.233000             🧑  作者: Mango

GME Stock - 使用Go编程语言

简介

GME(GameStop Corp.)是近期最热门的股票之一,持续被Reddit社区推崇,引起了全球的投资者热潮。如果你想跟踪GME股票的最新市场走势,可以使用Go编程语言开发一个自己的程序。

使用Go获取实时股票价格

Go是一种快速、动态、编译型语言,适合于处理数据密集型任务。我们可以使用Go来实现通过API获取股票价格的功能。

在获取股票数据之前,我们需要先安装一些库,这些库有助于我们处理JSON数据、发送HTTP请求,并将数据分析到结构体中。

我们可以使用以下命令来安装这些库:

go get -u github.com/gorilla/mux
go get -u github.com/joho/godotenv
go get -u github.com/jinzhu/gorm
go get -u github.com/jinzhu/gorm/dialects/sqlite
go get -u github.com/rs/cors
go get -u github.com/shopspring/decimal

然后,我们可以使用以下函数来获取实时股票价格:

package main

import (
    "encoding/json"
    "fmt"
    "net/http"
    "os"

    "github.com/joho/godotenv"
)

type QuoteResponse struct {
    LatestPrice float64 `json:"latestPrice"`
}

func getQuote(symbol string) (float64, error) {
    err := godotenv.Load()
    if err != nil {
        fmt.Println("Error loading .env file")
        return 0, err
    }

    apiKey := os.Getenv("IEXCLOUD_API_KEY")

    url := fmt.Sprintf("https://cloud.iexapis.com/v1/stock/%s/quote/latestPrice?token=%s", symbol, apiKey)

    resp, err := http.Get(url)
    if err != nil {
        fmt.Println("Error getting quote")
        return 0, err
    }
    defer resp.Body.Close()

    var quoteResponse QuoteResponse

    json.NewDecoder(resp.Body).Decode(&quoteResponse)

    return quoteResponse.LatestPrice, nil
}

func main() {
    price, err := getQuote("gme")
    if err != nil {
        fmt.Println("Error getting quote:", err)
        return
    }

    fmt.Println("GME price:", price)
}

我们使用了godotenv库来加载环境变量,这个环境变量是我们在iexcloud网站上创建API Key后,为了验证每一次请求所需提交的密匙。使用"stock_symbol/symbol/quote/latestPrice"API可以获取到当前股票价格。

实时股票价格推送

实时推送股票价格在股票投资中是非常重要的。有许多服务可以提供实时股票数据,如IEX Cloud、Alpha Vantage和Yahoo Finance。

以下我们使用IEX Cloud提供的Web Socket API来实时推送股票价格。

package main

import (
    "encoding/json"
    "fmt"
    "os"

    "github.com/gorilla/websocket"
    "github.com/joho/godotenv"
)

type QuoteResponse struct {
    LatestPrice float64 `json:"latestPrice"`
}

func main() {
    err := godotenv.Load()
    if err != nil {
        fmt.Println("Error loading .env file")
        return
    }

    apiKey := os.Getenv("IEXCLOUD_API_KEY")

    url := fmt.Sprintf("wss://ws-cloud.iexapis.com/stable/stocksUSNoUTP?token=%s", apiKey)

    c, _, err := websocket.DefaultDialer.Dial(url, nil)
    if err != nil {
        fmt.Println("Error dialing websocket")
        return
    }
    defer c.Close()

    symbols := []string{"gme"}

    for _, s := range symbols {
        message := fmt.Sprintf("{\"action\":\"subscribe\",\"params\":\"%s\"}", s)
        err := c.WriteMessage(websocket.TextMessage, []byte(message))
        if err != nil {
            fmt.Println("Error subscribing to symbol:", s)
            return
        }
    }

    for {
        messageType, message, err := c.ReadMessage()
        if err != nil {
            fmt.Println("Error reading message:", err)
            return
        }

        if messageType == websocket.TextMessage {
            var quoteResponse QuoteResponse

            json.Unmarshal(message, &quoteResponse)

            fmt.Println("GME price:", quoteResponse.LatestPrice)
        }
    }
}

我们通过使用gorilla/websocket库实现Web Socket连接。我们使用IEX Cloud的Web Socket API,它提供了如订阅、退订、股票数据推送等功能。使用"subscribe"action来订阅股票,在WebSocket上收到的数据是json格式化的Message报文,我们可以使用json.Unmarshal函数将其转换为QuoteResponse结构体。

结论

我们在本文中讨论了如何使用Go编程语言获取和实时推送股票数据,分享了使用IEX Cloud的API和WebSocket API与股票数据集成的方法。这些API可以提供实时价格、交易量、公司信息等丰富的数据,并有助于开发各种自定义的股票交易策略。