Etoro cash-account targets size against combined crypto inventory rather than per-instrument holdings

未关闭
#10,086 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
56/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
活跃
技术栈
csharp
领域
backend, databases

调研方向

Read Common/Securities/CashBuyingPowerModel.cs:206-219, EtoroBrokerageModel.cs, and SecurityPortfolioModel.cs:75-79 to trace cash-account sizing and instrument holdings. Start by comparing eToro's sizing model with existing position-based sizing and check how spot exchanges use the generic cash model. Add regression coverage for zero and nonzero targets across two instruments sharing a base currency; done when those targets use each instrument's position and spot-exchange behavior remains unchanged.

由索引模型根据 Issue 内容生成。

描述

What happens

On EtoroBrokerageModel(AccountType.Cash), crypto target sizing uses the combined base-currency cash balance instead of the holdings of the requested instrument. eToro's order model treats positions as instrument-specific and rejects a market order that crosses zero, so this can either prevent a close or trade in the wrong direction.

Synthetic reproduction against Lean 2d730d56e (no brokerage connection or live trade):

  • USD cash: 10,000.
  • BTC cash: 2, conversion rate 10,000 USD/BTC.
  • EUR cash: 0, conversion rate 1 USD/EUR.
  • BTCUSD and BTCEUR: one BTC held on each, each priced at 10,000 in its quote currency.
  • Both securities use the buying-power and fee models returned by EtoroBrokerageModel(AccountType.Cash); portfolio free-value and minimum-order buffers are zero.
  • Total portfolio value: 30,000 USD.

Actual output:

CalculateOrderQuantity(BTCUSD, 0) = -2
CanSubmitOrder = false (cross-zero rejection; BTCUSD holds only 1)

CalculateOrderQuantity(BTCUSD, 0.5) = -0.4950495
CanSubmitOrder = true

The zero target should close the one BTCUSD unit, not also attempt to sell the BTC represented by BTCEUR. The 50% target should increase BTCUSD from 10,000 toward 15,000 USD, not reduce it.

Source

  • Common/Securities/CashBuyingPowerModel.cs:206-219: the zero target returns -BaseCurrency.Amount; other targets compare against the value of that same combined currency balance.
  • Common/Brokerages/EtoroBrokerageModel.cs: inherits this cash-account buying-power model, but its CanSubmitOrder checks cross-zero against the instrument's holdings.
  • Common/Securities/SecurityPortfolioModel.cs:75-79: ordinary crypto fills already add units to the shared base-currency cash balance, so this can arise in an uninterrupted running algorithm too.

What a fix must achieve

Keep the cash book's combined coin inventory and valuation, while sizing eToro portfolio targets against the requested instrument's position. Cover a zero and a nonzero target with two instruments sharing the same base currency, and leave spot-exchange behavior unchanged.

Suggestion only: evaluate a position-aware buying-power model for eToro, reusing existing position-based sizing where possible rather than changing the generic spot-cash model.

This is distinct from #1860, which addressed initial virtual holdings: here both holdings are populated and the base-currency balance is correct.

主要语言
C#
星标
22.5k
派生
5.4k
平均合并
22 小时 6 分钟
30 天内合并 PR
81

环境准备

在 Codespaces 中打开

在浏览器里用你自己的 GitHub 账号启动这个项目的开发容器。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

QuantConnect/Lean 的其他 Issue

查看 QuantConnect/Lean 的全部 Issue

相似的 Issue

更多 C# Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。