Экспоненциальная скользящая средняя (EMA) — это популярный индикатор технического анализа, используемый трейдерами для определения тенденций и потенциальных точек входа или выхода на рынке.

EMA похожа на простую скользящую среднюю (SMA) тем, что рассчитывает среднюю цену ценной бумаги за определенный период времени. Однако EMA придает больший вес более свежим ценам, что делает ее более чувствительной к изменениям ценового движения.

df['EMA1']=((ta.trend.ema_indicator(close=df['close'], window=5,fillna= True)) )
df['EMA2']=((ta.trend.ema_indicator(close=df['close'], window=9,fillna= True)) )

Стратегия EMA предполагает использование двух или более EMA с разными периодами времени. Как правило, трейдеры используют краткосрочную EMA (например, 5 или 9 периодов) и долгосрочную EMA (например, 9 или 21 период), чтобы определить потенциальные развороты тренда или подтвердить существующие тренды.

signals.append(0)
for i in range(1, len(df)-1):    
    # Your trading strategy goes here
    if df.iloc[i]['EMA1'] > df.iloc[i]['EMA2'] :
        signals.append(1)
    elif df.iloc[i]['EMA1'] < df.iloc[i]['EMA2']  :
        signals.append(-1)
    else :
        signals.append(0)     
signals.append(0)
# Add the signals list to the dataframe as a new column
df["signal"] = signals

Приведенный выше код демонстрирует, как реализовать стратегию EMA в Python с использованием библиотеки TA-Lib. Код рассчитывает две EMA с периодами 5 и 9 дней соответственно, а затем генерирует сигналы на покупку/продажу на основе пересечения двух линий.

Когда краткосрочная EMA пересекает долгосрочную EMA, генерируется сигнал на покупку, а когда краткосрочная EMA пересекается ниже долгосрочной EMA, генерируется сигнал на продажу.

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

Давайте проведем бэктест с ETHUSDT сейчас на 1-часовом таймфрейме:

Затем я установил начальный капитал в 1000 долларов. Затем я провел бэктест и распечатал окончательную стоимость портфеля.

df["signal"] = signals
print(signals)
investment = 1000
current_investment = 1000
invested_amount = 0
fees = 0
profit = 0
is_invested = False
best_trade = -99999999
worst_trade = 99999999
largest_loss = 0
largest_gain = 0
total_trades = 0
for i in range(500, len(df)):
    signal = df.iloc[i]['signal'] 
    close = df.iloc[i]['close']

    if signal == 1 and not is_invested:
        Entrypoint = close
        print(signal)
        print(close)
        quantity = (current_investment / close)
        print(current_investment)       
        print(quantity)
        invested_amount = quantity * close
        is_invested = True
    elif signal == -1 and is_invested:
        print(signal)
        print('close', close)
        profit = quantity * (close - Entrypoint) - 2
        print('profit' ,profit)
        current_investment += profit
        invested_amount = 0
        total_trades += 1
        is_invested = False
        if profit > largest_gain:
            largest_gain = profit
        if profit < largest_loss:
            largest_loss = profit
        if profit > best_trade:
            best_trade = profit
        if profit < worst_trade:
            worst_trade = profit
    else: 
        pass
        
final_profit = current_investment - investment
print("Final Profit: ", final_profit)
print("Best Trade: ", best_trade)
print("Worst Trade: ", worst_trade)
print("Largest Loss: ", largest_loss)
print("Largest Gain: ", largest_gain)
print("Total Trades: ", total_trades)

После проведения ретроспективного тестирования на исторических данных я получил окончательную стоимость портфеля в размере 26 163 долларов США. Этот результат указывает на то, что стратегия была прибыльной, и ее потенциально можно использовать для получения положительной прибыли в будущем.

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

В заключение, стратегия EMA является популярным и эффективным инструментом для определения тенденций и потенциальных точек входа или выхода на рынке. Используя несколько EMA с разными периодами времени, трейдеры могут лучше понять динамику рынка и принимать более обоснованные торговые решения.

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