Stratégie de négociation multi-facteurs Bitcoin

Auteur:ChaoZhang est là., Date: 2023-09-25 18h24:02
Les étiquettes:

Résumé

Il s'agit d'une stratégie de trading complète conçue pour le trading de Bitcoin et d'autres crypto-monnaies sur une période de 15 minutes. Elle combine plusieurs indicateurs pour générer des signaux d'achat et de vente, notamment la moyenne mobile exponentielle triple (TEMA), la moyenne vraie (ATR) et les bougies Heikin-Ashi, ainsi que des fonctionnalités de gestion des risques telles que le profit et le stop loss.

La logique de la stratégie

La stratégie utilise les indicateurs suivants:

  • Trois moyennes mobiles exponentielles (TEMA): Trois lignes TEMA de longueurs et de sources différentes, basées respectivement sur des prix élevés, bas et rapprochés.

  • La valeur de l'échange de titres est la valeur de l'échange de titres.

  • Supertrend: calculé à l'aide de l'ATR et d'un multiplicateur pour déterminer la direction de la tendance.

  • Moyenne mobile simple (SMA): appliquée sur la courte ligne TEMA pour lisser ses valeurs.

  • Heikin-Ashi Close: Utilisé pour une confirmation de tendance supplémentaire.

Le signal d'entrée longue est déclenché lorsque le TEMA court est au-dessus des deux lignes TEMA longues, Supertrend est haussier, le TEMA court est au-dessus de sa SMA et la fermeture Heikin-Ashi est supérieure à la fermeture précédente.

Le signal d'entrée courte est déclenché lorsque les conditions opposées sont remplies.

Les bénéfices et les arrêts de perte sont fixés à 1% et 3% du prix d'entrée.

Analyse des avantages

  • Plusieurs facteurs améliorent la précision La combinaison de tendance, de volatilité et d'indicateurs de tendance peut améliorer la précision et éviter de faux signaux.

  • Risque raisonnable des contrôles stop loss/take profit Les niveaux d'arrêt-perte et de prise de profit bien définis bloquent les bénéfices et limitent les pertes.

  • Grand espace d'optimisation des paramètres Les paramètres de l'indicateur peuvent être ajustés de manière flexible pour s'adapter à l'évolution des marchés.

  • Plus réaliste avec les commissions prises en compte La Commission considère que les résultats des backtests sont plus proches des performances en direct.

Analyse des risques

  • Risque d'erreurs de jugement résultant d'une optimisation excessive Un trop grand nombre d'indicateurs combinés peut également conduire à des jugements erronés.

  • Risque plus élevé avec les opérations à court terme Comparé aux périodes plus longues, 15 minutes sont plus sensibles aux événements et aux risques soudains.

  • La stabilité de la stratégie doit être renforcée Des essais plus approfondis sur une longue histoire et sur les marchés sont nécessaires pour assurer la fiabilité.

  • Optimisation longue avec plusieurs paramètres De nombreux paramètres introduits conduisent à un processus long pour optimiser toutes les combinaisons de paramètres.

Directions d'amélioration

  • Évaluer l'effet réel de chaque indicateur Test de retour pour vérifier le bénéfice supplémentaire réel de chaque indicateur, éviter la redondance.

  • Optimiser et tester la stabilité L'optimisation des résultats des tests sur un plus grand nombre de marchés pour assurer la robustesse.

  • Incorporer des stratégies de stop loss Par exemple, l'arrêt de trailing, l'arrêt de l'ordre de parenthèses pour contrôler davantage le risque.

  • Considérez d'autres facteurs de coûts Comme le glissement pour rapprocher le backtest d'une performance en direct.

Résumé

Cette stratégie combine plusieurs indicateurs et techniques de gestion des risques conçus pour le trading Bitcoin de 15 minutes. Il reste beaucoup de place pour optimiser les paramètres, évaluer l'efficacité des indicateurs, tester la stabilité du marché et introduire plus de facteurs réels pour trouver la combinaison optimale dans l'approche multi-facteurs.


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

Plus de