Stratégie de scalping intradien de suivi des tendances sur plusieurs périodes

Auteur:ChaoZhang est là., Date: 2023-11-16 17:47:06 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie combine des indicateurs de moyenne mobile sur plusieurs délais pour déterminer la cohérence de la tendance et prend des actions de scalping pendant la journée pour suivre la tendance et réaliser des bénéfices.

La logique de la stratégie

Cette stratégie utilise des moyennes mobiles de 8 périodes et de 20 périodes sur les délais de 5 minutes, 15 minutes, 30 minutes et 60 minutes pour générer des signaux de négociation. Un signal d'achat est généré lorsque le MA de 8 périodes dépasse le MA de 20 périodes. Un signal de vente est généré lorsque le MA de 8 périodes dépasse le MA de 20 périodes.

La stratégie nécessite des signaux cohérents sur les quatre délais avant d'émettre un ordre de négociation.

Une fois entrée dans une position, la stratégie fixe un objectif de profit fixe pour réaliser des bénéfices au cours de la journée.

Plus précisément, la stratégie utilise la fonction de sécurité pour récupérer les valeurs MA de différentes périodes. Elle calcule la différence entre les MA de 8 périodes et de 20 périodes sur les graphiques de 5 minutes, 15 minutes, 30 minutes et 60 minutes.

Les signaux d'achat et de vente sont déterminés par le fait que la ligne de différence traverse au-dessus/en dessous de la ligne zéro. Plusieurs drapeaux islong et isshort sont utilisés pour enregistrer le signal sur chaque échéancier. Les ordres sont passés lorsque les conditions islong et isshort sont remplies.

Après avoir effectué une transaction, la stratégie utilisestrategy.exit() pour fixer une cible de profit fixe pour le scalping.

Analyse des avantages

Les avantages de cette stratégie sont les suivants:

  1. La conception multi-temps filtre le bruit et réduit la fréquence des échanges.

  2. Le scalping intraday avec optimisation des bénéfices accumule de petits gains de façon constante.

  3. Structure de code claire, facile à comprendre et à optimiser.

  4. Des conditions raisonnables permettent de contrôler le risque.

Analyse des risques

Risques potentiels de cette stratégie:

  1. Les délais multiples peuvent manquer des changements de tendance subtils.

  2. Les opérations de scalping fréquentes augmentent les coûts.

  3. L'objectif de bénéfice fixe manque de souplesse.

  4. Ça dépend des indicateurs, on risque d'être dupé.

Directions d'optimisation

Optimisations possibles:

  1. Ajoutez plus de délais pour des signaux plus solides.

  2. Objectif de profit dynamique basé sur l'ATR.

  3. Des filtres supplémentaires comme l'augmentation du volume ou les extrêmes de l'histoire.

  4. Optimiser les périodes de mise en œuvre pour obtenir les meilleurs paramètres.

  5. Ajoutez l'apprentissage automatique pour juger de la fiabilité du signal.

Résumé

Dans l'ensemble, il s'agit d'une stratégie typique de suivi des tendances sur plusieurs délais en utilisant le scalping intradien.


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

//@version=2
strategy(title="PeBAS $JPY Scalper 15m ",overlay=true) 
zeigeallebars= input(false, title="Zeige alle (Show all) Candles/Bars?")
profitwert=input(52, title="Profit")
myatr=  input(title="ATR", type=float, defval=0.00002, minval=0.00001,step=0.00001)


//Plot  EMA-Differenz Aktueller Timeframe

dif=(ema(close,8)+ema(close,20))/2
mcolor=ema(close,8) > ema(close,20) ? green : red
bs = ema(close,8) > ema(close,20) ? true : false
ThisATR=atr(16)

//trans = zeigeallebars == true ? 00 : 100
//plot(dif,"dif",color=mcolor,linewidth=6,transp=trans)


