Stratégie de position de tendance longue et courte cross-market au jour le jour basée sur l'indicateur EMA

EMA MA
Date de création: 2024-11-12 10:49:00 Dernière modification: 2024-11-12 10:49:00
Copier: 2 Nombre de clics: 483
1
Suivre
1617
Abonnés

Stratégie de position de tendance longue et courte cross-market au jour le jour basée sur l’indicateur EMA

Cette stratégie est une stratégie de détention de positions de nuit sur plusieurs marchés, basée sur des indicateurs techniques EMA, qui vise à capturer des opportunités de négociation avant et après la clôture du marché. La stratégie permet de négocier intelligemment dans différents environnements de marché grâce à un contrôle de temps précis et un filtrage des indicateurs techniques.

Aperçu de la stratégie

La stratégie consiste principalement à entrer à une heure précise avant la clôture du marché et à sortir à une heure précise après l’ouverture du marché le lendemain. En combinaison avec l’indicateur EMA comme confirmation de tendance, la stratégie recherche des opportunités de négociation sur plusieurs marchés mondiaux. La stratégie intègre également des fonctions de négociation automatisées, permettant des opérations sans surveillance.

Principe de stratégie

  1. Contrôle du temps: en fonction des heures de négociation des différents marchés, entrée à heure fixe avant la clôture et sortie à heure fixe après l’ouverture
  2. Filtrage EMA: les signaux d’entrée sont validés par des indicateurs EMA optionnels
  3. Options de marché: Aide à l’adaptation des heures de négociation sur les trois principaux marchés américain, asiatique et européen
  4. La protection du week-end: la clôture obligatoire avant le vendredi pour éviter les risques du week-end

Avantages stratégiques

  1. Adaptabilité multi-marché: les heures de négociation peuvent être ajustées de manière flexible en fonction des caractéristiques des différents marchés
  2. Une meilleure maîtrise des risques: un mécanisme de protection contre les soldes de week-end
  3. Automatisation élevée: prise en charge de la mise en correspondance automatique des interfaces de transaction
  4. Flexibilité des paramètres: le temps de négociation et les paramètres des indicateurs techniques peuvent être personnalisés
  5. Coût de transaction pris en compte: y compris les frais de traitement et la configuration des points de glissement

Risque stratégique

  1. Risque de fluctuation du marché: les placements du jour au lendemain risquent de faire faillite
  2. Dépendance du temps: l’efficacité de la stratégie est influencée par le choix de la période du marché
  3. Limitations des indicateurs techniques: un seul indicateur EMA pourrait être en retard Recommandation: définir des limites de stop-loss et ajouter plus de vérifications des indicateurs techniques

Orientation de l’optimisation de la stratégie

  1. Ajout d’une plus grande palette d’indicateurs techniques
  2. Introduction d’un mécanisme de filtrage du taux de fluctuation
  3. Optimisation de la sélection des heures d’entrée et de sortie
  4. Ajout de la fonctionnalité d’ajustement des paramètres d’adaptation
  5. Module de contrôle des risques renforcé

Résumer

La stratégie permet de réaliser un système de trading fiable de nuit grâce à un contrôle de temps précis et un filtrage des indicateurs techniques. La stratégie a été conçue en tenant compte des besoins de la guerre, y compris les éléments d’adaptation aux marchés multiples, de contrôle des risques et d’automatisation des transactions.

Code source de la stratégie
/*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)