Il s'agit d'une stratégie de négociation à terme qui tire parti du mécanisme martingale pour obtenir des rendements élevés.
La logique de base de cette stratégie est la suivante: lorsque le prix déclenche la ligne de stop loss, réouvrir les positions avec des tailles plus grandes tout en abaissant la ligne de stop loss d'un certain pourcentage. En augmentant les tailles de position, il vise à abaisser le prix d'entrée moyen. Lorsque le nombre de positions atteint les ordres maximaux définis, il attend l'inversion du prix pour tirer profit.
En particulier, il entre d'abord au prix actuel avec la taille de la position définie et prend les niveaux de profit/perte. Lorsque le prix se déplace vers la ligne de stop-loss, des positions plus grandes seront rouvertes et la ligne de stop-loss est abaissée d'un pourcentage déterminé.
Le plus grand avantage est la capacité de réduire la base de coûts grâce à la réouverture à effet de levier, tout en ayant toujours la chance d'un renversement favorable lorsque les tendances sont négatives.
Il fonctionne également bien pour les matières premières et d'autres marchés à forte volatilité, amplifiant les gains/pertes grâce à l'effet de levier.
Le principal risque est que le prix puisse continuer sa tendance à la baisse après la réouverture, même en dépassant les niveaux de stop loss précédents, ce qui entraînera de lourdes pertes.
Un autre risque est l'insuffisance de capital pour soutenir la quantité maximale de commandes avant l'annulation.
Quelques moyens d'optimiser davantage la stratégie:
Ajustez dynamiquement le niveau d'effet de levier, plus bas en cas de gain et plus élevé en cas de perte
Incorporer des indicateurs de tendance pour arrêter les pertes lorsque la tendance est incertaine
Établissement d'une largeur de stop loss basée sur la volatilité du marché, plus large lorsque la volatilité est présente
Ajouter des modules de perte d'arrêt automatique pour limiter les pertes extrêmes
Il s'agit d'une stratégie de trading typique de martingale à effet de levier. En abaissant les coûts grâce à des commandes supplémentaires, il poursuit des rendements plus élevés mais présente également des risques. Il y a encore place à l'optimisation grâce à l'ajustement des paramètres et à l'expansion des fonctionnalités pour répondre à plus de conditions de marché.
/*backtest start: 2023-01-19 00:00:00 end: 2024-01-25 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Leveraged Martingale Strategy with Fees", overlay=true) // User-defined input parameters var float takeProfitPct = input(2.0, title="Take Profit Percentage") / 100.0 var float positionMultiplier = input(2.0, title="Position Size Multiplier") var int maxOrders = input(10, title="Maximum Number of Reinforced Orders") var float tradeSizeUSD = input(10000.0, title="Trade Size in USD") var float dropPctForNextTrade = input(1.0, title="Drop Percentage for Next Trade") / 100.0 var float leverage = input(5.0, title="Leverage Factor") var bool enterAtCurrentPrice = input(true, title="Enter First Trade at Current Price") var float takerFeePct = input(0.1, title="Taker Order Fee Percentage") / 100.0 // State variables var float last_entry_price = na var float avg_entry_price = na var float total_position_size = 0.0 var int num_trades = 0 // Entry logic if (num_trades == 0) if (enterAtCurrentPrice or close < last_entry_price * (1 - dropPctForNextTrade)) float size = tradeSizeUSD / close * leverage strategy.entry("Long", strategy.long, qty=size) avg_entry_price := close total_position_size := size last_entry_price := close num_trades := 1 else if (close < last_entry_price * (1 - dropPctForNextTrade) and num_trades < maxOrders) float size = tradeSizeUSD / close * leverage * pow(positionMultiplier, num_trades) strategy.entry("Double Long" + tostring(num_trades), strategy.long, qty=size) avg_entry_price := ((avg_entry_price * total_position_size) + (close * size)) / (total_position_size + size) total_position_size := total_position_size + size last_entry_price := close num_trades := num_trades + 1 // Take profit logic adjusted for leverage and fees var float take_profit_price = na var float fee_deduction = na if (num_trades > 0) take_profit_price := avg_entry_price * (1 + takeProfitPct / leverage) fee_deduction := total_position_size * close * takerFeePct if (close > take_profit_price + fee_deduction / total_position_size) strategy.close_all() num_trades := 0