金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 599|回复: 4

求助 订阅行情不成功,报错

[复制链接]

7

主题

12

帖子

12

积分

Rank: 1

等级: 新手上路

注册:
2025-3-11
曾用名:
发表于 2025-3-23 23:11 | 显示全部楼层 |阅读模式
# -*- coding: utf-8 -*-
from PythonApi import *
import numpy as np
from datetime import datetime, timedelta
# 金字塔环境适配修改 -------------------------------------------------
try:
    # 尝试加载金字塔内置的vnpy模块
    from vnpy.trader.utility import BarData
    from vnpy.app.cta_strategy import CtaTemplate
except ImportError:
    # 如果失败则使用精简版策略模板
    class CtaTemplate:
        def __init__(self, *args, **kwargs):
            self.engine = kwargs.get('cta_engine')
            self.strategy_name = kwargs.get('strategy_name')
            self.vt_symbol = kwargs.get('vt_symbol')

        def on_init(self): pass
        def on_start(self): pass
        def on_stop(self): pass
        def put_event(self): pass

class MyStrategy(CtaTemplate):
    def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
        """符合金字塔7.1的初始化方法"""
        super().__init__(cta_engine, strategy_name, vt_symbol, setting)

        # 策略参数配置
        self.total_capital = 1000000
        self.etf_list = [  # 直接指定ETF列表
            '510300.SH',
            '510050.SH',
            '159915.SZ',
            '588000.SH',
            '510500.SH',
            '159901.SZ'
        ]
        self.position_records = {}

        # 金字塔7.1专用订阅方法
        self.Subscribe = self.cta_engine.Subscribe  # 从引擎获取订阅方法

    def on_init(self):
        """策略初始化"""
        self.write_log("策略启动")
        self.subscribe_blocks()

    def subscribe_blocks(self):
        """金字塔7.1合规订阅方法"""
        try:
            # 订阅ETF行情
            for etf in self.etf_list:
                self.Subscribe(etf, '1d', self.on_bar)
                self.write_log(f"ETF订阅成功: {etf}")

                # 订阅认购期权
                calls = get_options(etf, 'CALL')
                for call in calls[:5]:  # 前5个活跃合约
                    vt_symbol = self.format_option_symbol(call)
                    self.Subscribe(vt_symbol, '1m', self.on_bar)
                    self.write_log(f"期权订阅成功: {vt_symbol}")

        except Exception as e:
            self.write_log(f"订阅失败: {str(e)}")

    def _format_option_symbol(self, option):
        """生成金字塔标准期权代码"""
        # 示例: 510300C2209M03500 -> 510300.SH-202209-C-3.500
        return (
            f"{option.underlying}.SH-"
            f"{option.expiry}-"
            f"C-"
            f"{option.strike_price/1000:.3f}"
        )

    def on_bar(self, bar):
        """行情回调"""
        try:
            if 'SH-' in bar.symbol or 'SZ-' in bar.symbol:  # 期权
                self._process_option(bar)
            else:  # ETF
                self._process_etf(bar)
        except Exception as e:
            self.write_log(f"on_bar错误: {str(e)}")

    # 后续处理函数保持不变。。。。。。。#金字塔初始化函数保持不变
def init(context):
    context.strategy = MyStrategy(
        cta_engine=context,  # 参数名修正
        strategy_name="ETF_CALL_SELLER",
        vt_symbol="510300.SH,510050.SH",  # 参数名修正为vt_symbol
        setting={}
    )
    context.strategy.on_init()

def handle_bar(context):
    context.strategy.handle_bar(context)

回复

使用道具 举报

7

主题

12

帖子

12

积分

Rank: 1

等级: 新手上路

注册:
2025-3-11
曾用名:
 楼主| 发表于 2025-3-23 23:12 | 显示全部楼层
金字塔
执行Python脚本时遇到执行错误。类型: AttributeError行:41
描述:'MyStrategy' object has no attribute 'cta engine是否打开代码编辑窗口?类型: AttributeError行: 69
描述:'MyStrategy' object has no attribute 'context是否打开代码编辑窗口?# -
回复

使用道具 举报

3

主题

730

帖子

771

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-10
曾用名:
发表于 2025-3-24 08:34 | 显示全部楼层
这不是金字塔的python接口,自然无法直接使用
回复

使用道具 举报

7

主题

12

帖子

12

积分

Rank: 1

等级: 新手上路

注册:
2025-3-11
曾用名:
 楼主| 发表于 2025-3-24 08:50 | 显示全部楼层
admin 发表于 2025-3-24 08:34
这不是金字塔的python接口,自然无法直接使用

怎么改呢,你是金字塔的技术?
回复

使用道具 举报

3

主题

730

帖子

771

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-10
曾用名:
发表于 2025-3-24 08:53 | 显示全部楼层
概859520 发表于 2025-3-24 08:50
怎么改呢,你是金字塔的技术?

大语言模型,没有基于相关API接口信息写的代码,基本上都是错误百出。没有办法修改。
建议你学习下我们python相关的接口说明后,在尝试使用
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-21 03:52 , Processed in 0.162809 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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