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

如何在Pandas中为多货币对并行运行带动态变量的循环

多货币对交易机器人适配方案

要实现多货币对并行运行,同时满足独立变量/DataFrame管理的需求,可按以下方案落地:


1. 用字典统一管理各货币对的变量与DataFrame

动态生成变量名易引发代码混乱,更稳妥的方式是通过字典存储每个货币对的专属配置和DataFrame:

  • 主字典以货币对为键,值为包含该货币对所有参数(均线周期、手数等)和对应K线DataFrame的子字典
  • 初始化时为每个货币对生成独立的历史K线DataFrame,避免数据交叉污染

2. 用多线程实现循环并行执行

将单货币对的交易逻辑封装成独立函数,通过Python的threading模块为每个货币对启动单独线程,实现并行运行:

  • 每个线程仅负责对应货币对的循环逻辑、DataFrame更新和交易操作
  • 线程内部保留原有的sleep等待新K线逻辑,各货币对的等待互不干扰

完整实现代码

import threading
import time
import pandas as pd

# 定义所有交易货币对的配置参数
currency_configs = [
    {"pair": "EURUSD.FX.CFD", "slowma": 50, "fastma": 20, "lot_size": 1, "slippagepips": 2, "sl": -35, "tp": 60},
    {"pair": "GBPUSD.FX.CFD", "slowma": 50, "fastma": 20, "lot_size": 0.8, "slippagepips": 2, "sl": -40, "tp": 70},
    {"pair": "USDJPY.FX.CFD", "slowma": 60, "fastma": 25, "lot_size": 1.2, "slippagepips": 1, "sl": -30, "tp": 55}
]

# 初始化货币对数据容器:存储每个货币对的配置、DataFrame和交易状态
currency_data = {}
for config in currency_configs:
    pair = config["pair"]
    # 替换成你的历史K线DataFrame生成逻辑
    hist_df = pd.DataFrame(columns=["open", "high", "low", "close", "volume"])
    currency_data[pair] = {
        **config,  # 复制配置参数
        "df": hist_df,
        "opentrade": False  # 初始化交易状态
    }

# 单货币对交易逻辑函数
def run_bot(pair):
    bot_data = currency_data[pair]
    df = bot_data["df"]
    # 提取当前货币对的所有配置参数
    slowma = bot_data["slowma"]
    fastma = bot_data["fastma"]
    lot_size = bot_data["lot_size"]
    slippagepips = bot_data["slippagepips"]
    sl = bot_data["sl"]
    tp = bot_data["tp"]

    for i in range(2000):
        opentrade = bot_data["opentrade"]

        if opentrade:
            # 替换成你的持仓逻辑:更新DataFrame、检查止损止盈、执行交易等
            print(f"{pair} 持仓状态:处理最新K线")
            # 示例:模拟添加新K线数据
            new_bar = pd.DataFrame({"open": [1.08], "high": [1.085], "low": [1.078], "close": [1.082], "volume": [1000]})
            bot_data["df"] = pd.concat([df, new_bar], ignore_index=True)
            # 等待新K线(替换为对应周期的实际等待时间)
            time.sleep(1)
        else:
            # 替换成你的空仓逻辑:更新DataFrame、判断开仓信号、执行开仓等
            print(f"{pair} 空仓状态:寻找开仓机会")
            # 示例:模拟添加新K线数据
            new_bar = pd.DataFrame({"open": [1.08], "high": [1.085], "low": [1.078], "close": [1.082], "volume": [1000]})
            bot_data["df"] = pd.concat([df, new_bar], ignore_index=True)
            # 等待新K线
            time.sleep(1)
        
        # 示例:每10次循环切换交易状态(替换为你的实际状态判断逻辑)
        if i % 10 == 0:
            bot_data["opentrade"] = not bot_data["opentrade"]

# 启动所有货币对的交易线程
threads = []
for pair in currency_data.keys():
    thread = threading.Thread(target=run_bot, args=(pair,), daemon=True)
    threads.append(thread)
    thread.start()

# 保持主程序运行(若需持续交易,可保留此部分;若用守护线程,主程序退出时线程自动终止)
for thread in threads:
    thread.join()

关键说明

  • currency_configs可灵活添加/修改货币对及参数,无需调整核心逻辑
  • currency_data确保每个货币对拥有独立的DataFrame和交易状态,完全隔离
  • 线程设置为daemon=True,保证主程序退出时所有交易线程自动终止
  • 各线程的sleep等待互不影响,每个货币对按自身周期处理K线

内容的提问来源于stack exchange,提问作者Anushka A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 06:52:47