Cette stratégie est une stratégie de négociation intégrée pour Bitcoin et d’autres crypto-monnaies sur une période de 15 minutes. Elle intègre plusieurs indicateurs pour générer des signaux d’achat et de vente, y compris une moyenne mobile à triple indice, une amplitude de fluctuation moyenne réelle et un graphique de fil d’équilibre, avec des mécanismes de gestion des risques tels que des arrêts et des pertes.
La stratégie utilise plusieurs indicateurs:
Moyenne mobile à triple indice ((TEMA): calculée à partir de trois TEMA de différentes longueurs et sources, basés respectivement sur les hauts, les bas et les prix de clôture.
Variabilité réelle moyenne ((ATR): le taux de volatilité du marché est calculé en utilisant l’ATR personnalisé de l’EMA.
Indicateur de surtrend: déterminer la direction de la tendance en fonction de l’ATR et du multiplicateur.
Moyenne mobile simple ((SMA): calcul de la SMA pour le TEMA à courte période avec une valeur de lissage.
Prix de clôture de la ligne d’équilibre: pour une confirmation supplémentaire de la tendance.
Un signal d’achat est généré lorsque le TEMA court est supérieur à deux TEMA longs, que l’indicateur de tendance supérieure est positif, que le TEMA court est supérieur à sa SMA et que la clôture de la ligne d’équilibre est supérieure à la veille.
Un signal de vente est généré lorsque le TEMA court est inférieur à deux TEMA longs, que l’indicateur de tendance est en baisse, que le TEMA court est inférieur à sa SMA et que la clôture de la ligne d’équilibre est inférieure à la veille.
Le stop-loss est fixé à 1% et 3% du prix d’entrée respectivement.
La combinaison de plusieurs facteurs tels que la tendance, la volatilité et la forme peut améliorer l’exactitude des jugements et éviter les faux signaux.
Un arrêt de perte raisonnable peut bloquer les bénéfices et limiter efficacement les pertes individuelles.
Les paramètres de l’indicateur peuvent être ajustés de manière flexible pour s’adapter aux changements du marché et trouver la meilleure combinaison.
L’ajout d’un facteur de frais de transaction permet de rendre les résultats des retours plus proches de la performance réelle des transactions.
Une combinaison excessive d’indicateurs peut également entraîner des erreurs de jugement et nécessite une évaluation minutieuse de l’efficacité des indicateurs.
Les opérations de 15 minutes sont plus sujettes à des incidents soudains que les opérations de longues périodes, ce qui entraîne un risque accru d’accidents occasionnels.
La stratégie doit encore être validée sur des cycles plus longs et sur plusieurs marchés pour assurer sa stabilité.
Les combinaisons de plusieurs indicateurs apportent une grande quantité de paramètres et l’optimisation de toutes les combinaisons de paramètres nécessite un temps plus long.
Les résultats des tests de réaction sont évalués en fonction de l’amélioration effective de chaque indicateur, en évitant l’utilisation d’indicateurs redondants.
Les résultats de l’optimisation des paramètres sont testés dans de nombreux autres marchés, afin d’assurer la stabilité et la fiabilité.
Le risque peut être maîtrisé par des moyens tels que le stop mobile ou le stop fixe.
Le coût du dérapage rend la rétro-évaluation plus réaliste.
Cette stratégie, qui intègre plusieurs indicateurs et mécanismes de contrôle des risques, est conçue pour les transactions sur un cycle de 15 minutes. Il y a encore beaucoup de place pour l’optimisation, et il faut un retour en profondeur pour évaluer l’effet des indicateurs, des tests de stabilité du marché étendus, ainsi que l’ajout de plus de considérations de base pour trouver la combinaison optimale de paramètres dans une stratégie multifacteur.
/*backtest
start: 2023-08-25 00:00:00
end: 2023-09-09 00:00:00
period: 10m
basePeriod: 1m
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/
// © deperp
//@version=5
strategy('3kilos', shorttitle='3kilos BTC 15m', overlay=true, initial_capital=100000, max_bars_back=5000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.07, pyramiding=0)
short = input.int(50, minval=1)
srcShort = input(high, title='TEMA short')
long = input.int(100, minval=1)
srcLong = input(low, title='TEMA long 2')
long2 = input.int(350, minval=1)
srcLong2 = input(close, title='TEMA long 3')
atrLength = input.int(550, title='ATR Length', minval=1)
mult = input.float(3, title="Multiplier", minval=0.5, step=1)
smaPeriod = input.int(100, title="SMA Period", minval=1)
takeProfitPercent = input.float(1, title="Take Profit (%)", minval=0.1) / 100
stopLossPercent = input.float(3, title="Stop Loss (%)", minval=0.1) / 100
tema(src, length) =>
ema1 = ta.ema(src, length)
ema2 = ta.ema(ema1, length)
ema3 = ta.ema(ema2, length)
3 * (ema1 - ema2) + ema3
tema1 = tema(srcShort, short)
plot(tema1, color=color.new(color.red, 0), linewidth=2)
tema2 = tema(srcLong, long)
plot(tema2, color=color.new(color.blue, 0), linewidth=2)
tema3 = tema(srcLong2, long2)
plot(tema3, color=color.new(color.green, 0), linewidth=2)
// Custom ATR calculation with EMA smoothing
atr_ema(src, length) =>
trueRange = math.max(math.max(high - low, math.abs(high - close[1])), math.abs(low - close[1]))
emaTrueRange = ta.ema(trueRange, length)
emaTrueRange
// Calculate ATR with EMA smoothing
atr = atr_ema(close, atrLength)
// Calculate Supertrend
var float up = na
var float dn = na
var bool uptrend = na
up := na(up[1]) ? hl2 - (mult * atr) : uptrend[1] ? math.max(hl2 - (mult * atr), up[1]) : hl2 - (mult * atr)
dn := na(dn[1]) ? hl2 + (mult * atr) : uptrend[1] ? hl2 + (mult * atr) : math.min(hl2 + (mult * atr), dn[1])
uptrend := na(uptrend[1]) ? true : close[1] > dn[1] ? true : close[1] < up[1] ? false : uptrend[1]
// Calculate SMA
sma = ta.sma(tema1, smaPeriod)
// Heikin-Ashi Close
haTicker = ticker.heikinashi(syminfo.tickerid)
haClose = request.security(haTicker, timeframe.period, close)
// Trend determination using Heikin-Ashi Close
longC = tema1 > tema2 and tema1 > tema3 and uptrend and tema1 > sma and haClose > haClose[1]
shortC = tema1 < tema2 and tema1 < tema3 and not uptrend and tema1 < sma and haClose < haClose[1]
alertlong = longC and not longC[1]
alertshort = shortC and not shortC[1]
useDateFilter = input.bool(true, title="Begin Backtest at Start Date",
group="Backtest Time Period")
backtestStartDate = input(timestamp("1 Jan 2023"),
title="Start Date", group="Backtest Time Period",
tooltip="This start date is in the time zone of the exchange " +
"where the chart's instrument trades. It doesn't use the time " +
"zone of the chart or of your computer.")
inTradeWindow = true
stopLossLevelLong = close - atr * mult
stopLossLevelShort = close + atr * mult
longTakeProfitLevel = close * (1 + takeProfitPercent)
longStopLossLevel = close * (1 - stopLossPercent)
shortTakeProfitLevel = close * (1 - takeProfitPercent)
shortStopLossLevel = close * (1 + stopLossPercent)
if inTradeWindow and longC
strategy.entry('Long', strategy.long, comment='Long')
strategy.exit("TP Long", "Long", limit=longTakeProfitLevel, stop=longStopLossLevel, comment="TP/SL Long")
if inTradeWindow and shortC
strategy.entry('Short', strategy.short, comment='Short')
strategy.exit("TP Short", "Short", limit=shortTakeProfitLevel, stop=shortStopLossLevel, comment="TP/SL Short")
// Alerts
alertcondition(longC, title='Long', message=' Buy Signal ')
alertcondition(shortC, title='Short', message=' Sell Signal ')