我有一个包含交易列表的表格:
Security ; Quantity ; Price ; Consid
1. IBM ; +1,000 ; 20 ; -20k
2. IBM ; +2,000 ; 22 ; -44k
3. IBM ; -1,000 ; 30 ; +30k
4. IBM ; -2,000 ; 20 ; +40k
5. IBM ; -2,000 ; 20 ; -20k
所以 PnL 基本上是 Consid 列的总和,所以在添加 Trade#5 之前,PnL 将为 +6k。
添加交易 #5 后,这显示 PnL 为 -14k,这并不能真正反映我们所处的位置。
我想要的是某种过滤掉未平仓交易的方法?因此,仅当我们将购买 2k IBM 股票添加到表中时,交易#5 才会被允许计入总和。
我最初的尝试是:
set @Ret = @Ret + isnull((SELECT SUM(GC) AS GS
FROM (SELECT SUM(GrossConsid) * - 1 AS GC
FROM Trades AS CT
WHERE (SpecialCond = 'Prop') AND (SettType <> 'Futures') AND (TrdDt <= @Date) AND (TrdDt >=@StartDate) AND (Name = 'my_Comp')
GROUP BY ABS(Quantity)
HAVING (SUM(Quantity) = 0)) AS dt),0)
但我还没有弄清楚有一个边缘条件,如果我有一个数量为 +5、+5、-5 的交易,它不会被计算在内,因为(SUM(Quantity) = 0))
评估为假。
关于如何纠正这个问题的任何想法?
谢谢克里斯