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

C#中如何访问含内部构造函数的公共类PositionStatistics?

解决tt_net_sdk.PositionStatistics无法实例化的问题

这个类的构造函数标记为internal,说明SDK设计时就不允许外部直接创建实例,所有可用实例都应该由SDK内部生成并提供。

为什么反射创建实例没用?

你通过反射创建的实例虽然能被实例化,但类里的核心方法(比如AddFill、AdjustFill、Clear)都是internal修饰的,外部代码根本无法调用这些方法来更新统计数据,拿到的只是一个空壳实例,完全没法实现统计功能。

正确的使用方式

  1. 从SDK内部获取实例
    这类持仓统计类通常会通过SDK的核心业务类暴露出来,比如:

    • 查看Position类的属性,是否存在返回PositionStatistics的成员
    • 监听成交(Fill)相关的事件,SDK可能在每次成交后更新统计实例,并通过事件参数传递给你
    • 检查账户或订单管理器类,是否提供了获取当前持仓统计的方法
  2. 参考官方API文档
    官方文档里会明确说明这个类的获取途径,比如哪些方法或属性会返回PositionStatistics实例,跟着文档的示例代码实现即可。

仅测试用的替代方案(不推荐生产环境使用)

如果只是想验证这个类的输出逻辑,你可以自己实现一个具备相同逻辑的包装类,复制它的属性计算和方法逻辑:

public class MyPositionStatistics
{
    private decimal _totalBuyPrice;
    private decimal _buyPosition;
    private int _fillCount;
    private decimal _totalSellPrice;
    private decimal _sellPosition;

    public decimal BuyAveragePrice => _buyPosition > 0 ? _totalBuyPrice / _buyPosition : 0;
    public decimal BuyPosition => _buyPosition;
    public int FillCount => _fillCount;
    public decimal NetPosition => _buyPosition - _sellPosition;
    public decimal SellAveragePrice => _sellPosition > 0 ? _totalSellPrice / _sellPosition : 0;
    public decimal SellPosition => _sellPosition;

    public void AddFill(BuySell side, decimal quantity, decimal totalFillPrice)
    {
        if (side == BuySell.Buy)
        {
            _buyPosition += quantity;
            _totalBuyPrice += totalFillPrice;
        }
        else
        {
            _sellPosition += quantity;
            _totalSellPrice += totalFillPrice;
        }
        _fillCount++;
    }

    public void Clear()
    {
        _totalBuyPrice = default;
        _buyPosition = default;
        _fillCount = 0;
        _totalSellPrice = default;
        _sellPosition = default;
    }

    // 按需实现AdjustFill、RemoveFill等方法

    public override string ToString()
    {
        return $"b:{BuyPosition}@{BuyAveragePrice} S:{SellPosition}@{SellAveragePrice} F:{FillCount} NetPos:{NetPosition}";
    }
}

注意:这个方案只是模拟逻辑,无法和SDK的真实业务数据同步,仅适合本地测试使用。

内容的提问来源于stack exchange,提问作者Aditya Giri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 09:40:54