У меня есть серьезная проблема, чтобы понять, как подробно работает этот массив данных / панды / 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)