//1M EMA
htf_ma1Mema8 = ema(close, 5)
htf_ma1Mema20 = ema(close, 20)
ema81m=request.security(syminfo.tickerid, "1", htf_ma1Mema8)
ema201m=request.security(syminfo.tickerid, "1", htf_ma1Mema20)
dif1M = (ema81m + ema201m) / 2
Close1M = request.security(syminfo.tickerid, "1", close)
color1=ema81m > ema201m ? green : red
//plot(dif1M,"dif",color1,linewidth=6)
//plotshape(1, style=shape.cross, color=color1,location=location.top)
ls1 = ema81m > ema201m ? 1 : 0



//5M EMA

htf_ma5Mema8 = ema(close, 8)
htf_ma5Mema20 = ema(close, 20)
ema85m=request.security(syminfo.tickerid, "5", htf_ma5Mema8)
ema205m=request.security(syminfo.tickerid, "5", htf_ma5Mema20)
dif5M = (ema85m + ema205m) / 2
 
color5=ema85m > ema205m ? green : red
plot(dif5M,"dif",color5,linewidth=5)
ls5 = ema85m > ema205m ? 1 : 0
alert1= ema85m > ema205m and ema85m[1] < ema205m[1] ? 1 : 0
islong5 = ema85m > ema205m ? 1 : 0
isshort5 = ema85m < ema205m ? 1 : 0

//15M EMA

htf_ma15Mema8 = ema(close, 8)
htf_ma15Mema20 = ema(close, 20)
ema815m=request.security(syminfo.tickerid, "15", htf_ma15Mema8)
ema2015m=request.security(syminfo.tickerid, "15", htf_ma15Mema20)
dif15M = (ema815m + ema2015m) / 2
 
color15=ema815m > ema2015m ? green : red
plot(dif15M,"dif",color15,linewidth=3)
ls15= ema815m > ema2015m ? 1 : 0
alert2= ema815m > ema2015m and ema815m[1] < ema2015m[1] ? 1 : 0
islong15 = ema815m > ema2015m ? 1 : 0
isshort15 = ema815m < ema2015m ? 1 : 0





//30M EMA
htf_ma30Mema8 = ema(close, 8)
htf_ma30Mema20 = ema(close, 20)
ema830m=request.security(syminfo.tickerid, "30", htf_ma30Mema8)
ema2030m=request.security(syminfo.tickerid, "30", htf_ma30Mema20)
dif30M = (ema830m + ema2030m) / 2
 
color30=ema830m > ema2030m ? green : red
ls30= ema830m > ema2030m ?1 : 0
islong30 = ema830m > ema2030m ? 1 : 0
isshort30 = ema830m < ema2030m ? 1 : 0



//60M EMA

htf_ma60Mema8 = ema(close, 8)
htf_ma60Mema20 = ema(close, 20)
ema860m=request.security(syminfo.tickerid, "60", htf_ma60Mema8)
ema2060m=request.security(syminfo.tickerid, "60", htf_ma60Mema20)
dif60M = (ema860m + ema2060m) / 2
 
color60=ema860m > ema2060m ? green : red
ls60= ema860m > ema2060m ?1 : 0

islong60 = ema860m > ema2060m ? 1 : 0
isshort60 = ema860m < ema2060m ? 1 : 0

plot(dif60M,"dif",color60,linewidth=3,transp=70)

islong = islong5 ==1 and islong15 ==1 and islong60 ==1 and year > 2017 ? 1 : 0
isshort = isshort5 ==1 and isshort15 ==1 and  isshort60 ==1 and year > 2017 ? 1 : 0


condition2l= 0 
condition2s = 0

c= alert1 == alert2  and alert1[1] != alert2[1] ? 1 : 0
alertcondition(c, title='Da tat sich was ', message='Da tat sich was!')

strategy.entry("enter long", strategy.long,1,when = islong ==1 and islong[1] == 0  ) 
strategy.entry("enter short", strategy.short,1,when = isshort == 1  and isshort [1] == 0) 
strategy.exit("close",profit=profitwert)
strategy.exit("close",profit=profitwert)





Plus de