Marktübergreifende Long- und Short-Trend-Overnight-Positionsstrategie basierend auf dem EMA-Indikator

EMA MA
Erstellungsdatum: 2024-11-12 10:49:00 zuletzt geändert: 2024-11-12 10:49:00
Kopie: 2 Klicks: 483
1
konzentrieren Sie sich auf
1617
Anhänger

Marktübergreifende Long- und Short-Trend-Overnight-Positionsstrategie basierend auf dem EMA-Indikator

Die Strategie ist eine auf EMA-Techniken basierende Strategie zur Übernachtung zwischen den Märkten, die darauf abzielt, Handelschancen vor und nach dem Marktabschluss zu erfassen. Die Strategie ermöglicht intelligente Transaktionen in verschiedenen Marktumgebungen durch präzise Zeitkontrolle und Filterung von Techniken.

Strategieübersicht

Die Strategie profitiert hauptsächlich durch das Eintreten zu bestimmten Zeiten vor dem Ende des Marktes und das Ausscheiden zu bestimmten Zeiten nach der Eröffnung des Marktes am nächsten Tag. In Verbindung mit den EMA-Indikatoren als Trendbestätigung wird nach Handelsmöglichkeiten in mehreren globalen Märkten gesucht. Die Strategie integriert auch automatisierte Handelsfunktionen, um unbemannte Wertwacheoperationen zu realisieren.

Strategieprinzip

  1. Zeitsteuerung: Eintritt und Ausstieg vor dem Schließen und nach dem Öffnen nach den jeweiligen Handelszeiten
  2. EMA-Filterung: Eingangssignale mit einem EMA-Signal überprüfen
  3. Marktauswahl: Unterstützung für die Anpassung der Handelszeiten in den drei größten Märkten der USA, Asien und Europa
  4. Wochenendschutz: Zwingende Platzierung vor Freitag, um ein Wochenendrisiko zu vermeiden

Strategische Vorteile

  1. Multi-Markt-Anpassungsfähigkeit: Flexible Anpassung der Handelszeiten an die Merkmale der verschiedenen Märkte
  2. Risikokontrollen sind ausgebaut, einschließlich eines Wochenend-Platzschutzes.
  3. Hohe Automatisierungsstufe: Unterstützung für automatische Anschlussverbindungen
  4. Die Parameter sind flexibel anpassbar: Die Parameter für die Handelszeiten und die technischen Kennzahlen können angepasst werden
  5. Transaktionskosten berücksichtigt: Einschließlich Gebühren und Slip-Point-Einstellungen

Strategisches Risiko

  1. Marktschwankungen: Übernachtpositionen könnten zu einem Ausbruch führen
  2. Zeitabhängigkeit: Die Effektivität der Strategie wird durch die Wahl des Zeitraums des Marktes beeinflusst
  3. Einschränkungen bei den technischen Indikatoren: Ein einzelner EMA-Indikator könnte zurückbleiben Empfehlung: Setzen Sie Stop-Loss-Limits und erweitern Sie die Validierung der technischen Kennzahlen

Richtung der Strategieoptimierung

  1. Erweiterung der Portfolios technischer Indikatoren
  2. Einführung eines Fluktuationsfilters
  3. Optimierung der Einstiegs- und Ausstiegszeit
  4. Zusätzliche Anpassung der Anpassungsparameter
  5. Erweiterung des Risikokontrollmoduls

Zusammenfassen

Die Strategie realisiert ein zuverlässiges Übernachtungssystem durch präzise Zeitkontrolle und Filterung technischer Kennzahlen. Die Strategie wurde mit Blick auf die Bedürfnisse des realen Kampfes entwickelt, einschließlich der Anpassung an mehrere Märkte, Risikokontrolle und Automatisierung des Handels. Die Strategie hat einen starken praktischen Wert.

Strategiequellcode
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-11 00:00:00
period: 1d
basePeriod: 1d
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/
// © PresentTrading

// This strategy, titled "Overnight Market Entry Strategy with EMA Filter," is designed for entering long positions shortly before 
// the market closes and exiting shortly after the market opens. The strategy allows for selecting between different global market sessions (US, Asia, Europe) and 
// uses an optional EMA (Exponential Moving Average) filter to validate entry signals. The core logic is to enter trades based on conditions set for a specified period before 
// the market close and to exit trades either after a specified period following the market open or just before the weekend close. 
// Additionally, 3commas bot integration is included to automate the execution of trades. The strategy dynamically adjusts to market open and close times, ensuring trades are properly timed based on the selected market. 
// It also includes a force-close mechanism on Fridays to prevent holding positions over the weekend.

//@version=5
strategy("Overnight Positioning with EMA Confirmation - Strategy [presentTrading]", overlay=true, precision=3, commission_value=0.02, commission_type=strategy.commission.percent, slippage=1, currency=currency.USD, default_qty_type=strategy.percent_of_equity, default_qty_value=10, initial_capital=10000)

