Python 熊猫更有效地循环财务数据

Python 熊猫更有效地循环财务数据,python,pandas,vectorization,financial,Python,Pandas,Vectorization,Financial,我正在处理pandas Financial series数据帧,并遍历行以测试停止点和目标。对于大型数据集,这需要花费很长时间。我遇到的主要问题是,数据['Signal']仅在边界条件存在时触发。在目标和停止点未被触碰的情况下,最好“锁定”信号保持1(通过正向填充)。目前,我需要检查每一行并填写位置值来执行计算 更新数据: Date Time Open High Low Close boundry1 boundry2 L1 S1 Signal

我正在处理pandas Financial series数据帧,并遍历行以测试停止点和目标。对于大型数据集,这需要花费很长时间。我遇到的主要问题是,数据['Signal']仅在边界条件存在时触发。在目标和停止点未被触碰的情况下,最好“锁定”信号保持1(通过正向填充)。目前,我需要检查每一行并填写位置值来执行计算

更新数据:

    Date    Time    Open    High    Low Close   boundry1    boundry2    L1  S1  Signal  exit_type   exit_price  Sreturn position
578 20120831    10:56:00    1272.50 1274.00 1272.50 1274.00 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
579 20120831    10:57:00    1274.00 1275.25 1274.00 1274.25 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
580 20120831    10:59:00    1274.25 1274.75 1274.25 1274.75 1274.5  1271.25 1277.75 1268.0  1   NaN NaN 0   0
581 20120831    11:00:00    1274.75 1274.75 1274.75 1274.75 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
582 20120831    11:01:00    1275.00 1275.00 1275.00 1275.00 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
583 20120831    11:02:00    1275.75 1275.75 1275.25 1275.25 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
584 20120831    11:03:00    1276.25 1276.25 1276.25 1276.25 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
585 20120831    11:04:00    1277.00 1277.00 1277.00 1277.00 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
586 20120831    11:05:00    1275.75 1275.75 1274.75 1274.75 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
587 20120831    11:06:00    1275.50 1275.50 1275.25 1275.25 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
588 20120831    11:07:00    1275.25 1275.25 1274.75 1274.75 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
589 20120831    11:09:00    1274.75 1275.00 1274.75 1275.00 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
590 20120831    11:10:00    1275.25 1275.25 1275.25 1275.25 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
591 20120831    11:11:00    1275.50 1275.50 1275.50 1275.50 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
592 20120831    11:12:00    1275.00 1275.00 1275.00 1275.00 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
593 20120831    11:16:00    1274.75 1275.00 1274.75 1275.00 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
594 20120831    11:17:00    1275.25 1275.25 1275.25 1275.25 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
595 20120831    11:19:00    1274.75 1275.00 1274.75 1275.00 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
596 20120831    11:21:00    1275.25 1275.25 1275.25 1275.25 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
597 20120831    11:24:00    1276.25 1276.25 1276.25 1276.25 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
598 20120831    11:29:00    1274.50 1274.50 1274.50 1274.50 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
599 20120831    11:31:00    1274.50 1274.50 1274.50 1274.50 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
600 20120831    11:32:00    1274.25 1274.25 1274.25 1274.25 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
601 20120831    11:33:00    1274.25 1274.25 1274.25 1274.25 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
602 20120831    11:34:00    1273.75 1274.00 1273.75 1274.00 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
603 20120831    11:39:00    1274.50 1274.50 1274.50 1274.50 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
604 20120831    11:41:00    1274.50 1274.50 1274.50 1274.50 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
605 20120831    11:47:00    1273.75 1273.75 1273.50 1273.50 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
606 20120831    11:48:00    1274.00 1274.00 1274.00 1274.00 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
607 20120831    11:49:00    1273.75 1274.00 1273.75 1274.00 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
608 20120831    11:50:00    1273.25 1273.75 1273.25 1273.75 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
609 20120831    11:53:00    1274.50 1274.50 1274.50 1274.50 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
610 20120831    11:56:00    1274.00 1274.00 1273.50 1273.50 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
611 20120831    11:59:00    1273.75 1273.75 1273.75 1273.75 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
612 20120831    12:00:00    1273.50 1273.50 1273.50 1273.50 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
613 20120831    12:05:00    1273.50 1273.50 1273.50 1273.50 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
614 20120831    12:07:00    1273.00 1273.00 1273.00 1273.00 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
615 20120831    12:08:00    1272.75 1272.75 1270.50 1270.50 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
616 20120831    12:09:00    1270.75 1270.75 1270.50 1270.50 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
617 20120831    12:10:00    1270.25 1270.25 1269.50 1269.50 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
618 20120831    12:12:00    1268.00 1268.00 1268.00 1268.00 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
619 20120831    12:13:00    1267.75 1268.25 1267.75 1268.25 1274.5  1271.25 1277.75 1268.0  0   NaN NaN 0   0
有没有更像蟒蛇的方法?谢谢,节日快乐! 编辑:我在这里所做的是使用活动位置锁定到1,直到达到其中一个退出条件。
最好是仅在信号启动且未超过边界2和L1条件时,才对“信号”列进行条件填充。一旦超过这些条件。然后它将通过激活位置-1减少

active_position=0
for i, row in data.iterrows():
    data.loc[i,'position']=active_position
    if row.Signal==1 and active_position==0:
        active_position=1
        data.loc[i, 'exit_type'] = None    
    elif active_position>0:
        if data.loc[i,'High']<data.loc[i,'L1']:
            if data.loc[i,'Low']<=data.loc[i,'boundry2']:
                data.loc[i, 'exit_type'] = 'stop'
                active_position=0
                bars_since_signal=0
                data.loc[i,'Sreturn']=(data.boundry2.loc[i]-data.Close.loc[i-1])*active_position
            else:
                data.loc[i, 'exit_type'] = None
                data.loc[i,'position']=active_position
                data.loc[i,'Sreturn']=(data.Close.loc[i]-data.Close.loc[i-1])*active_position
        else:
            data.loc[i, 'exit_type'] = 'Target1'
            active_position=0
            bars_since_signal=0
            data.loc[i,'Sreturn']=(data['L1'].loc[i]-data.Close.loc[i-1])*active_position
活动位置=0
对于i,data.iterrows()中的行:
data.loc[i,'position']=活动位置
如果行信号=1且活动位置=0:
活动位置=1
data.loc[i,'退出类型']=无
elif活动位置>0:

如果data.loc[i,'High'],请提供示例数据集或模拟数据集。看看这里萨赫勒我补充的数据。谢谢你的帮助。也许有帮助<代码>ItErrors
是第二个最慢的方法。
活动位置是否始终为
0
1