一、接口地址总览

1.1 核心服务地址

服务类型 协议 地址 端口 用途
实时行情推送 WebSocket 39.107.99.235/ws 80 实时价格、深度、成交数据
历史K线数据 HTTP 39.107.99.235 1008 K线历史数据查询

1.2 完整接口URL

// WebSocket实时行情地址
#define WEBSOCKET_URL "ws://39.107.99.235/ws"

// HTTP K线数据接口
#define KLINE_BASE_URL "http://39.107.99.235:1008"
#define KLINE_API_PATH "/redis.php"

// 完整K线接口示例
char kline_url[256];
snprintf(kline_url, sizeof(kline_url), 
         "%s%s?code=fx_sgbpusd&time=1m&rows=40", 
         KLINE_BASE_URL, KLINE_API_PATH);

1.3 支持的品种代码示例

// 外汇品种
#define FOREX_EURUSD "fx_eurusd"
#define FOREX_GBPUSD "fx_gbpusd" 
#define FOREX_USDJPY "fx_usdjpy"

// 贵金属
#define METAL_XAUUSD "fx_xauusd"  // 黄金
#define METAL_XAGUSD "fx_xagusd"  // 白银

// 加密货币
#define CRYPTO_BTCUSDT "btcusdt"
#define CRYPTO_ETHUSDT "ethusdt"

1.4 K线周期参数

typedef enum {
    KLINE_1MIN = "1m",      // 1分钟
    KLINE_5MIN = "5m",      // 5分钟  
    KLINE_15MIN = "15m",    // 15分钟
    KLINE_30MIN = "30m",    // 30分钟
    KLINE_1HOUR = "1h",     // 1小时
    KLINE_1DAY = "1d",      // 日线
    KLINE_1MONTH = "1M"     // 月线
} kline_period_t;

二、环境准备与依赖库

2.1 所需第三方库

/* 使用vcpkg或源码安装以下依赖 */
#include <curl/curl.h>          // HTTP客户端
#include <libwebsockets.h>      // WebSocket客户端  
#include <jansson.h>            // JSON解析
#include <pthread.h>            // 多线程支持

2.2 编译配置

# Makefile 配置
CC = gcc
CFLAGS = -Wall -Wextra -O2 -std=c99
LIBS = -lcurl -lwebsockets -ljansson -lpthread
TARGET = market_data_client

$(TARGET): main.o websocket_client.o http_client.o market_data.o
	$(CC) -o $(TARGET) $^ $(LIBS)

%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@

clean:
	rm -f *.o $(TARGET)

三、完整使用示例

3.1 主程序示例

#include "market_data_client.h"

// 行情数据回调函数
void on_market_data(market_data_t *data) {
    printf("实时行情: %s - 价格: %.4f, 涨跌幅: %.2f%%\n", 
           data->symbol, data->price, data->diff_rate);
}

// 心跳回调函数  
void on_heartbeat(int64_t timestamp) {
    printf("心跳响应: %ld\n", timestamp);
}

int main() {
    // 初始化WebSocket客户端
    websocket_client_t *ws_client = websocket_client_create(
        WEBSOCKET_URL, on_market_data, on_heartbeat);
    
    if (!ws_client) {
        fprintf(stderr, "创建WebSocket客户端失败\n");
        return -1;
    }
    
    // 连接WebSocket服务
    if (websocket_connect(ws_client) != 0) {
        fprintf(stderr, "连接WebSocket服务失败\n");
        return -1;
    }
    
    // 获取K线数据示例
    int kline_count;
    kline_data_t *kline_data = get_kline_data(FOREX_EURUSD, KLINE_1MIN, 40, &kline_count);
    
    if (kline_data && kline_count > 0) {
        printf("获取到 %d 条K线数据:\n", kline_count);
        for (int i = 0; i < kline_count; i++) {
            printf("时间: %s, O: %.4f, H: %.4f, L: %.4f, C: %.4f\n",
                   kline_data[i].formatted_time,
                   kline_data[i].open,
                   kline_data[i].high, 
                   kline_data[i].low,
                   kline_data[i].close);
        }
        free(kline_data);
    }
    
    // 主循环
    while (1) {
        sleep(1);
    }
    
    // 清理资源
    websocket_client_destroy(ws_client);
    return 0;
}

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