C#中如何访问含内部构造函数的公共类PositionStatistics?
解决tt_net_sdk.PositionStatistics无法实例化的问题
这个类的构造函数标记为internal,说明SDK设计时就不允许外部直接创建实例,所有可用实例都应该由SDK内部生成并提供。
为什么反射创建实例没用?
你通过反射创建的实例虽然能被实例化,但类里的核心方法(比如AddFill、AdjustFill、Clear)都是internal修饰的,外部代码根本无法调用这些方法来更新统计数据,拿到的只是一个空壳实例,完全没法实现统计功能。
正确的使用方式
从SDK内部获取实例
这类持仓统计类通常会通过SDK的核心业务类暴露出来,比如:- 查看
Position类的属性,是否存在返回PositionStatistics的成员 - 监听成交(Fill)相关的事件,SDK可能在每次成交后更新统计实例,并通过事件参数传递给你
- 检查账户或订单管理器类,是否提供了获取当前持仓统计的方法
- 查看
参考官方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
相关产品推荐
相关产品推荐

