Stratégie intelligente de stop loss suiveur basée sur la moyenne mobile et le modèle intraday

SMA MA18 ATR
Date de création: 2025-01-17 16:04:09 Dernière modification: 2025-01-17 16:04:09
Copier: 4 Nombre de clics: 361
1
Suivre
1617
Abonnés

Stratégie intelligente de stop loss suiveur basée sur la moyenne mobile et le modèle intraday

Aperçu

Il s’agit d’une stratégie basée sur la moyenne mobile sur 18 jours (SMA18), combinée à la reconnaissance des modèles de trading intraday et à un mécanisme de stop suiveur intelligent. Cette stratégie observe principalement la relation entre le prix et le SMA18, combine les points hauts et bas intrajournaliers et entre dans la position longue au bon moment. La stratégie adopte un plan de stop-loss flexible, qui peut utiliser soit un point de stop-loss fixe, soit un point le plus bas sur deux jours comme référence de stop-loss suiveur.

Principe de stratégie

La logique fondamentale de la stratégie comprend les éléments clés suivants :

  1. Les conditions d’entrée sont basées sur la position relative du prix par rapport à la moyenne mobile sur 18 jours. Vous pouvez choisir d’entrer sur le marché lorsqu’il dépasse la moyenne mobile ou d’entrer au-dessus de la moyenne mobile.
  2. En analysant les modèles de ligne K intrajournalière, en prêtant particulièrement attention au modèle de ligne K interne (barre intérieure), la précision de l’entrée est améliorée
  3. En fonction des caractéristiques de performance des différents jours de négociation de la semaine, vous pouvez négocier de manière sélective sur des jours spécifiques
  4. Le prix d’entrée est fixé dans un ordre limité, avec une petite prime au-dessus du point bas pour augmenter la probabilité d’une transaction.
  5. Le mécanisme de stop loss prend en charge deux modes : l’un est un stop loss fixe basé sur le prix d’entrée, et l’autre est un stop loss suiveur basé sur le point le plus bas des deux jours de négociation précédents.

Avantages stratégiques

  1. En combinant indicateurs techniques et modèles de prix, les signaux d’entrée sont plus fiables
  2. Mécanisme de sélection de temps de négociation flexible, qui peut être optimisé en fonction des différentes caractéristiques du marché
  3. La solution intelligente de stop loss protège les bénéfices tout en laissant aux prix suffisamment de marge pour les fluctuations
  4. Les paramètres de stratégie sont hautement ajustables et peuvent s’adapter à différents environnements de marché
  5. Grâce au filtrage des modèles de lignes K internes, les faux signaux sont efficacement réduits

Risque stratégique

  1. Sur des marchés volatils, les stops fixes peuvent conduire à des sorties prématurées
  2. Pour un retournement rapide, un stop loss suiveur peut générer moins de bénéfices
  3. Pendant la phase latérale, des chandeliers internes fréquents peuvent conduire à des échanges excessifs. Contre-mesures :
  • Ajustez dynamiquement la distance du stop loss en fonction de la volatilité du marché
  • Ajouter des indicateurs de confirmation de tendance
  • Définissez un objectif de profit minimum pour filtrer les transactions de faible qualité

Orientation de l’optimisation de la stratégie

  1. Introduire des indicateurs de volatilité (tels que l’ATR) pour ajuster dynamiquement la distance du stop loss
  2. Augmenter la dimension de l’analyse du volume et améliorer la fiabilité du signal
  3. Développer des algorithmes de sélection de dates plus intelligents pour optimiser automatiquement les heures de négociation en fonction des performances historiques
  4. Ajout d’un filtre de force de tendance pour éviter de négocier dans des tendances faibles
  5. Optimiser l’algorithme interne de reconnaissance de la ligne K pour améliorer la précision de la reconnaissance des formes

Résumer

Cette stratégie construit un système de trading relativement complet en combinant des méthodes d’analyse de plusieurs dimensions. Le principal avantage de la stratégie réside dans ses paramètres flexibles et son mécanisme de stop-loss intelligent, qui lui permet de s’adapter à différents environnements de marché. Grâce à une optimisation et une amélioration continues, la stratégie devrait permettre de maintenir une performance stable dans diverses conditions de marché.

Code source de la stratégie
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-16 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//@version=5
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © zweiprozent

strategy('Buy Low over 18 SMA Strategy', overlay=true, default_qty_value=1)
xing = input(false, title='crossing 18 sma?')
sib = input(false, title='trade inside Bars?')
shortinside = input(false, title='trade inside range bars?')
offset = input(title='offset', defval=0.001)
belowlow = input(title='stop below low minus', defval=0.001)
alsobelow = input(false, title='Trade only above 18 sma?')
tradeabove = input(false, title='Trade with stop above order?')
trailingtwo = input(false, title='exit with two days low trailing?')


