Различные условия покупки и продажи сигнала - PullRequest
0 голосов
/ 20 ноября 2018

Я собираюсь реализовать торговую стратегию, работающую с двумя скользящими средними.Медленное (60 дней SMA) и быстрое (10 дней SMA).В общем, всякий раз, когда цена выше медленной МА, я хочу быть длинной, за исключением того, что если цена более чем на 5% выше медленной МА, и движется ниже быстрой МА, я буду продавать, и покупать снова, когда / еслицена пересекает более высокую ма.

Позиция и сигналы для медленной МА тривиальны:

df["slowma"] = df["AdjClose"].rolling(60).mean()
df['positions'] = 0.0
df['positions'] = np.where(df["AdjClose"] > df['slowma'], 1.0, 0.0)
df['signal'] = df['positions'].diff()

Пересечение быстрой МА, при условии, что цена выше 5%,это немного сложнее, так как меня интересует генерация сигнала на покупку только в том случае, если раньше у меня был сигнал на продажу.

df["fastma"] = df["AdjClose"].rolling(10).mean()
df['positions_fast'] = 0.0
df['positions_fast'] = np.where(df["AdjClose"] > df['fastma'], 1.0, 0.0)

Добавление логического «и» и проверка, выше ли цена 5%.больше чем медленная МА не помогает мне, так как эта проверка должна быть сделана только тогда, когда происходит сигнал быстрой МА.Любая помощь, которая может направить меня в правильном направлении, будет принята с благодарностью.

Редактировать: Вот некоторые тестовые данные и изображение, которое, надеюсь, несколько описывает то, чего я пытаюсь достичь.Пожалуйста, не обращайте внимания на тот факт, что медленная и быстрая МА не являются средними значениями вообще.Я набрал его вручную.

Graph Идея состоит в том, что мы получаем сигнал на продажу только во второй раз, когда цена пересекает быструю ма.

Для этогоДанные я изменил порог 5% до 50%.data

Вот данные в формате Python:

close = [1,5,8,12,19,24,26,25,20,25,30,35,40,35,30,25,40,45,50,55,50,40,30,20]
slow_ma = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33]
fast_ma = [5, 6, 8, 9, 12, 15, 19, 24, 22, 24, 27, 31, 35, 39, 34, 30, 33, 37, 41, 46, 50, 50, 46, 40]
...