期货老许 2025-02-12 09:08 采纳率: 66.7%
浏览 12
已结题

pycharm 数据可视化

有奖哦!我在pycharm中获取两个数据,在交易时间(9-11点半,13点半-15点,21-23点)代码可直接使用,现需要可视化两个数据的相关性,最好是完整代码,十分感谢!!!
from tqsdk import TqApi, TqKq, TqAuth  #数据导入模块installing  tqsdk

SYMBOL = "DCE.i2505" #指定数据合约

api = TqApi(TqKq(), auth=TqAuth("890727", "150402"))  #模拟帐号tqsdk

quote = api.get_quote(SYMBOL) #获取合约基本
klines = api.get_kline_serial(SYMBOL,  12) ##获取合约12秒内K线


###  定义数据1 和数据2
def get_index_line(klines):
    volume  = (klines.volume .iloc[-2] + klines.volume .iloc[-3] + klines.volume .iloc[-4] + klines.volume .iloc[-5] +
            klines.volume .iloc[-6]) / 5
    open_oi = (klines.open_oi.iloc[-2] + klines.open_oi.iloc[-3] + klines.open_oi.iloc[-4] + klines.open_oi.iloc[-5] +
           klines.open_oi.iloc[-6] ) / 5
    close_oi = (klines.close_oi.iloc[-2] + klines. close_oi.iloc[-3] + klines. close_oi.iloc[-4] + klines. close_oi.iloc[-5] +
             klines. close_oi.iloc[-6] ) / 5
    close = (klines.close.iloc[-2] + klines.close.iloc[-3] + klines.close.iloc[-4] + klines.close.iloc[-5] +
             klines.close.iloc[-6]) / 5

    shuju1 = (close_oi - open_oi) / volume * 100  #数据1

    shuju2 = close / 100  #数据2
    print("数据1: %.2f,  数据2: %.2f" % (shuju1, shuju2))
    return shuju1, shuju2


while True:
    api.wait_update()  #等待行情更新
    if api.is_changing(klines.iloc[-1], "datetime"): # 合约行情更新时计算数据1和数据2
        shuju1, shuju2 = get_index_line(klines)
        print("数据1: %.2f,  数据2: %.2f" % (shuju1, shuju2))
  • 写回答

5条回答 默认 最新

  • 道友老李 JWE233286一种基于机器视觉的水表指针读数识别及修正的方法 专利发明者 2025-02-12 09:08
    关注
    让【道友老李】来帮你解答,本回答参考gpt编写,并整理提供,如果还有疑问可以点击头像关注私信或评论。
    如果答案让您满意,请采纳、关注,非常感谢!
    ### Python可视化两个数据相关性的完整代码示例 在这段代码中,我们将用到`TqSdk`库从指定的合约中获取数据,并计算两个指标(数据1和数据2),随后使用`matplotlib`库将这两个数据的相关性进行可视化。同时,我们还将确保只在指定的交易时间内进行数据计算。

    1. 安装必要的库

    确保你的Python环境中已经安装了以下库:

    pip install tqsdk matplotlib pandas
    

    2. 完整代码

    from tqsdk import TqApi, TqKq, TqAuth
    import pandas as pd
    import matplotlib.pyplot as plt
    from datetime import datetime, time
    # 设置数据合约
    SYMBOL = "DCE.i2505"
    # 初始化API
    api = TqApi(TqKq(), auth=TqAuth("890727", "150402"))
    # 获取合约基本K线
    klines = api.get_kline_serial(SYMBOL, 12)
    # 定义数据1和数据2的计算函数
    def get_index_line(klines):
        volume = (klines.volume.iloc[-2] + klines.volume.iloc[-3] + 
                  klines.volume.iloc[-4] + klines.volume.iloc[-5] + 
                  klines.volume.iloc[-6]) / 5
        
        open_oi = (klines.open_oi.iloc[-2] + klines.open_oi.iloc[-3] + 
                    klines.open_oi.iloc[-4] + klines.open_oi.iloc[-5] + 
                    klines.open_oi.iloc[-6]) / 5
        
        close_oi = (klines.close_oi.iloc[-2] + klines.close_oi.iloc[-3] + 
                    klines.close_oi.iloc[-4] + klines.close_oi.iloc[-5] + 
                    klines.close_oi.iloc[-6]) / 5
        
        close = (klines.close.iloc[-2] + klines.close.iloc[-3] + 
                 klines.close.iloc[-4] + klines.close.iloc[-5] + 
                 klines.close.iloc[-6]) / 5
        
        shuju1 = (close_oi - open_oi) / volume * 100  # 数据1
        shuju2 = close / 100  # 数据2
        return shuju1, shuju2
    # 存储数据点
    data1_list = []
    data2_list = []
    time_list = []
    while True:
        api.wait_update()  # 等待行情更新
        current_time = datetime.now().time()
        
        # 只在指定的交易时间内计算数据
        if (time(9, 0) <= current_time <= time(11, 30) or 
            time(13, 30) <= current_time <= time(15, 0) or 
            time(21, 0) <= current_time <= time(23, 0)):
            
            if api.is_changing(klines.iloc[-1], "datetime"):  # 合约行情更新时计算数据
                shuju1, shuju2 = get_index_line(klines)
                data1_list.append(shuju1)
                data2_list.append(shuju2)
                time_list.append(klines.datetime.iloc[-1])
                print(f"数据1: {shuju1:.2f}, 数据2: {shuju2:.2f}")
                # 当收集到足够的数据后进行可视化
                if len(data1_list) > 10:  # 足够的数据点
                    # 可视化
                    plt.figure(figsize=(12, 6))
                    plt.scatter(data1_list, data2_list, color='blue', label='数据相关性', alpha=0.7)
                    plt.title('数据1与数据2的相关性')
                    plt.xlabel('数据1')
                    plt.ylabel('数据2')
                    plt.legend()
                    plt.grid()
                    plt.show()
                    data1_list.clear()  # 清空数据点以便重新收集
                    data2_list.clear()
                    time_list.clear()
    

    代码说明

    1. 导入模块:引入基础库tqsdk用于获取数据,matplotlib用于可视化,pandas用于数据处理。
    2. API初始化:通过TqApi连接到交易所的API,获取所需合约的K线数据。
    3. 数据计算函数
      • get_index_line()计算两个自定义指标(数据1和数据2)。
      • 数据1和数据2是使用最近几条K线的成交量和开盘、收盘持仓量计算得出的。
    4. 实时数据更新
      • 使用while True循环实时监听市场行情更新。
      • 仅在序列中含有有效的时间戳时,更新数据。
    5. 可视化
      • 使用matplotlib库绘制数据1与数据2的散点图。

    结论

    上述代码示例提供了一个在交易时间内收集数据并实时可视化相关性的完整程序。你可以根据实际需求进行调整。希望这个示例能对你有所帮助!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    1人已打赏
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 2月20日
  • 已采纳回答 2月12日
  • 创建了问题 2月12日