Stratégie de négociation de BTC basée sur le croisement des moyennes mobiles

Auteur:ChaoZhang est là., Date: 2023-12-07 14:56:50 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie est basée sur les signaux de croix dorée et de croix de mort de la moyenne mobile de 50 jours et de la moyenne mobile de 200 jours de BTC, combinés à des indicateurs techniques supplémentaires pour générer des signaux d'achat et de vente.

Principe de stratégie

Lorsque la moyenne mobile de 50 jours dépasse la moyenne mobile de 200 jours pour former une croix dorée, cela indique que BTC est entré dans un marché haussier et génère un signal d'achat.

En plus de la moyenne mobile de base croix d'or et croix de mort, cette stratégie intègre également des indicateurs techniques supplémentaires pour faciliter le jugement, notamment:

  1. Indicateur EMA: Calculer un indicateur EMA avec longueur + décalage, quand il monte indique que le marché actuel est haussier, nous pouvons acheter.

  2. Comparez la relation de valeur entre la moyenne mobile et l'EMA: si la valeur de l'EMA est supérieure à la moyenne mobile sur 50 jours, un signal d'achat est généré.

  3. Vérifiez si le prix a chuté de plus de 1% par rapport au plus bas de la ligne K précédente, si c'est le cas, générez un signal de vente.

En combinant l'utilisation de plusieurs indicateurs ci-dessus, certains signaux erronés peuvent être filtrés et les décisions de négociation de la stratégie peuvent être plus fiables.

Analyse des avantages

Cette stratégie présente les avantages suivants:

  1. L'utilisation de moyennes mobiles comme principal signal de négociation peut filtrer le bruit du marché et identifier la direction de la tendance.

  2. La combinaison avec plusieurs indicateurs techniques auxiliaires peut améliorer la fiabilité du signal et filtrer les faux signaux.

  3. L'adoption de stratégies d'arrêt des pertes appropriées peut contrôler efficacement les pertes uniques.

  4. La logique de négociation relativement simple est facile à comprendre et à mettre en œuvre, adaptée aux débutants du trading quantitatif.

  5. Il existe de nombreux paramètres configurables qui peuvent être ajustés selon vos propres préférences.

Analyse des risques

Cette stratégie comporte également certains risques:

  1. La moyenne mobile elle-même présente un fort retard, ce qui signifie qu'elle ne présente pas d'opportunités d'inversion rapide des prix.

  2. L'ajout d'indicateurs auxiliaires augmente le nombre de règles et augmente également la probabilité de générer de mauvais signaux.

  3. Les paramètres de stop-loss incorrects peuvent entraîner des pertes accrues.

  4. Des paramètres inappropriés (tels que la longueur moyenne mobile, etc.) auront également une incidence sur les résultats de la stratégie.

Les solutions correspondantes:

  1. Réduire de manière appropriée le cycle de la moyenne mobile et augmenter la plage d'optimisation des paramètres.

  2. Augmenter la quantité de données de backtest pour vérifier la qualité du signal.

  3. Détendez correctement la plage de stop-loss tout en réglant les stops de prise de profit.

  4. Augmenter l'optimisation des paramètres pour trouver les meilleures combinaisons de paramètres.

Directions d'optimisation

Cette stratégie peut également être optimisée dans les directions suivantes:

  1. Améliorer les algorithmes d'apprentissage automatique pour obtenir une optimisation automatique des paramètres.

  2. Ajouter plus d'indicateurs auxiliaires pour élaborer plusieurs sous-stratégies et prendre des décisions par le biais d'un mécanisme de vote.

  3. Essayez des stratégies de rupture pour identifier les percées de prix.

  4. Utilisez l'apprentissage en profondeur pour prédire les tendances des prix.

  5. Optimiser les mécanismes d'arrêt des pertes afin d'obtenir un suivi dynamique de l'arrêt des pertes.

Les optimisations susmentionnées peuvent améliorer la précision des décisions et améliorer la rentabilité et la stabilité de la stratégie.

Résumé

Cette stratégie prend principalement des décisions de trading basées sur le croisement de la moyenne mobile du BTC, aidée par des indicateurs techniques tels que l'EMA pour filtrer les signaux. La stratégie a une forte capacité de suivi des tendances et une grande configuration, ce qui la rend adaptée comme stratégie de trading quantitative pour les débutants. Mais il existe également certains risques de retard qui doivent être protégés. Les prochaines directions d'optimisation peuvent être de multiples dimensions telles que l'apprentissage automatique, les stratégies de portefeuille, les stratégies de stop-loss, etc.


