
Cette stratégie permet de déterminer la cohérence des tendances entre les différentes périodes en combinant des indicateurs de moyennes mobiles sur plusieurs périodes, et d’utiliser des stratégies de scalping pour tirer profit de la tendance au cours d’une journée.
Cette stratégie utilise les moyennes mobiles à 8 et 20 jours pour construire un signal de transaction sur quatre périodes de 5 minutes, 15 minutes, 30 minutes et 60 minutes. Un signal d’achat est généré lorsque la moyenne mobile à 8 jours est traversée par la moyenne mobile à 20 jours sur une période plus courte; un signal de vente est généré lorsque la moyenne mobile à 20 jours est traversée par la moyenne mobile à 8 jours sous la moyenne mobile à 8 jours.
La stratégie exige que les signaux de négociation des périodes de 5, 15, 30 et 60 minutes soient cohérents. C’est-à-dire que les opérations d’achat ou de vente ne sont effectuées que lorsque les moyennes mobiles des quatre périodes correspondent aux signaux d’achat ou de vente.
Une fois la position saisie, la stratégie met en place un stop-loss avec un avantage fixe sur le coude, permettant une opération de scalping sur la journée.
Plus précisément, la stratégie obtient des moyennes mobiles dans différentes périodes de temps en appelant la fonction security. Elle calcule les différences entre les moyennes de 8 et 20 jours pour les périodes de 5 minutes, 15 minutes, 30 minutes et 60 minutes, et trace une courbe de différence.
Les signaux d’achat et de vente sont jugés en fonction de l’existence d’une courbe de différence sur l’axe zéro. De plus, plusieurs marqueurs islong et isshort sont définis pour enregistrer les signaux de transaction dans chaque période. Enfin, les instructions d’entrée et de sortie sont émises lorsque les conditions d’islong et d’isshort sont satisfaites.
Après l’entrée, la stratégie définit un nombre de points d’arrêt fixes via la fonction strategy.exit, permettant l’opération de scalping.
Cette stratégie présente les avantages suivants:
La conception d’un multi-cadre temporel permet de filtrer efficacement les fausses déclarations et de réduire la fréquence des transactions en utilisant des indicateurs synthétiques de différents cycles.
La stratégie de scalping sur une journée, l’optimisation des profits, permet d’accumuler de petits bénéfices en permanence.
La structure du code est claire, les fonctions de chaque partie sont claires, faciles à comprendre et à optimiser.
Les conditions sont raisonnables et permettent de contrôler efficacement le risque de transaction.
Cette stratégie comporte aussi des risques:
Bien que la conception multi-châtres puisse filtrer une partie du bruit, il est possible de manquer certains détails qui entraînent des changements de tendance moins évidents.
Le scalping intra-journalier entraîne des transactions fréquentes et nécessite un contrôle des coûts de transaction.
Les paramètres des points d’arrêt fixes ne sont pas assez flexibles pour s’adapter aux changements du marché.
Il existe un risque de tromperie si vous vous fiez à l’indicateur pour générer des signaux de trading.
Cette stratégie peut être optimisée dans les domaines suivants:
L’ajout d’indicateurs de jugement pour les différentes périodes de temps rend le signal plus stable et plus fiable.
Optimisation de la stratégie d’arrêt en fonction de la dynamique ATR.
Ajouter des conditions supplémentaires pour filtrer les moments d’entrée, tels que l’augmentation du volume des transactions, le dépassement des records historiques, etc.
Optimiser les paramètres périodiques des moyennes mobiles pour trouver la meilleure combinaison de paramètres.
Augmenter les modèles d’apprentissage automatique pour juger de la fiabilité des signaux de l’indicateur et éviter les arbitrages.
Cette stratégie est une stratégie de suivi de tendance typique de plusieurs périodes, utilisant le scalping intraday pour gagner de l’argent. L’idée de la stratégie est claire, la structure du code est raisonnable et mérite d’être testée et optimisée.
/*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)