金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 186|回复: 7

python 显示编译成功,为什么没有显示?请帮忙看看

[复制链接]

1

主题

5

帖子

5

积分

Rank: 1

等级: 新手上路

注册:
2025-1-12
曾用名:
发表于 2025-1-12 18:26 | 显示全部楼层 |阅读模式
from PythonApi import *
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
import matplotlib.colors as mcolors
import mplfinance as mpf

# ----------------------初始化函数------------------------
def init(context):
    # 在 context 中保存全局变量
    context.s1 = "SZ000001"  # 平安银行股票代码
    context.stock_data = pd.DataFrame()  # 初始化用于存储数据的全局变量
    context.liquidity_data = pd.DataFrame()  # 初始化流动换手率数据的全局变量

# ----------------------数据更新函数------------------------
def handle_bar(context):
    # 假设平台提供实时或历史数据更新,数据切片更新触发此逻辑
    code = context.s1  # 获取股票代码
    num = 1000  # 设定需要的数据条数

    # 模拟从实时数据接口获取股票数据,假设提供一个列表结构
    price_data = handle_bar_data(
        code, num, ['open', 'high', 'low', 'close', 'volume']
    )  # 替换为实际提供数据的API调用

    # 将获取的数据转换为DataFrame
    股票数据 = pd.DataFrame(
        price_data, columns=['开盘价', '最高价', '最低价', '收盘价', '成交量']
    )

    # 计算中心测度价格并保留两位小数
    股票数据['中心测度价格'] = (
        股票数据[['开盘价', '最高价', '最低价', '收盘价']].mean(axis=1).round(2)
    )

    # 假设 `handle_bar_data` 返回数据包含日期,作为索引
    股票数据['日期'] = pd.to_datetime(price_data.index).strftime('%Y-%m-%d')

    # 将成交量手转换为实际成交量
    股票数据['成交量'] = 股票数据['成交量'] * 100

    # ----------------------创建数据透视表------------------------
    数据透视表 = pd.pivot_table(
        股票数据,
        values='成交量',
        index=['中心测度价格'],
        columns=['日期'],
        aggfunc='sum',
        fill_value=0,
    )
    数据透视表 = 数据透视表.sort_index(ascending=False)

    # ----------------------获取流动换手率数据------------------------
    # 假设平台支持获取流动换手率数据的实时更新
    流动换手率_data = handle_bar_data(code, num, ['HSL.HSL'])  # 替换为实际API调用
    流动换手率数据 = pd.DataFrame(流动换手率_data, columns=['HSL.HSL'])

    # ----------------------计算首日未交易筹码------------------------
    # 计算首日总成交量
    首日总成交量 = 数据透视表.iloc[:, 0].sum()

    # 获取首日流通股换手率
    首日流通股换手率 = 流动换手率数据.iloc[0]['HSL.HSL'] / 100  # 确保换手率为小数

    # 计算流通股总股本
    流通股总股本 = 首日总成交量 / 首日流通股换手率

    # 初始化筹码分布表
    筹码分布表 = pd.DataFrame(index=数据透视表.index)

    # 设置发行价并计算首日未交易筹码
    发行价 = 10.64  # 根据实际情况设置发行价
    筹码分布表[数据透视表.columns[0]] = 数据透视表.iloc[:, 0]
    筹码分布表.loc[发行价, 数据透视表.columns[0]] = (
        流通股总股本 - 首日总成交量
        if 发行价 not in 筹码分布表.index
        else 筹码分布表.loc[发行价, 数据透视表.columns[0]]
        + 流通股总股本
        - 首日总成交量
    )

    # ----------------------筹码分布更新迭代------------------------
    for i in range(1, 数据透视表.shape[1]):
        当前日期 = 数据透视表.columns
        前一天日期 = 数据透视表.columns[i - 1]
        当前换手率 = 流动换手率数据.iloc[i - 1]['HSL.HSL'] * 0.01

        当前筹码分布 = 筹码分布表[前一天日期] * (1 - 当前换手率)
        当天交易数据 = 数据透视表[当前日期]
        筹码分布表[当前日期] = 当前筹码分布.add(当天交易数据, fill_value=0)

    # 筹码分布表取整
    筹码分布表 = 筹码分布表.round(0).astype(int)

    # ----------------------生成热力图和K线图------------------------
    # 生成降维筹码分布表(此处省略具体代码,可参考前述逻辑)
    降维筹码分布表 = pd.DataFrame()  # 假设已降维

    # 设置热力图参数
    vmin_value = 流通股总股本 * 0.004
    vmax_value = 流通股总股本 * 0.016
    colors = ["black", "#005D5A", "#8c8500", "#962511"]
    cmap = mcolors.LinearSegmentedColormap.from_list("custom_cmap", colors)

    # 绘制热力图
    fig, ax1 = plt.subplots(figsize=(12, 8))
    sns.heatmap(
        降维筹码分布表, cmap=cmap, annot=False, fmt="d", vmin=vmin_value, vmax=vmax_value, ax=ax1
    )

    # K线图绘制(使用mplfinance)
    kline_data = 股票数据[['开盘价', '最高价', '最低价', '收盘价', '成交量']]
    kline_data.rename(
        columns={
            '开盘价': 'Open',
            '最高价': 'High',
            '最低价': 'Low',
            '收盘价': 'Close',
            '成交量': 'Volume',
        },
        inplace=True,
    )
    ax2 = ax1.twinx()
    mpf.plot(
        kline_data,
        ax=ax2,
        type='candle',
        volume=False,
        style='charles',
    )
    plt.title(f"{code} 筹码分布与价格走势")
    plt.show()



回复

使用道具 举报

1

主题

5

帖子

5

积分

Rank: 1

等级: 新手上路

注册:
2025-1-12
曾用名:
 楼主| 发表于 2025-1-12 18:27 | 显示全部楼层
图片如下,不是应该产生一个图表吗?
截图202501121826558757.png
回复

使用道具 举报

35

主题

9409

帖子

5万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2025-1-13 08:57 | 显示全部楼层
金字塔的python只支持交易类的操作,暂时不支持这类绘图处理的操作
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

1

主题

5

帖子

5

积分

Rank: 1

等级: 新手上路

注册:
2025-1-12
曾用名:
 楼主| 发表于 2025-1-13 10:46 来自手机 | 显示全部楼层
金字塔软件在右下角有筹码分布,使用的是cost函数,cost函数用的是日线期货数据,为什么调至1 H也有筹码分布,这个准确吗?
回复

使用道具 举报

20

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2025-1-13 11:00 | 显示全部楼层
该函数仅对日线分析周期比较有效,其他周期也会有值,但是可能准确性不如日线。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

1

主题

5

帖子

5

积分

Rank: 1

等级: 新手上路

注册:
2025-1-12
曾用名:
 楼主| 发表于 2025-1-13 11:03 来自手机 | 显示全部楼层
像我用证券公司的标准版,还能升级专业版吗?
回复

使用道具 举报

20

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2025-1-13 11:27 | 显示全部楼层
可以升级的。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

1

主题

5

帖子

5

积分

Rank: 1

等级: 新手上路

注册:
2025-1-12
曾用名:
 楼主| 发表于 2025-1-13 12:00 来自手机 | 显示全部楼层
好的,谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2025-2-5 20:02 , Processed in 0.273138 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表