Stratégie de rupture de la bande moyenne mobile

Auteur:ChaoZhang est là., Date: 2023-09-17 18h33:57
Les étiquettes:

Résumé

Cette stratégie utilise des moyennes mobiles pour former un canal de prix et générer des signaux lorsque le prix sort des bandes de canaux.

La logique de la stratégie

  1. Calculer les moyennes mobiles, avec des options comme SMA/EMA/WMA/RMA.

  2. La bande supérieure est un certain pourcentage d'augmentation de la moyenne mobile.

  3. Options pour le trading long, court ou bidirectionnel.

  4. Le point de prise de profit est un certain pourcentage d'augmentation du prix d'entrée.

Analyse des avantages

  1. Il est facile de déterminer la tendance en utilisant des moyennes mobiles.

  2. Les paramètres réglables sont adaptés aux différentes périodes de détention et aux différentes préférences de risque.

  3. Les orientations longues/courtes facultatives s'adaptent aux différentes conditions du marché.

  4. Un pourcentage fixe de stop loss et de take profit permet une maîtrise.

Analyse des risques

  1. Ils sont enclins à être piégés quand la tendance change brusquement.

  2. Une régulation incorrecte des paramètres risque d'entraîner une survente ou un retard.

  3. Le pourcentage fixe d'arrêt des pertes/profits manque de flexibilité.

  4. Augmentation de la fréquence des échanges et des coûts de commission avec les échanges bidirectionnels.

Directions d'optimisation

  1. Optimiser les paramètres de la moyenne mobile pour équilibrer le retard et le bruit.

  2. Optimiser la bande passante du canal pour correspondre à la fréquence de volatilité du marché.

  3. Testez différentes configurations de stop loss et de profit.

  4. Ajouter des indicateurs de tendance et d'oscillation pour évaluer les conditions générales du marché.

  5. Mettre en place des filtres de temps pour éviter les impacts d'événements importants.

Résumé

La stratégie permet de suivre une tendance simple à travers les canaux de moyenne mobile, mais nécessite une optimisation plus forte des paramètres et un contrôle des risques.


/*backtest
start: 2023-08-17 00:00:00
end: 2023-09-16 00:00:00
period: 1h
basePeriod: 15m
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/
// © TaylorTneh
//@version=4

// strategy("Moving Average Band Taylor V1",shorttitle="MA Band+",overlay=true,default_qty_type=strategy.cash,default_qty_value=1000,initial_capital=1000,currency=currency.USD,commission_value=.1)

price = input(close, title="Source")
mabtype = input(title="Moving Average Type", defval="RMA", options=["SMA", "EMA", "RMA", "WMA"])
malen = input(10, "MA Period : 10")
magap = input(0.6, "Band Gap : 0.6", minval = -10, maxval = 10, step = 0.1)
mabup = if mabtype == "SMA"
    sma(high, malen)
else
    if mabtype == "EMA"
        ema(high, malen)
    else
        if mabtype == "WMA"
            wma(high, malen)
        else
            if mabtype == "RMA"
                rma(high, malen)
                    
mabdn = if mabtype == "SMA"
    sma(low, malen)
else
    if mabtype == "EMA"
        ema(low, malen)
    else
        if mabtype == "WMA"
            wma(low, malen)
        else
            if mabtype == "RMA"
                rma(low, malen)
                    
upex = mabup * (1 + magap/100)
dnex = mabdn * (1 - magap/100)
plot(upex, "Upper MA Band", color.orange)
plot(dnex, "Lower MA Band", color.orange)


//-------------------------------------------- (Strategy)
strategy.entry("Long", strategy.long, stop = upex)
strategy.entry("Short", strategy.short, stop = dnex)
//Long Only//strategy.entry("Long", strategy.long, stop = upex)
//Long Only//strategy.exit("Short", stop = dnex)
//Short Only//strategy.entry("Short", strategy.short, stop = dnex)
//Short Only//strategy.exit("Long", stop = upex)


//-------------------------------------------- (Take Profit & Stop Lose)
stopPer = input(500.0, title='# Stop Loss %', type=input.float) / 100
takePer = input(500.0, title='# Take Profit %', type=input.float) / 100
//Determine where you've entered and in what direction
longStop = strategy.position_avg_price * (1 - stopPer)
shortStop = strategy.position_avg_price * (1 + stopPer)
shortTake = strategy.position_avg_price * (1 - takePer)
longTake = strategy.position_avg_price * (1 + takePer)
if strategy.position_size > 0 
    strategy.exit(id="L-TP/SL", stop=longStop, limit=longTake)
if strategy.position_size < 0 
    strategy.exit(id="S-TP/SL", stop=shortStop, limit=shortTake)


//-------------------------------------------- (Sample Time Filter Strategy)
//fromyear = input(2018, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
//toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
//frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
//tomonth = input(10, defval = 10, minval = 01, maxval = 12, title = "To Month")
//fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
//today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
//strategy.entry("Long", strategy.long, stop = upex, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
//strategy.entry("Short", strategy.short, stop = dnex, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
//--------------------------------------------


Plus de