Расчет результата с фиксированной даты и ожидаемого будущего события - PullRequest
0 голосов
/ 28 мая 2018

У меня есть серьезная проблема, чтобы понять, как подробно работает этот массив данных / панды / numpy.

Проблема, которую я пытаюсь решить, состоит в том, что у меня есть два индикатора - MACD и AROON.

Если MACD выше нуля (время t0), AROON должен быть вдвое больше на 100 (t0, t1, t2 и т. Д.), Без того, чтобы MACD опустился ниже нуля (t1, t2 и т. Д.).Если счетчик равен двум, а MACD постоянно выше нуля, должен быть сгенерирован сигнал на покупку.

def find_buy_signal(xDate, xMacd, xAroon):
    for n in range(0, len(xDate)):
        if (xMacd.shift(n).macd > 0)[n]:
            for m in range(n, len(xDate)):
                buy_signal_counter = 0
                if (xMacd.shift(m).macd > 0):
                    if (xAroon.shift(m).up == 100):
                        buy_signal_counter += 1
                        if buy_signal_counter == 2:
                            return True
                else:
                    return False
         else:
             return False   

data = read_data()
xMacd = macd(data, 10, 15, 1)    
xAroon = aroon(data, 12)
buy = find_buy_date(xMacd.index, xMacd, xAroon)
print(buy) # The result is False but should be a series

Даже если я знаю псевдокод, я могу объединить два таймфрейма.

Вот некоторые примеры данных для MACD:

                    fast  hist       macd     signal          slow
Date                                                              
2018-04-08  12358.294033   0.0 -96.857954 -96.857954  12455.151987  
2018-04-15  12391.422390   0.0 -74.398098 -74.398098  12465.820488
2018-04-22  12425.867432   0.0 -54.334260 -54.334260  12480.201692
2018-04-29  12497.455100   0.0 -25.171331 -25.171331  12522.626432 
2018-05-04  12556.026829   0.0  -3.721250  -3.721250  12559.748079

Вот некоторые примеры данных с Aroon:

             down          up
Date  
2018-04-08  83.333333    8.333333
2018-04-15  75.000000    0.000000
2018-04-22  66.666667    0.000000
2018-04-29  58.333333  100.000000

Я знаю, что могу объединить два кадра данных в один кадр данных.

Здесь ожидаемый результат для сигнала, а не:

            macd        up
 Date
 t0      macd > 0   100.00 (counter == 1)
 t1      macd > 0    96.00
 t2      macd > 0   100.00 (counter == 2) signal

            macd        up
 Date
 t0      macd > 0   100.00 (counter == 1)
 t1      macd > 0    96.00
 t2      macd < 0   100.00 (counter == 0)

1 Ответ

0 голосов
/ 02 июня 2018

Я нашел решение, которое не было тем, о чем я изначально просил.Два кадра данных объединяются и называются concat.С

concat[(concat.macd > 0) & (concat.shift(-1).macd > 0) & (concat.up == 100) & (concat.shift(-1).up == 100)]

, по крайней мере, я смог найти записи, в которых значение up в два раза больше 100. Возможно, я найду правильное решение в будущем.

...