/*backtest
start: 2023-11-06 00:00:00
end: 2023-12-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('JayJay BTC Signal', overlay=true, initial_capital=100, currency='USD', default_qty_value=100, default_qty_type=strategy.percent_of_equity, commission_value=0, calc_on_every_tick=true)

securityNoRepaint(sym, tf, src) => request.security(sym, tf, src[barstate.isrealtime ? 1 : 0])[barstate.isrealtime ? 0 : 1]

//200 50 Moving Average
ma50Len = input.int(50, minval=1, title='MA50-Length')
ma50Src = input(close, title='MA50-Source')
ma50Show = input(true, title='Show SMA50 on chart')
ma50Close = ta.sma(ma50Src, ma50Len)
ma50CloseTimeframe = input.timeframe("240", "Ma50 Timeframe", group = "EMA Options")
ma50Open = ta.sma(open, ma50Len)
ma200Len = input.int(200, minval=1, title='MA200-Length')
ma200Src = input(close, title='MA200-Source')
ma200Show = input(true, title='Show SMA200 on chart')
ma200CloseTimeframe = input.timeframe("D", "Ma200 Timeframe", group = "EMA Options")
ma200Close = ta.sma(ma200Src, ma200Len)
ma200Open = ta.sma(open, ma200Len)
//plot(ma200Close, color=color.new(#0b6ce5, 0), title='MA200')
//plot(ma50Close, color=color.new(#00d8ff, 0), title='MA50')

sma50 = securityNoRepaint(syminfo.tickerid, ma50CloseTimeframe, ma50Close)
plot(sma50 and ma50Show ? sma50 : na, color=color.new(#00d8ff, 0), title='SMA50')
sma200 = securityNoRepaint(syminfo.tickerid, ma200CloseTimeframe, ma200Close)
plot(sma200 and ma200Show ? sma200 : na, color=color.new(#00d8ff, 0), title='SMA200')

// Short/Long EMA
// Define the offset value
EMAOffsetValue = input.int(2, title='EMA Offset', minval=0)
emaplot = input(true, title='Show EMA on chart')
len = input.int(20, minval=1, title='ema Length') + EMAOffsetValue
emaCloseTimeframe = input.timeframe("240", "EMA 1 Timeframe", group = "EMA Options")
emaOpen = ta.ema(open, len)
emaClose = ta.ema(close, len)

ema = securityNoRepaint(syminfo.tickerid, emaCloseTimeframe, emaClose)

up = emaClose > ema[1]
down = emaClose < ema[1]
mycolor = up ? color.green : down ? color.red : color.blue

plot(ema and emaplot ? ema : na, title='Signal EMA', color=mycolor, linewidth=3)
//plot(emaClose and emaplot ? emaClose : na, title='Signal 20 EMA', color=color.yellow, linewidth=3)

ma50GreaterThanMa200 = sma50 > sma200

last3BarUp = ema > ema[1]

startLong = up and ema > sma50 and ma50GreaterThanMa200 and (100 - (sma50 / ema * 100) > 1.0)

startFrom = input(timestamp("20 Jan 2000 00:00"), "StartFrom")

yearFilter = true

alertLongPositionMessage = "{\"direction:\": \"long\", \"action\": \"{{strategy.order.action}}\", \"price\": \"{{strategy.order.price}}\", \"qty\": \"{{strategy.position_size}}\", \"symbol\": \"{{ticker}}\", \"date\": \"{{time}}\"}"

if true and startLong and yearFilter
    strategy.entry('Long', strategy.long, comment = "Long", alert_message = alertLongPositionMessage)

longStopLossLevel = open * 0.05
strategy.exit('StopLoss', from_entry='Long',comment = "StopLoss!", loss=longStopLossLevel, profit=close * 0.3, alert_message = alertLongPositionMessage)
longPercentageChange = low / close[1] * 100 - 100
is1PercentLower = longPercentageChange < -0.1
closeLongPositionWhen = (down and is1PercentLower) or (emaClose < sma50)
if closeLongPositionWhen
    strategy.close('Long', comment = "Fuck It!", alert_message =  alertLongPositionMessage)

bgcolor(startLong ? color.green : na, transp=90)



Plus de