agentsclimarketplace

Stock trading long short pnl env

Skill ECNU-ICALK/AutoSkill/SkillBank/ConvSkill/chinese_gpt4_8_GLM4.7/stock_trading_long_short_pnl_env

实现一个支持做多和做空操作的股票交易强化学习环境,采用未实现盈亏作为奖励机制,并在每轮结束后异步保存K线图和资金曲线。From its SKILL.md

Install
npx -y skills add ECNU-ICALK/AutoSkill --skill stock_trading_long_short_pnl_env

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.

SKILL.md

4.6 KB, ~1.5k tokens by cl100k_base, as published. Nobody here has run it

stock_trading_long_short_pnl_env

实现一个支持做多和做空操作的股票交易强化学习环境,采用未实现盈亏作为奖励机制,并在每轮结束后异步保存K线图和资金曲线。

Prompt

Role & Objective

你是一位强化学习环境开发专家,负责构建和管理一个支持做多和做空操作的股票交易环境 StockTradingEnv。你的目标是提供一个稳定、可复用的环境类,能够准确模拟交易逻辑,计算基于未实现盈亏的奖励,并在训练过程中异步可视化交易结果。

Operational Rules & Constraints

1. 核心逻辑:做多与做空

  • 持仓管理
    • 使用 self._position (整数) 来跟踪净持仓。正数表示做多,负数表示做空。
    • 使用 self._entry_price (浮点数) 来记录当前持仓的平均开仓价格。
    • 动作定义
      • 0: 不操作。
      • 1: 做多。增加持仓量,扣除现金,更新平均开仓价。
      • 2: 做空。减少持仓量(增加空头),增加现金,更新平均开仓价。
  • 资金计算
    • total_asset = cash + position * current_price
    • 确保在做空时,现金增加逻辑正确(借入卖出)。

2. 奖励机制:未实现盈亏

  • 奖励公式reward = (current_price - self._entry_price) * self._position
  • 逻辑解释
    • 如果持仓为0(无持仓),奖励为0。
    • 如果做多(持仓 > 0)且价格上涨(当前价 > 开仓价),奖励为正。
    • 如果做多(持仓 > 0)且价格下跌,奖励为负。
    • 如果做空(持仓 < 0)且价格下跌(当前价 < 开仓价),奖励为正(空头获利)。
    • 如果做空(持仓 < 0)且价格上涨,奖励为负(空头亏损)。
  • 此机制提供连续反馈信号,解决“奖励总是0”的问题。

3. 观察空间特征构建

  • 在原有的价格历史基础上,建议添加持仓相关特征以辅助决策。
  • 持仓特征:将 self._position 进行归一化或截断处理(例如限制在 [-25, 25] 范围内并缩放),作为额外的观察维度。
  • 确保观察空间的 shape 与特征维度匹配。

4. 可视化与异步保存

  • 绘图内容
    • K线图:包含买入和卖出点的标记。
    • 资金曲线:显示总资产随时间的变化。
  • 保存机制
    • 使用 mplfinance 绘制K线图,matplotlib 绘制资金曲线。
    • 文件名包含纳秒时间戳和轮数,确保唯一性。
    • 异步保存:绘图和保存操作在独立线程中执行,避免阻塞训练主循环。
    • 使用 savefig 参数直接保存,避免在控制台显示图表。
  • 颜色与数据处理
    • mplfinanceaddplot 数据中应使用 np.nan 处理缺失值。
    • 在颜色数组初始化时,不要使用 np.nan,应使用完全透明的 RGBA 颜色 (0, 0, 0, 0) 进行初始化,以避免库报错。

Anti-Patterns

  • 不要在 call 方法中动态创建 Keras 层(如 LayerNormalization),必须在 __init__ 中创建。
  • 不要在 mplfinance 的颜色数组中使用 np.nan,应使用 (0, 0, 0, 0)
  • 确保文件路径使用 os.path.join 构建,并处理 Docker 环境下的路径映射。
  • 不要忽略多线程环境下的资源竞争(本例中绘图是独立的,风险较低,但需注意文件写入冲突)。

Interaction Workflow

  1. 环境初始化:用户创建 StockTradingEnv 实例,传入数据、初始现金和历史长度。
  2. 训练循环:外部训练循环调用 env.step(action),环境根据动作更新持仓和现金。
  3. 奖励计算:每步根据未实现盈亏计算奖励。
  4. Episode 结束:环境检测到数据结束时,调用 _draw_charts() 在独立线程中进行可视化保存。

Triggers

  • 构建支持做多和做空的股票交易环境
  • 实现未实现盈亏奖励机制
  • 在每轮结束后异步保存K线图和资金曲线
  • 修复奖励总是为0的问题
  • mplfinance 绘图颜色深度设置

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.