EIS — Ипульсная Система Элдера была представлена и объяснена в книгах А. Элдера. Система показывает импульс движения цены и может принимать три цветовых значения:
- красный — разрешен шорт, запрещен лонг;
- синий — разрешены оба направления;
- зеленый — запрещен шорт, разрешен лонг.
Ниже подробные пояснения и примеры кода.
Система стремится упростить торговлю в канале на коротких промежутках времени с удержанием сделки 1-5 дней. Сигналы меняются достаточно быстро и в среднесроке будут давать множество ложных срабатываний.
Из чего состоит
В основе системы лежат:
- EMA(13) — экспоненциальная скользящая средняя за 13 дней от цены закрытия.
- MACD с параметрами 12, 26 и 9, то есть EMA(12) от цены закрытия, EMA(26) от цены закрытия и сигнальная EMA(9) от разницы длинной и короткой EMA.
Сигналы:
- Красный — EMA(13) изменяется вниз (текущее значение ниже предыдущего) и гистограмма MACD изменяется вниз (текущее значение ниже предыдущего).
- Синий — EMA(13) и гистограмма MACD изменяются в разных направлениях.
- Зеленый — EMA(13) изменяется вверх (текущее значение выше предыдущего) и гистограмма MACD изменяется вверх (текущее значение выше предыдущего).
Как работает
Система используется как фильтр для открытия позиций. Автор раскрашивает бары или свечи графика в соответствии с цветом сигнала. Пример ниже показывает, что на краю канала или при входе в канал синий бар может показывать верную точку входа (синие стрелки). В случае, когда синяя не переходит в сигнал направления сделки (красный — шорт, зеленый — лонг) или даже принимает противоположный цвет, то, возможно, стоит закрыть позицию.

Как реализовать на Python
Для этого нам понадобится пакет talib, который можно установить командой ниже, предварительно установив библиотеку TA-Lib:
1 |
pip install talib |
Пример кода в блокноте IPython (Jupyter). Подключение к базе данных, подсказки, где взять эту самую базу данных и получение истории цен подробнее описаны здесь. Полная версия блокнота доступна в репозитории. Ниже описана обработка истории цены и получение массива со значением EIS: -1 — красный; 0 — синий; 1 — зеленый.
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 |
# get price history p = prices(['EA'], date(2016, 11, 15), 200) # prepare dict with necessary data arr = { 'dt': np.array([x[1] for x in p]), 'close': np.array([x[5] for x in p]) } arr['ema13'] = talib.EMA(arr['close'], 13) arr['macd'], arr['signal'], arr['macdhist'] = talib.MACD(arr['close'], 12, 26, 9) # accumulate difference from previous day change_fields = ['ema13', 'macdhist'] for f in change_fields: arr['change_' + f] = np.insert(arr[f][1:] - arr[f][:-1], 0, 0) # change nan to 0 for comparison arr['change_ema13'][np.isnan(arr['change_ema13'])] = 0 arr['change_macdhist'][np.isnan(arr['change_macdhist'])] = 0 # get eis arr['eis'] = np.where( (arr['change_ema13'] > 0) & (arr['change_macdhist'] > 0), 1, np.where( (arr['change_ema13'] < 0) & (arr['change_macdhist'] < 0), -1, 0)) # print dict with eis value by date dict(zip(arr['dt'], arr['eis'])) |
Как реализовать на C
Предварительно установим библиотеку TA-Lib. Теперь задача решается двумя вызовами нужных индикаторов, EMA(13) и MACD(12, 26, 9), и анализом полученных массивов.
Пример кода на C. На вход передаем указатели на массив EMA(13) и гистограммы MACD(12, 26, 9).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
/** Generate EIS signals */ void eis(double *ema, double *macdhist, unsigned length, double **out) { double *ptr_prev_ema = &ema[0]; double *ptr_prev_hist = &macdhist[0]; int i = 1; // Start from 1, except 0 for (double *ptr = *out+1; ptr != *out+length; ++ptr, ++i) { if (*ptr_prev_ema > ema[i] && *ptr_prev_hist > macdhist[i]) { *ptr = -1; } else if (*ptr_prev_ema < ema[i] && *ptr_prev_hist < macdhist[i]) { *ptr = 1; } else { *ptr = 0; } ptr_prev_ema = &ema[i]; ptr_prev_hist = &macdhist[i]; } } |
Репозиторий
Весь код доступен в репозитории. Вы можете использовать его на свой страх и риск.
Напишите в комментариях, может ли пригодиться EIS в алготорговле?