// Input parameters
entryMinutesBeforeClose = input.int(20, title="Minutes Before Close to Enter", minval=1)
exitMinutesAfterOpen = input.int(20, title="Minutes After Open to Exit", minval=1)
emaLength = input.int(100, title="EMA Length", minval=1)
emaTimeframe = input.timeframe("240", title="EMA Timeframe")
useEMA = input.bool(true, title="Use EMA Filter")

// Market Selection Input
marketSelection = input.string("US", title="Select Market", options=["US", "Asia", "Europe"])

// Timezone for each market
marketTimezone = marketSelection == "US" ? "America/New_York" :
                 marketSelection == "Asia" ? "Asia/Tokyo" :
                 "Europe/London"  // Default to London for Europe

// Market Open and Close Times for each market
var int marketOpenHour = na
var int marketOpenMinute = na
var int marketCloseHour = na
var int marketCloseMinute = na

if marketSelection == "US"
    marketOpenHour := 9
    marketOpenMinute := 30
    marketCloseHour := 16
    marketCloseMinute := 0
else if marketSelection == "Asia"
    marketOpenHour := 9
    marketOpenMinute := 0
    marketCloseHour := 15
    marketCloseMinute := 0
else if marketSelection == "Europe"
    marketOpenHour := 8
    marketOpenMinute := 0
    marketCloseHour := 16
    marketCloseMinute := 30

// 3commas Bot Settings
emailToken = input.string('', title='Email Token', group='3commas Bot Settings')
long_bot_id = input.string('', title='Long Bot ID', group='3commas Bot Settings')
usePairAdjust = input.bool(false, title='Use this pair in PERP', group='3commas Bot Settings')
selectedExchange = input.string("Binance", title="Select Exchange", group='3commas Bot Settings', options=["Binance", "OKX", "Gate.io", "Bitget"])

// Determine the trading pair based on settings
var pairString = ""
if usePairAdjust
    pairString := str.tostring(syminfo.currency) + "_" + str.tostring(syminfo.basecurrency) + (selectedExchange == "OKX" ? "-SWAP" : "") 
else
    pairString := str.tostring(syminfo.currency) + "_" + str.tostring(syminfo.basecurrency)

// Function to check if it's a trading day (excluding weekends)
isTradingDay(t) =>
    dayOfWeek = dayofweek(t, marketTimezone)
    dayOfWeek >= dayofweek.monday and dayOfWeek <= dayofweek.friday

// Function to get the timestamp for market open and close times
getMarketTimes(t) =>
    y = year(t, marketTimezone)
    m = month(t, marketTimezone)
    d = dayofmonth(t, marketTimezone)
    marketOpenTime = timestamp(marketTimezone, y, m, d, marketOpenHour, marketOpenMinute, 0)
    marketCloseTime = timestamp(marketTimezone, y, m, d, marketCloseHour, marketCloseMinute, 0)
    [marketOpenTime, marketCloseTime]

// Get the current time in the market's timezone
currentTime = time

// Calculate market times
[marketOpenTime, marketCloseTime] = getMarketTimes(currentTime)

// Calculate entry and exit times
entryTime = marketCloseTime - entryMinutesBeforeClose * 60 * 1000
exitTime = marketOpenTime + exitMinutesAfterOpen * 60 * 1000

// Get EMA data from the specified timeframe
emaValue = request.security(syminfo.tickerid, emaTimeframe, ta.ema(close, emaLength))

// Entry condition with optional EMA filter
longCondition = close > emaValue or not useEMA

// Functions to create JSON strings
getEnterJson() =>
    '{"message_type": "bot", "bot_id": "' + long_bot_id + '", "email_token": "' + emailToken + '", "delay_seconds": 0, "pair": "' + pairString + '"}'

getExitJson() =>
    '{"action": "close_at_market_price", "message_type": "bot", "bot_id": "' + long_bot_id + '", "email_token": "' + emailToken + '", "delay_seconds": 0, "pair": "' + pairString + '"}'

// Entry Signal
entrySignal = isTradingDay(currentTime) and currentTime >= entryTime and currentTime < marketCloseTime and dayofweek(currentTime, marketTimezone) != dayofweek.friday

// Exit Signal
exitSignal = isTradingDay(currentTime) and currentTime >= exitTime and currentTime < marketCloseTime

// Entry Logic
if strategy.position_size == 0 and longCondition
    strategy.entry("Long", strategy.long, alert_message=getEnterJson())

// Exit Logic
if  strategy.position_size > 0
    strategy.close("Long", alert_message=getExitJson())

// Force Close Logic on Friday before market close
isFriday = dayofweek(currentTime, marketTimezone) == dayofweek.friday
if  strategy.position_size > 0  // Close 5 minutes before market close on Friday
    strategy.close("Long", comment="Force close on Friday before market close", alert_message=getExitJson())

// Plotting entry and exit points
plotshape( strategy.position_size == 0 and longCondition, title="Entry", text="Entry", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)
plotshape( strategy.position_size > 0, title="Exit", text="Exit", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)

// Plot EMA for reference
plot(useEMA ? emaValue : na, title="EMA", color=color.blue)