【发布时间】:2016-08-18 04:45:30
【问题描述】:
我有一个包含如下数据的数据框:
open close signal
date_time
2011-01-03 01:04:00 1.5560 1.5556 0.0
2011-01-03 01:05:00 1.5557 1.5556 0.0
2011-01-03 01:06:00 1.5557 1.5556 1.0
2011-01-03 01:07:00 1.5556 1.5545 1.0
2011-01-03 01:08:00 1.5546 1.5548 1.0
2011-01-03 01:09:00 1.5549 1.5547 0.0
2011-01-03 01:10:00 1.5548 1.5549 0.0
2011-01-03 01:11:00 1.5549 1.5551 1.0
2011-01-03 01:12:00 1.5550 1.5552 1.0
2011-01-03 01:13:00 1.5553 1.5553 0.0
2011-01-03 01:14:00 1.5552 1.5553 0.0
这是在 Python 中表示金融时间序列的一种相当标准的方式。
现在,我想使用信号栏进行交易。当信号 == 1 时买入,当信号回到 0 时卖出。该信号在当前分钟结束时是已知的,所以当我们说“买入”时,它的真正意思是“在下一分钟开始时买入”。
假设我们的投资组合的初始值为 1.0。我想要一个输出的时间序列:
pnl
date_time
2011-01-03 01:04:00 1.0
2011-01-03 01:05:00 1.0
2011-01-03 01:06:00 1.0
2011-01-03 01:07:00 0.999292877 # Buy: pnl = (1.0 * 1.5545 / 1.5556)
2011-01-03 01:08:00 0.999485729 # Hold: pnl = (1.0 * 1.5548 / 1.5556)
2011-01-03 01:09:00 0.999421445 # Hold: pnl = (1.0 * 1.5547 / 1.5556)
2011-01-03 01:10:00 0.999485729 # Sell: pnl = (1.0 * 1.5548 / 1.5556)
2011-01-03 01:11:00 0.999485729 # Wait
2011-01-03 01:12:00 0.999614280 # Buy: pnl = (0.999485729 * 1.5552 / 1.5550)
2011-01-03 01:13:00 0.999678556 # Hold: pnl = (0.999485729 * 1.5553 / 1.5550)
2011-01-03 01:14:00 0.999614280 # Sell: pnl = (0.999485729 * 1.5552 / 1.5550)
2011-01-03 01:15:00 0.999614280 # Wait
知道如何在不循环数据帧的情况下使用 pandas 做到这一点吗?
【问题讨论】: