我正在写一个纸交易系统,我有什么工作,但我不禁觉得有一个更好的方法来部分关闭股票头寸;我目前拥有的似乎有点过火。
部分关闭方案:客户A以1美元购买100股X股票,然后以2美元卖出80股股票;留下20股股票。关闭+开放场景:客户A以1美元购买100股X股票,然后该客户以2美元卖出120股股票;以20股打开一个新的空头头寸。
我认为发布实际代码与回答这个问题无关。
if (customer has active trade) {
if (quantity to close >= quantity open) {
close open trade
if (quantity to close > quantity open)
create new open trade with remaining quantity (close - open)
} else {
// This is where I think it could be better.
close old position at entry price
open new position at old entry price (close quantity)
close new position at specified exit price
open new position at old entry price (old quantity - close quantity)
}
} else {
create new open trade with specified quantity
}是否有更有效的方法来写上面的逻辑?这两种场景都可以在大多数平台上作为单一交易执行。
注意:社区可能会觉得这个问题在Code上有一个更好的家;如果碰巧是这样的话,可以迁移吗?我认为这是一个更适合这里,因为没有实际的代码。
发布于 2020-05-18 20:19:54
想出了几个主意。有一点要注意的是,现有的片段对我来说似乎很好,保持简单有时让人觉得笨手笨脚。另外,对我来说,PseudoCode的措辞很简单,已经有一段时间了。
对于想法1,这是一个更复杂的外观,但它有助于自己更容易维护与立场和操作针对他们。主要的前提是利用集合/地图。
// idea 1 start
define collection positionOperationsMap(position, operation)
define list operationsList(operation)
add operation (close at entry price) to operationsList
add operation (open at close quantity) to operationsList
add operation (close at specific exit price) to operationsList
add operation (open at old quantity - close quantity) to operationsList
add positionOperation (old position, operationsList[0]) to positionOperationsMap
add positionOperation (new position, operationsList[1]) to positionOperationsMap
add positionOperation (new position, operationsList[2] to positionOperationsMap
add positionOperation (new position, operationsList[3]) to positionOperationsMap
for each positionOperation in positionOperationsMap
execute positionOperation
next
// idea 1 end对于第二个想法,我将在这里使用代码,因为这在我的头脑中更有意义,而且感觉相当简单。这使用了这样的想法,即新的职位是基于以前的职位。
// idea 2 start
Postion OldPosition; // this is defined somewhere above
// some method for closing that returns an instance of a new
// Open Position; assuming OldPosition is holding quantity
// determining CloseQuantity can be within Position, but it makes more
// sense since you have a "specified" exit price/quantity coming up
Position NewPositionTemp = OldPosition.Close(CloseQuantity);
Position NewPosition = NewPositionTemp.Close(ExitPrice);
// idea 2 end
}
} else {
create new open trade with specified quantity
}我相信这仍然保留了预期功能的一般概念,所以希望这能帮助一些人。
发布于 2020-05-18 21:47:03
相关的代码看起来确实是笨重和重复的。不过,答案将取决于执行情况。我曾经使用过这样的应用程序,我们能够“修改”职位。如果这是可能的话,那就考虑这一点:
modify old position quantity to (old quantity - close quantity)
open new position at old entry price (close quantity)
close new position at specified exit price这使得对旧位置的更改具有原子性和较少的复杂性。它还引入了简洁性。
希望这能有所帮助。
https://softwareengineering.stackexchange.com/questions/410259
复制相似问题