Создание скользящего счета с использованием нескольких условий в python / pandas - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь создать скользящий счетчик дней распределения согласно определению на веб-сайте IDB: Количество дней распространения IDB

Количество увеличивается каждый раз, когда существует день распределения ( DD) (определяется как снижение цены закрытия> 0,2% при большем объеме, чем в предыдущий день). Количество уменьшается на единицу каждый раз, когда ДД становится 25 дней. Он также уменьшается на единицу, если максимальная цена превышает 6% от цены, по которой произошел DD. Он также уменьшается на 1, если рынок исправляется (они не определяют это, но я использую коррекцию на 6% ниже цены, по которой произошел DD). Счет сбрасывается до 0, если есть последующий день (определяемый как увеличение> 1% с объемом, превышающим объем предыдущего дня).

Я пытался использовать a для l oop, но не иметь успех с включением различных способов, которые может уменьшить количество.

Часть, которую я не могу понять, - это как сослаться на многочисленные DD и отследить движение цены / дней, так как они возникли, а затем использовать для мониторинга условий сокращения подсчета. ie код ниже, который я попробовал, только уменьшает количество, если цена увеличивается на 6% от ПОСЛЕДНЕГО ДД, но я хочу, чтобы оно уменьшило количество, если цена повышается на 6% выше ЛЮБОГО из ДД, которые <25 дней. </p>

df=pd.read_csv('NYSE OHLC Daily with Volume.csv')
df['ret']=df['Close'].pct_change()
df['volume prior']=df['Volume'].shift()
df['dist day']=np.where((df['ret']<=-0.002) & (df['Volume']>df['volume prior']),1,0)
df['follow through day']=np.where((df['ret']>=0.01) & (df['Volume']>df['volume prior']),1,0)

count=0
counts=[]
last_dd_px=99999
for i in df.index:
    if df.loc[i,'follow through day']==1:
        count=0
        last_dd_px=99999
    if df.loc[i,'dist day']==1:
        count+=1
        last_dd_px=df.loc[i,'Close']
    if df.loc[i,'High']>last_dd_px*1.06:
        count-=1
    counts.append(count)
df['count']=counts

Вот образец исходных данных:

           Date     Open     High      Low    Close        Volume
1   2002-12-03  5229.66  5229.66  5155.86  5164.63  1.407371e+09
2   2002-12-04  5164.63  5191.07  5116.73  5155.43  1.475448e+09
3   2002-12-05  5155.43  5169.81  5097.28  5104.79  1.195581e+09
4   2002-12-06  5104.79  5144.44  5049.91  5131.85  1.206871e+09
5   2002-12-09  5131.85  5131.85  5039.44  5040.71  1.197528e+09
6   2002-12-10  5040.71  5105.21  5039.12  5104.68  1.219813e+09
7   2002-12-11  5104.68  5125.62  5064.50  5105.21  1.215284e+09
8   2002-12-12  5105.21  5117.79  5064.82  5086.92  1.186703e+09
9   2002-12-13  5086.92  5086.92  5025.06  5035.10  1.217508e+09
10  2002-12-16  5035.10  5138.09  5035.10  5138.09  1.191691e+09
11  2002-12-17  5138.09  5138.09  5092.31  5094.74  1.189555e+09
12  2002-12-18  5094.74  5094.74  5024.74  5037.96  1.331305e+09
13  2002-12-19  5037.96  5070.63  4979.49  5001.38  1.319091e+09
14  2002-12-20  5001.38  5069.26  5001.38  5067.14  1.724701e+09
15  2002-12-23  5067.14  5092.63  5043.77  5067.67  1.055395e+09
16  2002-12-24  5067.67  5067.67  5042.19  5044.30  4.423127e+08
17  2002-12-26  5044.30  5100.13  5025.80  5036.59  6.867064e+08
18  2002-12-27  5036.58  5038.81  4950.20  4958.02  7.269339e+08
19  2002-12-30  4958.02  4996.83  4936.56  4986.15  9.938458e+08
20  2002-12-31  4986.15  5011.31  4938.25  5000.00  1.040316e+09
21  2003-01-02  5000.00  5146.55  5000.00  5146.00  1.194199e+09
22  2003-01-03  5146.55  5157.23  5117.37  5148.45  1.092951e+09
23  2003-01-06  5140.52  5252.92  5140.52  5255.39  1.361269e+09
24  2003-01-07  5241.50  5241.50  5182.29  5186.92  1.500679e+09
25  2003-01-08  5190.54  5190.54  5122.97  5124.19  1.397043e+09
26  2003-01-09  5124.19  5211.39  5124.19  5210.34  1.487960e+09
27  2003-01-10  5210.04  5232.17  5165.81  5209.80  1.441510e+09
28  2003-01-13  5209.80  5245.66  5188.83  5209.21  1.334021e+09
29  2003-01-14  5209.21  5233.67  5190.97  5233.66  1.316443e+09
30  2003-01-15  5233.73  5235.25  5163.69  5171.45  1.344880e+09
31  2003-01-16  5171.45  5205.35  5153.70  5165.34  1.425156e+09
32  2003-01-17  5165.34  5165.34  5094.66  5108.51  1.316279e+09
33  2003-01-21  5108.51  5111.93  5016.28  5016.28  1.269116e+09
34  2003-01-22  5016.28  5016.28  4959.19  4962.98  1.513868e+09
35  2003-01-23  4962.98  5006.90  4956.42  4995.66  1.648402e+09
36  2003-01-24  4995.66  4995.66  4873.96  4880.19  1.492447e+09
37  2003-01-27  4880.19  4880.19  4772.28  4786.96  1.399567e+09
38  2003-01-28  4786.98  4847.15  4786.94  4840.99  1.411064e+09
39  2003-01-29  4840.98  4885.58  4780.65  4865.96  1.532650e+09
40  2003-01-30  4865.96  4873.12  4780.99  4784.44  1.463341e+09
41  2003-01-31  4784.43  4874.43  4769.79  4868.68  1.468897e+09
42  2003-02-03  4868.68  4903.28  4868.68  4884.79  1.183141e+09
43  2003-02-04  4884.79  4884.79  4791.49  4824.46  1.379707e+09
44  2003-02-05  4824.47  4882.49  4803.36  4807.86  1.387379e+09
45  2003-02-06  4807.86  4807.86  4742.86  4757.30  1.364262e+09
46  2003-02-07  4757.31  4788.25  4702.00  4713.66  1.219609e+09
47  2003-02-10  4713.66  4733.08  4677.09  4732.77  1.195584e+09
48  2003-02-11  4732.77  4771.77  4692.49  4708.69  1.260459e+09
49  2003-02-12  4708.69  4714.85  4649.13  4649.71  1.208309e+09
50  2003-02-13  4649.70  4666.96  4601.45  4653.25  1.419208e+09
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...