Pandas更有效地循环财务数据

时间:2017-12-24 19:20:14

标签: python pandas vectorization financial

我正在制作一个pandas Financial系列数据框,并在行中迭代以测试停靠点和目标。对于大型数据集,这需要太长时间。我遇到的主要问题是数据['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

有更多的pythonic方式吗?谢谢,节日快乐! 编辑:我在这里做的是使用active_position锁定为1,直到其中一个退出条件被命中 如果启动信号并且未超过boundry2和L1条件,那么最好是对“信号”列进行条件填充。一旦超过这些条件。然后它会减少active_position-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 个答案:

没有答案