Stratégie de trading multifactorielle Bitcoin


Date de création: 2023-09-25 18:24:02 Dernière modification: 2023-09-25 18:24:02
Copier: 9 Nombre de clics: 837
1
Suivre
1617
Abonnés

Aperçu

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.

Principe de stratégie

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.

Analyse des avantages

  • L’analyse multifonctionnelle améliore la précision

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.

  • Les mécanismes de stop-loss permettent de contrôler les risques de manière rationnelle.

Un arrêt de perte raisonnable peut bloquer les bénéfices et limiter efficacement les pertes individuelles.

  • Optimiser les paramètres avec de la place

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.

  • Les frais de traitement sont plus proches de la réalité.

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.

Analyse des risques

  • Risques de déduction erronée de combinaisons de facteurs

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 à cycle court sont plus risquées.

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 stabilité de la stratégie à tester

La stratégie doit encore être validée sur des cycles plus longs et sur plusieurs marchés pour assurer sa stabilité.

  • Optimisation des paramètres plus longue

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.

Direction d’optimisation

  • Évaluation de l’impact réel des indicateurs

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.

  • Paramètres d’optimisation et stabilité des tests

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é.

  • Adhérer à une stratégie de stop-loss

Le risque peut être maîtrisé par des moyens tels que le stop mobile ou le stop fixe.

  • Plus de facteurs de coût

Le coût du dérapage rend la rétro-évaluation plus réaliste.

Résumer

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.

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