Стратегия перекрестной торговли EMA

Автор:Чао Чжан, Дата: 2024-02-22 17:48:09
Тэги:

img

Обзор

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

Логика стратегии

Ядром этой стратегии является вычисление двух линий EMA с разными периодами, включая более быструю EMA с периодом по умолчанию 9 и более медленную EMA с периодом по умолчанию 20. Код вычисляет эти две линии, вызвав встроенную функцию ema в Pine Script. Затем он генерирует торговые сигналы, обнаруживая, пересекаются ли две линии EMA. В частности, если более быстрая EMA пересекает более медленную EMA, запускается сигнал покупки. Если более быстрая EMA пересекается ниже более медленной EMA, запускается сигнал продажи.

Кризисные ситуации обнаруживаются с помощью встроенных функций кроссовера и кроссондера в Pine Script. Функция кроссовера проверяет, пересекает ли более быстрая EMA выше более медленной EMA и возвращает булевое значение. Функция кроссовера проверяет, пересекает ли более быстрая EMA ниже более медленной EMA и возвращает булевое значение. На основе возвращаемых значений этих двух функций код отправляет соответствующие ордера на покупку или продажу.

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

Анализ преимуществ

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

Анализ рисков

Основные риски, с которыми сталкивается эта стратегия, - это сделки с випсой и изменение тренда. Линии EMA подвержены краткосрочным колебаниям рынка, которые могут генерировать ложные сигналы и вызывать ненужные сделки, увеличивая частоту торговли и затраты. С другой стороны, когда вызываются перекрестные сигналы, тенденция может приближаться к своей точке переворота, что делает сделки более рискованными. Несоответствующие параметры также могут повлиять на эффективность стратегии.

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

Возможности оптимизации

Эта стратегия может быть улучшена в следующих аспектах:

  1. Оптимизировать периоды EMA для поиска лучших наборов параметров
  2. Добавьте такие индикаторы, как MACD, RSI в качестве фильтров для уменьшения ложных сигналов
  3. Включить показатели тренда, чтобы избежать переворота тренда
  4. Выбирать акции на основе фундаментальных показателей
  5. Настройка размеров позиций, установка остановок на основе ATR

Заключение

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


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// This strategy has been created for illustration purposes only and should not be relied upon as a basis for buying, selling, or holding any asset or security.
// © kirilov

//@version=4
strategy(
     "EMA Cross Strategy",
     overlay=true,
     calc_on_every_tick=true,
     currency=currency.USD
     )

// INPUT:

// Options to enter fast and slow Exponential Moving Average (EMA) values
emaFast = input(title="Fast EMA", type=input.integer, defval=9, minval=1, maxval=9999)
emaSlow = input(title="Slow EMA", type=input.integer, defval=20, minval=1, maxval=9999)

// Option to select trade directions
tradeDirection = input(title="Trade Direction", options=["Long", "Short", "Both"], defval="Both")

// Options that configure the backtest date range
startDate = input(title="Start Date", type=input.time, defval=timestamp("01 Jan 1970 00:00"))
endDate = input(title="End Date", type=input.time, defval=timestamp("31 Dec 2170 23:59"))


// CALCULATIONS:

// Use the built-in function to calculate two EMA lines
fastEMA = ema(close, emaFast)
slowEMA = ema(close, emaSlow)


// PLOT:

// Draw the EMA lines on the chart
plot(series=fastEMA, color=color.black, linewidth=2)
plot(series=slowEMA, color=color.red, linewidth=2)


// CONDITIONS:

// Check if the close time of the current bar falls inside the date range
inDateRange = true

// Translate input into trading conditions
longOK  = (tradeDirection == "Long") or (tradeDirection == "Both")
shortOK = (tradeDirection == "Short") or (tradeDirection == "Both")

// Decide if we should go long or short using the built-in functions
longCondition = crossover(fastEMA, slowEMA)
shortCondition = crossunder(fastEMA, slowEMA)


// ORDERS:

// Submit entry (or reverse) orders
if (longCondition and inDateRange)
    strategy.entry(id="long", long=true, when = longOK)
if (shortCondition and inDateRange)
    strategy.entry(id="short", long=false, when = shortOK)
    
// Submit exit orders in the cases where we trade only long or only short
if (strategy.position_size > 0 and shortCondition)
    strategy.exit(id="exit long", stop=close)
if (strategy.position_size < 0 and longCondition)
    strategy.exit(id="exit short", stop=close)



Больше