Cette stratégie est basée sur l'idée que les niveaux stop loss et take profit sont souvent placés à des niveaux de prix ronds ou clés, qui agissent comme support et résistance.
Les règles principales de cette stratégie sont les suivantes:
Lorsque le prix de clôture est au-dessus d'un niveau de prix clé et n'a pas atteint ce niveau au cours des 10 dernières barres, passez long.
Utilisez un arrêt de trailing avec une étape de 20 points pour suivre le mouvement après que le prix ait franchi le niveau clé.
Les signaux de vente sont l'inverse - lorsque la clôture est inférieure au niveau clé et n'a pas été touchée au cours des 10 dernières barres, allez court.
Les niveaux clés sont les suivants:
La stratégie est basée sur la psychologie selon laquelle les nombres ronds et les niveaux clés sont souvent des champs de bataille pour les taureaux et les ours, et fournissent ainsi des signaux commerciaux efficaces.
Les avantages de cette stratégie sont les suivants:
Les risques à prendre en considération sont les suivants:
Des solutions possibles:
La stratégie peut être améliorée par:
Ajout d'autres conditions pour confirmer l'importance des niveaux clés et éviter les contrefaçons.
Optimisation des paramètres tels que la plage de niveaux clés et la période de rétrospective en fonction des caractéristiques de l'instrument.
Amélioration du mécanisme d'arrêt du trail, par exemple en utilisant une piste dynamique au lieu d'une piste à point fixe.
Incorporer l'apprentissage automatique pour évaluer la force des niveaux clés à l'aide de données historiques.
Élargissement vers un système multi-temps avec une tendance TF plus élevée et un suivi TF inférieur.
Cette stratégie offre des signaux simples et intuitifs basés sur les niveaux de prix clés et les conventions de trading. Elle offre de nombreuses opportunités mais a besoin d'une optimisation supplémentaire pour gérer les faux-fuits.
/*backtest start: 2022-09-14 00:00:00 end: 2023-09-20 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 //Strategy based on the idea that stop loss and take profit are often placed at full price levels or round numbers, whcih acts as resistance and supports levels //Buy Rules: //Actual price (close) is above round number. //Round number level was not touched in previous ten bars (arbitrary value). //Place a buy and follow the order with a trail step because price can bounce at round number (support) or can go through it. //Sell Rules are the same of buy rules but inverted. // //Need improvement on conditions' logic and round numbers definitions strategy("dP magnet", overlay=true, pyramiding=0,default_qty_type=strategy.percent_of_equity,default_qty_value=100,currency=currency.USD) //Round Levels credit to RKchartest roundLevel50 = input(500, 'Round Level 1, pips') //roundLevel100 = input(1000, 'Round Level 2, pips') deviation = input(1000, 'Max distance, pips', minval=0) rDelimeter = 1/syminfo.mintick intRoundLevel = close[1] * rDelimeter intRemainder = intRoundLevel % roundLevel50 toRound = (intRemainder >= roundLevel50/2) ? roundLevel50 : 0 roundLevel = (intRoundLevel - intRemainder + toRound) / rDelimeter plot(roundLevel, title='Round Level 1', color=black, style=line, transp=0, linewidth=1, trackprice=false) //intRemainder2 = intRoundLevel % roundLevel100 //toRound2 = (intRemainder2 >= roundLevel100/2) ? roundLevel100 : 0 //roundLevel2 = (intRoundLevel - intRemainder2 + toRound2) / rDelimeter //plot((abs(roundLevel2 - close) * rDelimeter < deviation) ? roundLevel2 : na, title='Round Level 2', color=black, style=circles, transp=0, linewidth=1, trackprice=true) // end //Start of strategy distToFullNumber=(close-roundLevel) //can be positive or negative number distPips=input(100,'Distance in pips to full level',minval=10) //user defined: this distance defines when to open an order at market price TrailS=input(20,'Trail Step points',minval=10) //trail step that follows the order longCondition = iff(distToFullNumber>0 and abs(distToFullNumber)<=distPips and lowest(low,10)>roundLevel,true,false) if (longCondition) strategy.entry("LongMagnet", strategy.long) strategy.exit("ExitMagnet","LongMagnet",trail_points=TrailS) shortCondition = iff(distToFullNumber<0 and abs(distToFullNumber)<=distPips and highest(high,10)<roundLevel,true,false) if (shortCondition) strategy.entry("ShortMagnet", strategy.short) strategy.exit("Exit_Magnet","ShortMagnet",trail_points=TrailS)