Zweigleisige EMA-Goldene Kreuz-Handelsstrategie

Schriftsteller:ChaoZhang, Datum: 2023-12-07 15:08:57
Tags:

img

Übersicht

Diese Strategie kombiniert doppelte EMA-Goldkreuze, den normalisierten ATR-Rauschfilter und den ADX-Trendindikator, um den Händlern zuverlässigere Kaufsignale zu liefern.

Strategieprinzip

Die Strategie verwendet 8-Perioden- und 20-Perioden-EMA, um ein doppeltes EMA-Golden-Cross-System aufzubauen.

Darüber hinaus wurden in der Strategie mehrere Hilfsindikatoren für die Filterung festgelegt:

  1. 14 Perioden ATR, normalisiert, um geringfügige Preisschwankungen auf dem Markt auszuschließen.

  2. Der ADX ist für die Ermittlung der Stärke der Trends zu verwenden.

  3. 14-Perioden-SMA des Volumens, um Zeitpunkte mit geringem Handelsvolumen auszufiltern.

  4. 4/14-Zeitrahmen Super Trend Indikator zur Beurteilung der bullischen oder bärischen Marktrichtung.

Erst wenn die Trendrichtung, der normalisierte ATR-Wert, der ADX-Level und die Volumenbedingungen erfüllt sind, wird das EMA-Goldkreuze schließlich das Kaufsignal auslösen.

Strategische Vorteile

  1. Zuverlässigkeit aus der Kombination mehrerer Indikatoren

    Durch die Integration von Indikatoren wie EMA, ATR, ADX und Super Trend entsteht ein starkes Signalfiltersystem mit höherer Zuverlässigkeit.

  2. Mehr Flexibilität bei Parameter-Tuning

    Die Schwellenwerte der normalisierten ATR, ADX, Haltedauer usw. können optimiert werden, eine höhere Flexibilität.

  3. Unterscheidung zwischen Bullen- und Bärenmärkten

    Identifizieren Sie Bullen- und Bärenmärkte mit Super Trend, vermeiden Sie verpasste Chancen.

Strategische Risiken

  1. Schwierigkeiten bei der Optimierung von Parametern

    Zu viele Parameter, Schwierigkeiten, die optimale Kombination zu finden.

  2. Risiko eines Ausfalls des Indikators

    Es besteht immer noch die Gefahr falscher Signale aufgrund der Verzögerung der Indikatoren.

  3. Niedrige Handelshäufigkeit

    Die Häufigkeit ist aufgrund mehrerer Filter niedrig, eine lange Dauer ohne Handel ist möglich.

Optimierungsrichtlinien

  1. Optimierung der Parameterkombination

    Die Suche nach der optimalen Kombination erfordert eine große Menge an Backtesting-Daten.

  2. Maschinelles Lernen einbeziehen

    Verwenden Sie ML-Algorithmen, um automatisch die Parameter im Laufe der Zeit zu optimieren.

  3. Betrachten Sie weitere Marktfaktoren

    Die Kombination von Indikatoren für die Marktstruktur, Emotionen usw. verbessert die Vielfalt.

Schlussfolgerung

Diese Strategie berücksichtigt umfassend Trend, Volatilität und Volumenpreisfaktoren. Durch Multi-Indikator-Filterung und Parameter-Tuning bildet sie ein zuverlässiges Handelssystem. Die Zuverlässigkeit ist hoch und kann durch Optimierung weiter verbessert werden.


/*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")


Mehr