这是为了跟踪市场头寸。原始数据从代理提供的.csv文件中提取。每一行都是记录。当交叉交易发生时,我的问题就会起作用。例如。持有1000股,一次卖出2,000股,并持有空头头寸。我有两份原始数据的记录,1,000股的买入和2,000股的卖出。但一个新的头寸已经建立--空头1000股。也就是说,3种头寸变动,1,000股开盘,1,000股收盘价,1,000股开盘。
我需要一个查询,来确认有1000股被买入,这就是多头/买入头寸,但随后认识到,如果卖出超过1000股的股票,就会结束多头头寸,利用差额,人为地创造一个新的空头头寸,即使没有这方面的记录。
所有这些记录都属于事务表。这里是导入.csv文件的地方。
我的查询使用事务表中的四列对开始和结束金额进行分组:日期、时间、符号、购买/出售。然后,它对每个组的数量字段进行求和。
我只知道如何查询原始数据,因此我只获得上述场景的一行信息。但新职位需要第二行信息。
所以,不是这样的:
symbol | qty opened | qty closed
xyz | 1000 | 2000我需要这个:
symbol | qty opened | qty closed
xyz | 1000 | 1000
xyz | -1000 | Null如有任何指导,将不胜感激。
发布于 2018-07-09 08:15:04
假设ID是本例中交易的顺序,我使用了一个运行和:

获取此结果的查询是
SELECT T.ID, T.TradeSize, (SELECT SUM(TradeSize) From tblTrades TS WHERE TS.ID <= T.ID) AS [Position], IIf(Sgn([TradeSize])*Sgn([Position])<0,-[TradeSize],IIf(Abs([TradeSize])>Abs([Position]),[TradeSize]-[Position],0)) AS Closed, IIf([TradeSize]=-[Closed],0,[TradeSize]-[Closed]) AS [Open] FROM tblTrades AS T;
逻辑是,如果交易的标志与头寸相反,那么交易就关闭了头寸的交易规模,否则,如果交易的股票数量大于头寸规模,那么我们就关闭了先前的头寸,即交易规模减去当前头寸。你可能需要使用负号和绝对值来得到你想要的报告,但是基础应该给你正确的数字。
编辑: PS -一个更好的名称开放领域将是‘打开’。
https://stackoverflow.com/questions/51225843
复制相似问题