我正在尝试自动计算交易的盈亏。目前,我已将我的pandas daatframe设置为返回一个保留列,该列包含1,而purcahse处于活动状态,售出后为-1。 “价格”列记录了股票的价格,而“保留时间”和“计数”列则以两种不同的方式跟踪交易被持有了多长时间。
我正在努力做的是计算我赚了/亏了多少钱。我需要它来计算(以百分比为单位)购买价格(第一个非零值)和销售价(一系列的最后一个非零值)之间的差额。挑战来自可变长度的焦油,因此df.shift不起作用。
以下是样本数据集:
谢谢,如果不清楚,请询问
Date Hold Price Hold_Time count
148 20190801 0 0.00 0 0
149 20190802 0 0.00 0 0
150 20190805 0 0.00 0 0
151 20190806 1 21.50 1 1
152 20190807 1 22.48 1 2
153 20190808 1 22.78 1 3
154 20190809 1 24.17 1 4
155 20190812 1 23.72 1 5
156 20190813 -1 23.39 0 0
157 20190814 0 0.00 0 0
158 20190815 0 0.00 0 0
159 20190816 0 0.00 0 0
160 20190819 0 0.00 0 0
161 20190820 0 0.00 0 0
162 20190821 0 0.00 0 0
163 20190822 0 0.00 0 0
164 20190823 1 24.80 1 1
165 20190826 1 24.00 1 2
166 20190827 -1 24.65 0 0
167 20190828 0 0 0 0
168 20190829 0 0 0 0
答案 0 :(得分:0)
pd.groupby
是您的朋友在这里,尽管有些round回。通过将值与0和先前的值进行比较,您可以使用它来获取每个单独的“持有”系列在单独的仓中-“ 0”系列还在此处创建了一个组,我们随后必须将其删除。
blocks = df["Price"].groupby(((df["Price"] != 0) != (df["Price"] != 0).shift()).cumsum())
buy_values = blocks.first()
buy_values = buy_values[buy_values != 0]
sell_values = blocks.last()
sell_values = sell_values[sell_values != 0]
difference = sell_values - buy_values
percent_difference = difference / buy_values * 100
这仅使用数据集的“价格”列。使用其他列可以使解决方案更容易/更清晰,但这应该可以满足您的要求!
答案 1 :(得分:0)
感谢您提供易于使用的数据集。考虑到它被命名为“数据”, 我提出以下解决方案
$( document ).ready(function() {
$("#pr_id").keypress(function(){
var inp = $(this).val();
if(inp != ''){
e.preventDefault();
return false;
}
});
});