【问题标题】:Can't stream incoming stock/ticker data with websocket connection?无法通过 websocket 连接流式传输传入的股票/股票代码数据?
【发布时间】:2020-07-16 20:48:30
【问题描述】:

我正在尝试使用 Polygon.io 股票数据在羊驼市场上创建交易算法。但是遇到了两个问题:

  1. 我在通过 Alpaca 市场获取包含 Polygon.io 数据的持续代码数据流时遇到了问题。当我运行我的代码时,我只会收到一条消息,表明连接成功并且已通过身份验证。

    [{"ev":"status","status":"connected","message":"Connected Successfully"}]
    [{"ev":"status","status":"auth_success","message":"authenticated"}]
    
  2. 我收到“超出最大连接数”。信息。然后连接关闭。我认为这是因为第一个连接实际上从未关闭,所以我溢出了连接量?如何使用我的代码确保完全断开连接?

    {"ev":"status","status":"max_connections","message":"最大数量 超出连接数。"}]

下面是我的代码:

> import websocket, json 
> from config import *
>     
> def on_open(ws):
>     print("opened")
>     auth_data = {
>         "action": "auth",
>         "params": PAPER_API_KEY
>     }
> 
>     ws.send(json.dumps(auth_data))
> 
>     channel_data = {
>         "action": "subscribe",
>         "params": TICKERS
>     }
>     print(channel_data)
>     ws.send(json.dumps(channel_data))
> 
> 
> def on_message(ws, message):
>     print("received a message")
>     print(message)
> 
> def on_close(ws):
>     print("closed connection")
> 
> def on_error(ws, error):
>     print(error)
> 
> socket = "wss://socket.polygon.io/stocks"
> 
> ws = websocket.WebSocketApp(socket, on_open=on_open,
> on_message=on_message, on_close=on_close, on_error=on_error)
> ws.run_forever()

【问题讨论】:

    标签: python stock algorithmic-trading


    【解决方案1】:

    您是否直接尝试Polygon API
    安装它:pip install polygon-api-client.
    这是一个对我有用的例子:

    import time
    
    from polygon import WebSocketClient, STOCKS_CLUSTER
    
    
    def my_custom_process_message(message):
        print("this is my custom message processing", message)
    
    
    def my_custom_error_handler(ws, error):
        print("this is my custom error handler", error)
    
    
    def my_custom_close_handler(ws):
        print("this is my custom close handler")
    
    
    def main():
        key = 'your api key'
        my_client = WebSocketClient(STOCKS_CLUSTER, key, my_custom_process_message)
        my_client.run_async()
    
        my_client.subscribe("T.MSFT", "T.AAPL", "T.AMD", "T.NVDA")
        time.sleep(10)
    
        my_client.close_connection()
    
    
    if __name__ == "__main__":
        main()
    

    【讨论】:

      【解决方案2】:

      您被允许一个流,在您发出订阅请求后,您应该会收到响应。

      这应该在您运行“ws.send(json.dumps(channel_data))”行之后发生

      [{'ev': 'status', 'message': 'subscribed to: AM.F', 'status': 'success'}]
      [{'ev': 'status', 'message': 'subscribed to: AM.BAC', 'status': 'success'}]
      [{'ev': 'status', 'message': 'subscribed to: AM.AAL', 'status': 'success'}]
      [{'ev': 'status', 'message': 'subscribed to: AM.GE', 'status': 'success'}]
      

      之后,一旦数据可用,数据将开始流动。

      【讨论】:

        猜你喜欢
        • 2011-01-23
        • 2013-01-04
        • 2011-03-15
        • 1970-01-01
        • 2020-02-05
        • 2014-09-24
        • 2014-10-16
        • 1970-01-01
        • 2011-02-09
        相关资源
        最近更新 更多