金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 647|回复: 2

调用py无法处理

[复制链接]

41

主题

187

帖子

187

积分

Rank: 4

等级: 专业版

注册:
2021-10-19
曾用名:
发表于 2025-3-4 11:39 | 显示全部楼层 |阅读模式
金字塔里面不是有个功能 就是PEL引用PYTHON 模块吗?  我做了以下尝试 但是系统写出来的代码每一行都提示函数未定义

被引用的 PYTHON 的文件名为:MyPython9 具体代码如下:
# 该 Python 代码用于提供高效的订单流数据计算
import numpy as np
from datetime import datetime

def init(context):
context.N = 1 # 周期参数
context.num_levels = 30 # 显示价格档位数
context.min_diff = 0.01 # 最小变动单位
context.merge_level = 1 # 合并价位数

def handle_bar(context):
# 获取配置参数
N, levels, tick_size = context.N, context.num_levels, context.min_diff

复制
# 智能获取有效周期
period = calculate_valid_period(context, N)
if period == 0: return

# 获取历史数据并转换为结构化数组
bars = pel_history_bars(period, ['datetime', 'close', 'buyvol', 'sellvol'])
if len(bars) == 0: return

# 生成价格矩阵
current_price = round(bars[-1]['close'], 2)
price_levels = generate_price_matrix(current_price, levels, tick_size)

# 使用向量化计算买卖量
buy_sell = calculate_volume(bars, price_levels, tick_size)

# 动态设置属性
set_attributes(context, price_levels, buy_sell)
def calculate_valid_period(context, N):
"""智能计算有效周期"""
try:
time_series = pel_history_bars(1440, 'datetime') # 获取当日数据
if len(time_series) < 2: return 1

复制
    current_dt = parse_datetime(time_series[-1])
    time_diff = [current_dt - parse_datetime(ts) for ts in time_series[:-1]]

    # 寻找最近 N分钟边界
    threshold = N * 60  # 转换为秒
    for i, td in enumerate(reversed(time_diff)):
        if td.total_seconds() > threshold:
            return i + 1
    return len(time_series)
except:
    return 1  # 异常时返回默认值
def parse_datetime(ts):
"""高效时间解析"""
return datetime.strptime(f"{ts:014}", "%Y%m%d%H%M%S")

def generate_price_matrix(base_price, levels, tick):
"""生成价格矩阵"""
prices = {}
prices['价现 0'] = round(base_price, 2)
for i in range(1, levels+1):
prices[f'价上{i}'] = round(base_price + itick, 2)
prices[f'价下{i}'] = round(base_price - itick, 2)
return prices

def calculate_volume(bars, price_levels, tick):
"""向量化计算成交量"""
# 转换为 NumPy 数组
closes = np.round([bar['close'] for bar in bars], decimals=2)
buyvol = np.array([bar.get('buyvol',0) for bar in bars])
sellvol = np.a

回复

使用道具 举报

41

主题

187

帖子

187

积分

Rank: 4

等级: 专业版

注册:
2021-10-19
曾用名:
 楼主| 发表于 2025-3-4 11:41 | 显示全部楼层
具体调用代码如下,代码每一行都提示函数未定义 ://------------------------------------------------------------------------
// 简称: K 线主动买卖数量显示
// 名称: 在一分钟 K线图上左右两侧纵向显示每根 K线的价格分别合计的主动买卖数量
// 类别: 公式应用
// 类型: 综合
// 开仓逻辑:无
// 平仓逻辑:无
// 适用周期:1 分钟 K线
//------------------------------------------------------------------------

// 定义参数
N(1,1,1000,1);  // 周期参数,可以调整到实际需要的范围内
LEVELS(30,1,100,1);  // 显示价格档位数
MIN_DIFF(0.01,0.001,0.001,0.001);  // 最小变动单位

// 初始化变量
BUY_VOL_ARRAY := ARRAY(LEVELS*2+1);
SELL_VOL_ARRAY := ARRAY(LEVELS*2+1);

// 获取历史数据
HISTORY_BARS: HISTORY(N, ['CLOSE', 'BUYVOL', 'SELLVOL']);

// 计算价格矩阵和买卖量
FOR i FROM 0 TO N-1 DO BEGIN
    CLOSE := HISTORY_BARS['CLOSE'][i];
    BUY_VOL := HISTORY_BARS['BUYVOL'][i];
    SELL_VOL := HISTORY_BARS['SELLVOL'][i];

    // 计算价格档位索引,假设 MIN_PRICE 为市场最低价
    MIN_PRICE := LOWEST(LOW, N);  // 假设 N周期内的最低价作为最小可能价格
    PRICE_INDEX := ROUND((CLOSE - MIN_PRICE) / MIN_DIFF);

    // 确保索引在数组范围内
    IF PRICE_INDEX < LEVELS THEN BEGIN
        PRICE_INDEX := 0;
    END;
    IF PRICE_INDEX > (LEVELS*2) THEN BEGIN
        PRICE_INDEX := LEVELS*2;
    END;

    // 更新买卖量数组
    BUY_VOL_ARRAY[PRICE_INDEX + LEVELS] += BUY_VOL;
    SELL_VOL_ARRAY[PRICE_INDEX + LEVELS] += SELL_VOL;
END

// 显示主动买卖数量
FOR i FROM 0 TO LEVELS DO BEGIN
    PRINT('价上' & (i+1) & ' 主动买:', BUY_VOL_ARRAY[i+LEVELS]);
    PRINT('价上' & (i+1) & ' 主动卖:', SELL_VOL_ARRAY[i+LEVELS]);
END

FOR i FROM 0 TO LEVELS DO BEGIN
    PRINT('价下' & (i+1) & ' 主动买:', BUY_VOL_ARRAY[LEVELS-i-1]);
    PRINT('价下' & (i+1) & ' 主动卖:', SELL_VOL_ARRAY[LEVELS-i-1]);
END
回复

使用道具 举报

2

主题

5119

帖子

5119

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2025-3-4 13:41 | 显示全部楼层
本帖最后由 资深技术05 于 2025-3-4 13:50 编辑

2楼的代码基本上完全不符合PEL的语法规范。根本就不是能有效运行的代码。建议你从基本思路出发,基于PEL语法规范重新编写。
1楼的代码 缩进都是错的,也不知道是你复制的问题 还是原本就是这样。
python相关问题我们只维护接口的可用性,具体代码编写,通常我们只能协调客户排查问题,但是像上面这样 缩进都是有问题的代码我们处理不了,也不会尝试处理。



回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-7 21:15 , Processed in 0.112116 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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