基于先前结果的条件结果

时间:2018-03-12 01:24:00

标签: excel if-statement excel-formula

我有一个导致买入,卖出或持有的公式。公式如下所示:=IF(D3>0.01,"Buy",IF(D3<-0.01,"Sell","Hold"))

正如您所看到的那样,它基于D栏中的价值,问题来自于买卖结果可以连续多次发出,但您可以想象您不能买东西你已经买了,你不能卖你已售出的东西。

所以我希望公式做的是如果结果是卖出然后任何后续卖出结果变为持有,直到买入结果发生,并且与买入相同,任何额外买入结果将变为持有,直到卖出结果发生。即只有一个卖出或一个连续买入,并根据需要穿插尽可能多的持有结果。

希望这很清楚,很难用言语来解释。不确定它是否有帮助,但这里是一个屏幕抓取。提前致谢。

Screen Shot - ignore the top line of n/a

2 个答案:

答案 0 :(得分:1)

也许

=IF(and(D3>0.01, c2<>"Buy"),"Buy", IF(and(D3<-0.01, c2<>"Sell"), "Sell", "Hold"))

答案 1 :(得分:1)

您可以使用数组公式在当前行之前找到MAX ROW,其中C列为&#34;购买&#34;或&#34;销售&#34;,然后比较那些。

SUMPRODUCT(MAX(ROW(C$1:C2)*--(C$1:C2="Buy")))
//versus
SUMPRODUCT(MAX(ROW(C$1:C2)*--(C$1:C2="Sell")))

SUMPRODUCT只是确保将此部分代码评估为数组公式。C$1表示在向下拖动时它会锁定到顶部。

将此作为IF的一部分包含在内,因为如果最近的操作恰好相反,您只想购买/卖出。 (即仅在BuyRowSellRow时购买,反之亦然)

这意味着您的购买时间&#34;检查变为AND(D3>0.01, SUMPRODUCT(MAX(ROW(C$1:C2)*--(C$1:C2="Buy")))<=SUMPRODUCT(MAX(ROW(C$1:C2)*--(C$1:C2="Sell")))),因此完整的公式变为:

IF(AND(D3>0.01, SUMPRODUCT(MAX(ROW(C$1:C2)*--(C$1:C2="Buy")))<=SUMPRODUCT(MAX(ROW(C$1:C2)*--(C$1:C2="Sell")))), "Buy", IF(AND(D3<-0.01, SUMPRODUCT(MAX(ROW(C$1:C2)*--(C$1:C2="Buy")))>=SUMPRODUCT(MAX(ROW(C$1:C2)*--(C$1:C2="Sell")))), "Sell", "Hold"))

>=<=非常重要,因为对于第一个操作,BuyRowSellRow都是0 < / em>表示通过更改其中一个以排除=,您可以告诉它首先要执行的操作!)