insideBar() =>  //and high <= high[1] and low >= low[1] ? 1 : 0
    open <= close[1] and close >= open[1] and close <= close[1] or open >= close[1] and open <= open[1] and close <= open[1] and close >= close[1] ? 1 : 0

inside() =>
    high <= high[1] and low >= low[1] ? 1 : 0
enterIndex = 0.0
enterIndex := enterIndex[1]

inPosition = not na(strategy.position_size) and strategy.position_size > 0
if inPosition and na(enterIndex)
    enterIndex := bar_index
    enterIndex



//if strategy.position_size <= 0 

//    strategy.exit("Long", stop=low[0]-stop_loss,comment="stop loss")


//if not na(enterIndex) and bar_index - enterIndex + 0 >= 0 

//    strategy.exit("Long", stop=low[0]-belowlow,comment="exit")

//    enterIndex := na

T_Low = request.security(syminfo.tickerid, 'D', low[0])
D_High = request.security(syminfo.tickerid, 'D', high[1])
D_Low = request.security(syminfo.tickerid, 'D', low[1])
D_Close = request.security(syminfo.tickerid, 'D', close[1])
D_Open = request.security(syminfo.tickerid, 'D', open[1])

W_High2 = request.security(syminfo.tickerid, 'W', high[1])
W_High = request.security(syminfo.tickerid, 'W', high[0])
W_Low = request.security(syminfo.tickerid, 'W', low[0])
W_Low2 = request.security(syminfo.tickerid, 'W', low[1])
W_Close = request.security(syminfo.tickerid, 'W', close[1])
W_Open = request.security(syminfo.tickerid, 'W', open[1])

//longStopPrice  = strategy.position_avg_price * (1 - stopl)
// Go Long - if prev day low is broken and stop loss prev day low
entryprice = ta.sma(close, 18)

//(high[0]<=high[1]or close[0]<open[0]) and low[0]>vwma(close,30) and time>timestamp(2020,12,0,0,0)

showMon = input(true, title='trade tuesdays?')
showTue = input(true, title='trade wednesdayy?')
showWed = input(true, title='trade thursday?')
showThu = input(true, title='trade friday?')
showFri = input(true, title='trade saturday?')
showSat = input(true, title='trade sunday?')
showSun = input(true, title='trade monday?')

isMon() =>
    dayofweek(time('D')) == dayofweek.monday and showMon
isTue() =>
    dayofweek(time('D')) == dayofweek.tuesday and showTue
isWed() =>
    dayofweek(time('D')) == dayofweek.wednesday and showWed
isThu() =>
    dayofweek(time('D')) == dayofweek.thursday and showThu
isFri() =>
    dayofweek(time('D')) == dayofweek.friday and showFri
isSat() =>
    dayofweek(time('D')) == dayofweek.saturday and showSat
isSun() =>
    dayofweek(time('D')) == dayofweek.sunday and showSun


clprior = close[0]
entryline = ta.sma(close, 18)[1]
//(isMon() or isTue()or isTue()or  isWed() 
noathigh = high < high[1] or high[2] < high[3] or high[1] < high[2] or low[1] < ta.sma(close, 18)[0] and close > ta.sma(close, 18)[0]

if noathigh and time > timestamp(2020, 12, 0, 0, 0) and (alsobelow == false or high >= ta.sma(close, 18)[0]) and (isMon() or isTue() or isWed() or isThu() or isFri() or isSat() or isSun()) and (high >= high[1] or sib or low <= low[1])  //((sib == false and inside()==true) or inside()==false) and (insideBar()==true or shortinside==false)
    if tradeabove == false
        strategy.entry('Long', strategy.long, limit=low + offset * syminfo.mintick, comment='long')
    if tradeabove == true and (xing == false or clprior < entryline)  // and high<high[1] 
        strategy.entry('Long', strategy.long, stop=high + offset * syminfo.mintick, comment='long')


//if time>timestamp(2020,12,0,0,0) and isSat()  
//    strategy.entry("Long", strategy.long, limit=0, comment="long")


//strategy.exit("Long", stop=low-400*syminfo.mintick)

//strategy.exit("Long", stop=strategy.position_avg_price-10*syminfo.mintick,comment="exit")
//strategy.exit("Long", stop=low[1]-belowlow*syminfo.mintick, comment="stop")

if strategy.position_avg_price > 0 and trailingtwo == false and close > strategy.position_avg_price
    strategy.exit('Long', stop=strategy.position_avg_price, comment='stop')

if strategy.position_avg_price > 0 and trailingtwo == false and (low > strategy.position_avg_price or close < strategy.position_avg_price)
    strategy.exit('Long', stop=low[0] - belowlow * syminfo.mintick, comment='stop')

if strategy.position_avg_price > 0 and trailingtwo
    strategy.exit('Long', stop=ta.lowest(low, 2)[0] - belowlow * syminfo.mintick, comment='stop')