You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python交易机器人报错:'type' object is not subscriptable 求助

问题分析与解决方案

错误原因

触发TypeError: 'type' object is not subscriptable有两个核心问题:

  1. 字典被错误转成列表:在get_project_settings函数中,你把json.load()返回的字典对象转成了列表(project_settings = list(project_settings))。列表只能通过数字下标访问元素,无法用字典的键(如["username"])取值,直接导致后续调用project_settings["username"]失败。

  2. 异常处理逻辑错误:当文件路径不存在时,你返回了ImportError这个类对象(而非抛出异常)。此时project_settings是一个类型对象,尝试对类型使用下标访问自然会触发类型错误。

修复步骤

1. 修正get_project_settings函数

修改函数逻辑,保留字典结构并正确处理文件不存在的情况:

def get_project_settings(importFilepath):
    if os.path.exists(importFilepath):
        with open(importFilepath, "r") as f:  # 使用with语句自动关闭文件,更安全简洁
            project_settings = json.load(f)
        return project_settings  # 直接返回字典,不要转成列表
    else:
        raise ImportError(f"Settings file not found at {importFilepath}")  # 抛出异常而非返回类对象

2. 检查文件路径正确性

确认import_filepath指向真实存在的settings.json文件。当前代码中的路径是:

import_filepath = "C:/Users/james/PycharmProjects/how_to_build_a_metatrader5_trading_bot_expert_advisor/settings.json"

请根据自己的实际文件位置修改该路径,确保文件确实存在。

3. 补充缺失的配置项

注意到main.py中尝试访问project_settings['pip_size'],但你的settings.json里没有这个字段,需要在配置文件中添加对应项:

{
    "username": "51410030",
    "password": "s5p3GI1zY",
    "server": "Alpari-MT5-Demo",
    "mt5Pathway": "C://Program Files/Alpari MT5/terminal64.exe",
    "symbols": ["USDJPY.a"],
    "timeframe": "M30",
    "pip_size": 0.01  # USDJPY的点值通常为0.01,可根据品种调整
}

验证修复

修改完成后重新运行main.py,若文件路径正确且配置项齐全,即可正常初始化MT5并运行策略。

内容的提问来源于stack exchange,提问作者arvin sh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 17:50:36