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

关于#python#的问题:以时间为X坐标,数据1和数据2在Y坐标上能成两条线(相关搜索:数据可视化)

有奖哦!我在pycharm中获取两个数据,在交易时间(9点-11点半,13点半-15点,21点-23点)代码可直接使用,现需要,以时间为X坐标,数据1和数据2在Y坐标上能成两条线,最好是完整代码,十分感谢!

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条回答 默认 最新

  • 码农阿豪@新空间 新星创作者: 前端开发技术领域 2025-02-12 09:52
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    好的,我将为您提供完整的代码,用于在 PyCharm 中绘制您所需的两条线图。我们将使用 `matplotlib` 库来绘制图表,并确保只在指定交易时间内收集并显示数据。下面是详细的代码和实施细节。

    完整代码示例

    from tqsdk import TqApi, TqKq, TqAuth
    import matplotlib.pyplot as plt
    import numpy as np
    from datetime import datetime, time
    # 指定数据合约
    SYMBOL = "DCE.i2505"
    api = TqApi(TqKq(), auth=TqAuth("890727", "150402"))  # 模拟帐号
    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
        return shuju1, shuju2
    # 存储时间和数据以便绘图
    times = []
    data1 = []
    data2 = []
    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"):  # 合约行情更新时计算数据1和数据2
                shuju1, shuju2 = get_index_line(klines)
                print("数据1: %.2f,  数据2: %.2f" % (shuju1, shuju2))
                
                # 记录时间和数据
                times.append(datetime.now())  # 记录当前时间
                data1.append(shuju1)  # 记录数据1
                data2.append(shuju2)  # 记录数据2
                
                # 绘图
                plt.clf()  # 清除之前的图
                plt.plot(times, data1, label="数据1", color='blue')
                plt.plot(times, data2, label="数据2", color='orange')
                plt.legend()
                plt.xlabel("时间")
                plt.ylabel("数值")
                plt.title("数据1和数据2的走势")
                plt.xticks(rotation=45)  # 旋转x轴标签
                plt.tight_layout()  # 自适应布局
                plt.pause(1)  # 暂停以更新图形
    plt.show()  # 展示图形
    

    代码说明

    1. 数据导入模块:该代码使用 tqsdk 以获取期货合约的即时数据,并使用 matplotlib 绘制数据图形。
    2. 定义计算函数get_index_line() 函数计算两条线对应的数据,分别为数据1和数据2。
    3. 交易时间判断:使用datetime.time判断当前时间是否处于指定的交易时间段内。
    4. 数据存储与图形绘制
      • 在每次更新数据时,将当前时间和相应数据存储到列表中。
      • 使用 matplotlib 绘制两条线,并实时更新图形。
    5. 图形更新:使用 plt.pause(1) 来控制图形的更新频率。

    运行环境

    请确保您已经安装了以下库: - tqsdk: 数据获取模块 - matplotlib: 图形绘制模块 可以使用以下命令安装所需的库:

    pip install tqsdk matplotlib
    

    重要提示

    在实际运行过程中,确保您的网络连接正常,并且模拟帐号的信息是正确的。这样您就可以通过运行此代码实时获取并绘制两个数据的走势了。

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

报告相同问题?

问题事件

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