Les ressources ont été chargées... Je charge...

Stratégie de position transfrontalière à la veille avec filtre EMA

Auteur:ChaoZhang est là., Date: 2024-11-12 à 10h49
Les étiquettes:Le taux d'intérêt- Je vous en prie.

img

Cette stratégie est une stratégie de position transfrontalière basée sur l'indicateur technique de l'EMA, conçue pour saisir les opportunités de négociation avant la clôture du marché et après l'ouverture du marché.

Vue d'ensemble de la stratégie

La stratégie gagne principalement des rendements en entrant à des moments spécifiques avant la clôture du marché et en sortant à des moments spécifiques après l'ouverture du marché le lendemain. Combinée avec les indicateurs EMA pour la confirmation de la tendance, elle recherche des opportunités de trading sur plusieurs marchés mondiaux (États-Unis, Asie, Europe).

Principe de stratégie

  1. Contrôle du temps: Entrée à des heures fixes avant la clôture et sortie à des heures fixes après l'ouverture en fonction des différentes heures de négociation du marché
  2. Filtrage EMA: utiliser des indicateurs EMA facultatifs pour valider les signaux d'entrée
  3. Sélection du marché: soutien à l'adaptation des horaires de négociation aux marchés américains, asiatiques et européens
  4. Protection du week-end: forcer la fermeture de la position avant la fermeture du vendredi pour éviter les risques de détention du week-end

Les avantages de la stratégie

  1. Adaptabilité à plusieurs marchés: ajustement flexible des délais de négociation en fonction des différentes caractéristiques du marché
  2. Contrôle complet des risques: comprend le mécanisme de protection de la fermeture des positions le week-end
  3. Niveau d'automatisation élevé: Prend en charge l'intégration d'interfaces de négociation automatisées
  4. Paramètres flexibles: temps de négociation et paramètres d'indicateur technique personnalisables
  5. Compte tenu du coût de négociation: Comprend les réglages de commission et de dérapage

Risques stratégiques

  1. Risque de volatilité du marché: les positions au jour le jour peuvent faire face à un risque de déficit
  2. Dépendance temporelle: l'efficacité de la stratégie affectée par la sélection de la période de marché
  3. Limites des indicateurs techniques: l'indicateur EMA unique peut présenter un retard Suggestions: définir des limites de stop-loss, ajouter plus d'indicateurs techniques pour la validation

Directions d'optimisation de la stratégie

  1. Ajouter plus de combinaisons d'indicateurs techniques
  2. Mettre en place un mécanisme de filtrage de la volatilité
  3. Optimiser la sélection des heures d'entrée et de sortie
  4. Ajouter une fonctionnalité de réglage de paramètres adaptatif
  5. Améliorer le module de contrôle des risques

Résumé

Cette stratégie permet d'obtenir un système de négociation fiable du jour au lendemain grâce à un contrôle précis du temps et à un filtrage des indicateurs techniques.


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


Relationnée

Plus de