关于python:为什么我的for循环中的if条件在一次迭代后停止验证为真?

Why does my if condition in my for loop stop validation after one iteration is true?

我正在尝试使用历史数据对交易算法进行回测。我想遍历 pandas 数据框,检查几个标志(alert 和 order_placed)并在满足条件时执行交易。
数据框包含日期(索引)、开盘价、最高价、最低价、收盘价和 RSI 列。

我已尝试避免嵌套 if 语句并使用 \\'and\\' 来简化代码并最终得到相同的输出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
entry = 0
sl = 0
target_increment = 0
alert = False
order_placed = False

for row in df.itertuples():
    # print('in next iteration')
    if not order_placed:
        # print('in orderplaced not true')
        if alert:
            # print('\\tin alert is true\
')
            if row.Close>entry:
                # print('
\\t\\tin entry condition')
                print("Bought on date" + str(row.Index) + '
at ' + str(entry))
                print("SL:" + str(sl) +"\
Target:" + str(target_increment+row.Close))
                order_placed = True

            else:
                # print('
\\t\\tin entry condition is not met')
                alert = False

        else:
            # print('
\\tin alert is not true')
            if row.RSI>60:
                print('
\\t\\tin alert condition check')
                entry = row.High+1
                sl = row.Low-1
                target_increment = row.Close-row.Open
                alert = True
                print("Alert at date" + str(row.Index))


    else:

        if row.Close<=sl:
            print("Sold on date" + str(row.Index) + '
at ' + str(row.Close) +"\
Stop loss hit!")
            alert = False
            order_placed = False
        elif row.Close>=target_increment+row.Close:
            print("Sold on date" + str(row.Index) + '
at ' + str(row.Close) +"\
Target reached!")
            alert = False
            order_placed = False

print("alert:", alert)
print("order_placed:", order_placed)

我希望程序在 alert 为 true 且 order_placed 为 false 时说"已购买"。这部分适用于数据框中与这些条件匹配的第一个元组。
然而,在 order_placed 为真之后,循环的下一次迭代不会进入父 if 语句的 \\'else:\\' 部分,即,不会对其余行执行进一步的逻辑。

输出:

1
2
3
4
5
6
7
8
building dictionary
                in alert condition check
Alert at date 2019-09-20
Bought on date 2019-09-23 at 29539.3
SL: 26850.35
Target: 32766.85
alert:  True
order_placed:  True

数据框供参考:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
               Symbol      Expiry      Open      High       Low     Close      Last  Settle Price Number of Contracts      Turnover Open Interest Change in OI  Underlying        RSI  Previous High  Previous Low  Previous Open  Previous Close
Date
2019-07-26  BANKNIFTY  2019-10-31  29456.30  29698.00  29397.00  29677.50  29661.50      29677.50                 135  7.968000e+07          1980         1980    29325.30        NaN            NaN           NaN            NaN             NaN
2019-07-29  BANKNIFTY  2019-10-31  29714.75  29752.80  29438.85  29577.65  29582.05      29577.65                  85  5.030400e+07          2900          920    29295.90        NaN       29698.00      29397.00       29456.30        29677.50
2019-07-30  BANKNIFTY  2019-10-31  29621.35  29773.75  29000.05  29052.20  29050.00      29052.20                 223  1.304850e+08          3500          600    28791.60        NaN       29752.80      29438.85       29714.75        29577.65
2019-07-31  BANKNIFTY  2019-10-31  28900.00  29227.65  28836.65  29164.85  29155.00      29164.85                 186  1.079050e+08          4600         1100         NaN        NaN       29773.75      29000.05       29621.35        29052.20
2019-08-01  BANKNIFTY  2019-10-31  29000.00  29105.00  28355.55  28699.05  28770.55      28699.05                 598  3.434440e+08          9460         4860    28367.25        NaN       29227.65      28836.65       28900.00        29164.85
2019-08-02  BANKNIFTY  2019-10-31  28599.05  28866.95  28268.20  28518.35  28525.00      28518.35                 408  2.324140e+08          9660          200    28204.95        NaN       29105.00      28355.55       29000.00        28699.05
2019-08-05  BANKNIFTY  2019-10-31  28418.35  28418.35  27718.35  27973.05  27919.50      27973.05                 907  5.060620e+08         10980         1320    27648.05        NaN       28866.95      28268.20       28599.05        28518.35
2019-08-06  BANKNIFTY  2019-10-31  27873.05  28441.35  27873.05  28311.25  28292.00      28311.25                 413  2.328910e+08          9000        -1980    28022.10        NaN       28418.35      27718.35       28418.35        27973.05
2019-08-07  BANKNIFTY  2019-10-31  28282.25  28411.25  27900.00  27918.45  27900.00      27918.45                 405  2.278510e+08          9060           60    27702.05        NaN       28441.35      27873.05       27873.05        28311.25
2019-08-08  BANKNIFTY  2019-10-31  28018.45  28550.00  27818.45  28438.55  28550.00      28438.55                 364  2.051960e+08          9600          540    28110.45        NaN       28411.25      27900.00       28282.25        27918.45
2019-08-09  BANKNIFTY  2019-10-31  28538.55  28800.00  28538.55  28669.50  28692.00      28669.50                 241  1.382590e+08         10320          720    28431.90        NaN       28550.00      27818.45       28018.45        28438.55
2019-08-13  BANKNIFTY  2019-10-31  28497.30  28497.30  27878.25  27930.00  27925.00      27930.00                 329  1.855670e+08         11080          760    27729.10        NaN       28800.00      28538.55       28538.55        28669.50
2019-08-14  BANKNIFTY  2019-10-31  28015.15  28330.00  27990.00  28174.45  28152.15      28174.45                 173  9.743500e+07         11140           60    28019.20        NaN       28497.30      27878.25       28497.30        27930.00
2019-08-16  BANKNIFTY  2019-10-31  28177.90  28515.75  27948.20  28451.10  28444.95      28451.10                 333  1.880830e+08         10260         -880    28217.00        NaN       28330.00      27990.00       28015.15        28174.45
2019-08-19  BANKNIFTY  2019-10-31  28621.70  28663.40  28344.85  28400.95  28421.00      28400.95                 309  1.763910e+08         11220          960    28186.10  41.462145       28515.75      27948.20       28177.90        28451.10
2019-08-20  BANKNIFTY  2019-10-31  28312.10  28395.95  28050.00  28183.60  28224.65      28183.60                 376  2.119360e+08         12180          960    27982.45  38.474052       28663.40      28344.85       28621.70        28400.95
2019-08-21  BANKNIFTY  2019-10-31  28142.00  28280.50  27880.00  27919.85  27957.95      27919.85                 354  1.983950e+08         13060          880    27719.05  35.162444       28395.95      28050.00       28312.10        28183.60
2019-08-22  BANKNIFTY  2019-10-31  27833.15  27847.00  27163.15  27212.95  27202.00      27212.95                 547  3.008380e+08         11820        -1240    27034.20  28.165109       28280.50      27880.00       28142.00        27919.85
2019-08-23  BANKNIFTY  2019-10-31  26921.75  27419.05  26803.65  27201.70  27215.00      27201.70                 721  3.907550e+08         10760        -1060    26958.65  28.069376       27847.00      27163.15       27833.15        27212.95
2019-08-26  BANKNIFTY  2019-10-31  27554.95  28150.00  27030.00  28095.05  28100.00      28095.05                 948  5.246750e+08         10760            0    27951.35  44.268995       27419.05      26803.65       26921.75        27201.70
2019-08-27  BANKNIFTY  2019-10-31  28233.50  28390.10  28085.40  28278.60  28290.00      28278.60                 350  1.979000e+08         11480          720         NaN  46.914359       28150.00      27030.00       27554.95        28095.05
2019-08-28  BANKNIFTY  2019-10-31  28168.35  28271.00  27802.30  27987.05  27998.00      27987.05                 439  2.458660e+08         12340          860    27804.30  43.391190       28390.10      28085.40       28233.50        28278.60
2019-08-29  BANKNIFTY  2019-10-31  27900.00  27900.00  27437.05  27513.30  27566.60      27513.30                1312  7.251390e+08         15140         2800    27305.20  38.351222       28271.00      27802.30       28168.35        27987.05
2019-08-30  BANKNIFTY  2019-10-31  27221.10  27773.65  27221.10  27613.60  27665.40      27613.60                3065  1.686416e+09         28060        12920    27427.85  39.941728       27900.00      27437.05       27900.00        27513.30
2019-09-03  BANKNIFTY  2019-10-31  27160.55  27420.00  26910.00  26979.10  26921.65      26979.10                2015  1.093904e+09         34760         6700    26824.15  33.970914       27773.65      27221.10       27221.10        27613.60
2019-09-04  BANKNIFTY  2019-10-31  26968.00  27481.00  26825.00  27335.45  27288.55      27335.45                3714  2.023207e+09         54420        19660    27123.85  39.445866       27420.00      26910.00       27160.55        26979.10
2019-09-05  BANKNIFTY  2019-10-31  27252.95  27443.75  26980.00  27098.30  27090.35      27098.30                2127  1.155384e+09         54340          -80    26919.70  37.233245       27481.00      26825.00       26968.00        27335.45
2019-09-06  BANKNIFTY  2019-10-31  27194.40  27500.00  27186.20  27415.90  27400.65      27415.90                2163  1.184791e+09         55060          720    27247.90  41.931016       27443.75      26980.00       27252.95        27098.30
2019-09-09  BANKNIFTY  2019-10-31  27350.05  27714.00  27148.80  27665.05  27650.25      27665.05                4219  2.326629e+09         40720       -14340    27504.65  45.384392       27500.00      27186.20       27194.40        27415.90
2019-09-11  BANKNIFTY  2019-10-31  27760.20  27998.55  27711.50  27938.40  27901.50      27938.40                1886  1.052612e+09         48840         8120    27776.20  48.970041       27714.00      27148.80       27350.05        27665.05
2019-09-12  BANKNIFTY  2019-10-31  28028.00  28198.55  27885.60  27923.85  27900.00      27923.85                3564  1.999824e+09         60720        11880    27818.50  48.786439       27998.55      27711.50       27760.20        27938.40
2019-09-13  BANKNIFTY  2019-10-31  27869.55  28333.45  27700.00  28276.75  28273.05      28276.75                4487  2.511968e+09         71980        11260    28098.75  53.354495       28198.55      27885.60       28028.00        27923.85
2019-09-16  BANKNIFTY  2019-10-31  28015.85  28205.00  27938.70  27997.15  27996.90      27997.15                5198  2.916725e+09         73080         1100    27855.00  49.581096       28333.45      27700.00       27869.55        28276.75
2019-09-17  BANKNIFTY  2019-10-31  27980.00  27986.25  27192.75  27242.15  27270.75      27242.15                8466  4.665398e+09        107020        33940    27131.75  41.123510       28205.00      27938.70       28015.85        27997.15
2019-09-18  BANKNIFTY  2019-10-31  27450.00  27568.85  27240.00  27285.60  27280.00      27285.60               10375  5.685789e+09        134280        27260    27172.65  41.739442       27986.25      27192.75       27980.00        27242.15
2019-09-19  BANKNIFTY  2019-10-31  27260.30  27281.20  26790.05  26880.60  26899.00      26880.60               12977  6.995522e+09        157280        23000    26757.65  37.772828       27568.85      27240.00       27450.00        27285.60
2019-09-20  BANKNIFTY  2019-10-31  26977.05  29538.30  26851.35  29100.05  29117.05      29100.05               79189  4.521008e+10        310540       153260    28981.55  60.132563       27281.20      26790.05       27260.30        26880.60
2019-09-23  BANKNIFTY  2019-10-31  29921.75  30824.90  29745.30  30643.85  30650.00      30643.85               66636  4.039896e+10        451720       141180    30566.20  68.587639       29538.30      26851.35       26977.05        29100.05
2019-09-24  BANKNIFTY  2019-10-31  30601.70  30776.90  30055.00  30373.90  30360.10      30373.90               47956  2.911238e+10        542760        91040    30183.10  65.953644       30824.90      29745.30       29921.75        30643.85
2019-09-25  BANKNIFTY  2019-10-31  30279.65  30279.65  29667.35  29784.75  29759.95      29784.75               64327  3.844630e+10        698080       155320    29586.05  60.493489       30776.90      30055.00       30601.70        30373.90
2019-09-26  BANKNIFTY  2019-10-31  29800.00  30957.95  29800.00  30225.10  30263.95      30225.10              160567  9.732284e+10        888600       190520    30002.60  62.961656       30279.65      29667.35       30279.65        29784.75
2019-09-27  BANKNIFTY  2019-10-31  30201.00  30340.00  29882.95  30080.90  30061.30      30080.90              195904  1.179994e+11        967320        78720    29876.65  61.604376       30957.95      29800.00       29800.00        30225.10
2019-09-30  BANKNIFTY  2019-10-31  29890.05  29955.60  29103.50  29324.70  29310.00      29324.70              244117  1.437219e+11       1327640       360320    29103.15  54.918367       30340.00      29882.95       30201.00        30080.90
2019-10-01  BANKNIFTY  2019-10-31  29440.00  29724.00  28218.00  28874.65  28918.15      28874.65              366120  2.126155e+11       1513360       185720    28725.50  51.346656       29955.60      29103.50       29890.05        29324.70
2019-10-03  BANKNIFTY  2019-10-31  28655.10  28919.80  28368.60  28570.85  28579.95      28570.85              247822  1.418723e+11       1586560        73200    28414.10  49.028620       29724.00      28218.00       29440.00        28874.65
2019-10-04  BANKNIFTY  2019-10-31  28801.05  28860.00  27778.00  27853.75  27819.00      27853.75              291787  1.648944e+11       1645520        58960    27731.85  43.981386       28919.80      28368.60       28655.10        28570.85
2019-10-07  BANKNIFTY  2019-10-31  27950.00  28277.00  27652.20  27871.55  27870.00      27871.55              214766  1.203944e+11       1441060      -204460    27767.55  44.135119       28860.00      27778.00       28801.05        27853.75
2019-10-09  BANKNIFTY  2019-10-31  27870.00  28989.95  27774.00  28874.05  28894.60      28874.05              295138  1.675061e+11       1351920       -89140    28785.85  52.106930       28277.00      27652.20       27950.00        27871.55
2019-10-10  BANKNIFTY  2019-10-31  28690.00  28690.00  27980.00  28106.60  28170.15      28106.60              246371  1.392902e+11       1509280       157360    28013.45  46.622132       28989.95      27774.00       27870.00        28874.05
2019-10-11  BANKNIFTY  2019-10-31  28300.00  28723.00  27805.00  28138.60  28135.00      28138.60              301738  1.703704e+11       1527360        18080    28042.50  46.873242       28690.00      27980.00       28690.00        28106.60
2019-10-14  BANKNIFTY  2019-10-31  28317.95  28790.00  28082.85  28209.80  28210.00      28209.80              233980  1.327742e+11       1468680       -58680    28181.95  47.465433       28723.00      27805.00       28300.00        28138.60
2019-10-15  BANKNIFTY  2019-10-31  28300.00  28775.00  28251.00  28618.65  28621.00      28618.65              213025  1.214465e+11       1457480       -11200    28555.10  50.853191       28790.00      28082.85       28317.95        28209.80
2019-10-16  BANKNIFTY  2019-10-31  28720.25  28807.00  28321.15  28604.75  28615.65      28604.75              221098  1.264651e+11       1386680       -70800    28538.80  50.733407       28775.00      28251.00       28300.00        28618.65
2019-10-17  BANKNIFTY  2019-10-31  28530.50  29150.00  28530.50  29079.65  29070.35      29079.65              231824  1.337761e+11       1424740        38060    28989.45  54.662632       28807.00      28321.15       28720.25        28604.75
2019-10-18  BANKNIFTY  2019-10-31  29029.60  29299.95  28903.05  29152.35  29140.00      29152.35              192396  1.120157e+11       1295200      -129540    29120.25  55.251008       29150.00      28530.50       28530.50        29079.65
2019-10-22  BANKNIFTY  2019-10-31  29397.00  29747.00  28851.40  29492.50  29490.00      29492.50              218602  1.289482e+11       1253820       -41380    29411.15  57.997593       29299.95      28903.05       29029.60        29152.35
2019-10-23  BANKNIFTY  2019-10-31  29400.00  29725.00  29122.00  29494.50  29526.15      29494.50              202544  1.194933e+11       1198340       -55480    29459.60  58.013911       29747.00      28851.40       29397.00        29492.50
2019-10-24  BANKNIFTY  2019-10-31  29625.00  29742.55  29020.95  29180.50  29215.55      29180.50              269195  1.580991e+11       1328280       129940    29107.95  54.438115       29725.00      29122.00       29400.00        29494.50
2019-10-25  BANKNIFTY  2019-10-31  29280.10  29480.00  28912.60  29431.85  29438.00      29431.85              227255  1.327633e+11       1000880      -327400    29395.95  56.736869       29742.55      29020.95       29625.00        29180.50
2019-10-27  BANKNIFTY  2019-10-31  29638.00  29760.00  29460.60  29497.30  29473.00      29497.30               21511  1.270312e+10        997600        -3280    29516.30  57.340432       29480.00      28912.60       29280.10        29431.85


ifelif(在根 if-else 语句的 else 块中)总是不符合它们的条件。 \\'order_placed\\' 没有办法变成 False 或 \\'alert\\' 变成 True
我不太确定这意味着什么,但您可能想检查代码的逻辑。似乎 \\'sl\\' 和 \\'target_increment\\' 永远不会改变。