Торговая стратегия Double EMA Golden Cross


Дата создания: 2023-12-07 15:08:57 Последнее изменение: 2023-12-07 15:08:57
Копировать: 0 Количество просмотров: 701
1
Подписаться
1619
Подписчики

Торговая стратегия Double EMA Golden Cross

Обзор

Эта стратегия сочетает в себе двойной золотой крест EMA, стандартизированный фильтр шума ATR и индикатор тренда ADX, чтобы предоставить трейдерам более надежный сигнал покупки. Эта стратегия объединяет несколько индикаторов, которые фильтруют ложные сигналы и идентифицируют более надежные торговые возможности.

Стратегический принцип

Эта стратегия использует 8-циклические и 20-циклические ЭМА для построения двойной золотой кросс-системы ЭМА. Покупательный сигнал генерируется, когда короткие ЭМА пересекают длинные ЭМА.

Кроме того, в стратегии есть несколько вспомогательных параметров для фильтрации:

  1. 14 циклов ATR, после стандартизированной обработки, фильтруют чрезмерные колебания цен на рынке.

  2. 14 циклов ADX, используется для определения силы тренда. Только в сильных тенденциях рассматриваются торговые сигналы.

  3. 14 циклов SMA, отфильтрованные в периоды с меньшим количеством сделок.

  4. 414 Циклический индикатор супер тренда, который определяет направление рынка.

В конечном итоге EMA-золотой кросс запускает сигнал покупки только после удовлетворения условий направления тренда, стандартизации ATR, ADX и объема продаж.

Стратегические преимущества

  1. Многопоказательная комбинация, высокая надежность

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

  1. Параметры могут быть изменены по размеру

Параметры ATR, такие как стандартизированная убыль, убыль ADX и период удержания позиции могут быть оптимизированы в соответствии с реальными обстоятельствами, и стратегия имеет большую гибкость.

  1. Различают свободные рынки

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

Стратегический риск

  1. Оптимизация параметров сложна

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

  1. Ошибки в индикаторе могут спровоцировать риск

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

  1. Низкая частота торгов

В зависимости от множества индикаторов и колебаний, частота стратегических сделок будет относительно низкой, возможно, в течение длительного времени без торгов.

Направление оптимизации стратегии

  1. Оптимизация параметров

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

  1. Добавление машинного обучения

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

  1. Учитывайте другие рыночные факторы

Вместе с другими показателями, определяющими структуру рынка, настроения и другие факторы, это позволит нам создать разнообразные стратегии.

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2023-11-29 00:00:00
end: 2023-12-06 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//Description:
//This strategy is a refactored version of an EMA cross strategy with a normalized ATR filter and ADX control. 
//It aims to provide traders with signals for long positions based on market conditions defined by various indicators.

//How it Works:
//1. EMA: Uses short (8 periods) and long (20 periods) EMAs to identify crossovers.
//2. ATR: Uses a 14-period ATR, normalized to its 20-period historical range, to filter out noise.
//3. ADX: Uses a 14-period RMA to identify strong trends.
//4. Volume: Filters trades based on a 14-period SMA of volume.
//5. Super Trend: Uses a Super Trend indicator to identify the market direction.

//How to Use:
//- Buy Signal: Generated when EMA short crosses above EMA long, and other conditions like ATR and market direction are met.
//- Sell Signal: Generated based on EMA crossunder and high ADX value.

//Originality and Usefulness:
//This script combines EMA, ATR, ADX, and Super Trend indicators to filter out false signals and identify more reliable trading opportunities. 
//USD Strength is not working, just simulated it as PSEUDO CODE: [close>EMA(50)]

//Strategy Results:
//- Account Size: $1000
//- Commission: Not considered
//- Slippage: Not considered
//- Risk: Less than 5% per trade
//- Dataset: Aim for more than 100 trades for sufficient sample size

//Note: This script should be used for educational purposes and should not be considered as financial advice.

//Chart:
//- The script's output is plotted as Buy and Sell signals on the chart.
//- No other scripts are included for clarity.
//- Have tested with 30mins period
//- You are encouraged to play with parameters, let me know if you 

//@version=5
strategy("Advanced EMA Cross with Normalized ATR Filter, Controlling ADX", shorttitle="ALP V5", overlay=true )

// Initialize variables
var bool hasBought = false
var int barCountSinceBuy = 0

// Define EMA periods
emaShort = ta.ema(close, 8)
emaLong = ta.ema(close, 20)

// Define ATR parameters
atrLength = 14
atrValue = ta.atr(atrLength)
maxHistoricalATR = ta.highest(atrValue, 20)
minHistoricalATR = ta.lowest(atrValue, 20)
normalizedATR = (atrValue - minHistoricalATR) / (maxHistoricalATR - minHistoricalATR)

// Define ADX parameters
adxValue = ta.rma(close, 14)
adxHighLevel = 30
isADXHigh = adxValue > adxHighLevel

// Initialize risk management variables
var float stopLossPercent = na
var float takeProfitPercent = na

// Calculate USD strength
// That's not working as usd strenght, since I couldn't manage to get usd strength 
//I've just simulated it as if the current close price is above 50 days average (it's likely a bullish trend), usd is strong (usd_strenth variable is positive)
usd_strength = close / ta.ema(close, 50) - 1

// Adjust risk parameters based on USD strength
if (usd_strength > 0)
    stopLossPercent := 3
    takeProfitPercent := 6
else
    stopLossPercent := 4
    takeProfitPercent := 8

// Initialize position variable
var float positionPrice = na

// Volume filter
minVolume = ta.sma(volume, 14) * 1.5
isVolumeHigh = volume > minVolume

// Market direction using Super Trend indicator
[supertrendValue, supertrendDirection] = ta.supertrend(4, 14)
bool isBullMarket = supertrendDirection < 0
bool isBearMarket = supertrendDirection > 0

// Buy conditions for Bull and Bear markets
buyConditionBull = isBullMarket and ta.crossover(emaShort, emaLong) and normalizedATR > 0.2
buyConditionBear = isBearMarket and ta.crossover(emaShort, emaLong) and normalizedATR > 0.5
buyCondition = buyConditionBull or buyConditionBear

// Sell conditions for Bull and Bear markets
sellConditionBull = isBullMarket and (ta.crossunder(emaShort, emaLong) or isADXHigh)
sellConditionBear = isBearMarket and (ta.crossunder(emaShort, emaLong) or isADXHigh)
sellCondition = sellConditionBull or sellConditionBear

// Final Buy and Sell conditions
if (buyCondition)
    strategy.entry("Buy", strategy.long)
    positionPrice := close
    hasBought := true
    barCountSinceBuy := 0

if (hasBought)
    barCountSinceBuy := barCountSinceBuy + 1

// Stop-loss and take-profit levels
longStopLoss = positionPrice * (1 - stopLossPercent / 100)
longTakeProfit = positionPrice * (1 + takeProfitPercent / 100)

// Final Sell condition
finalSellCondition = sellCondition and hasBought and barCountSinceBuy >= 3 and isVolumeHigh

if (finalSellCondition)
    strategy.close("Buy")
    positionPrice := na
    hasBought := false
    barCountSinceBuy := 0

// Implement stop-loss and take-profit
strategy.exit("Stop Loss", "Buy", stop=longStopLoss)
strategy.exit("Take Profit", "Buy", limit=longTakeProfit)

// Plot signals
plotshape(series=buyCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(series=finalSellCondition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")