Cette stratégie conçoit une stratégie de trading à long terme qui contrôle le risque de chaque transaction en fonction de l'indicateur MACD. Par rapport aux stratégies traditionnelles de flipping long-short, cette stratégie se concentre davantage sur le contrôle du risque de chaque transaction. En calculant des niveaux de stop loss et de profit raisonnables et en définissant des tailles de position appropriées, elle limite la perte maximale pour chaque transaction. Cela peut contrôler efficacement les retraits et réaliser des profits stables à long terme.
La stratégie calcule d'abord la ligne MACD et la ligne de signal de l'indicateur MACD. Lorsque la ligne MACD traverse au-dessus de la ligne de signal, elle est déterminée comme un signal d'achat. Pour filtrer les fausses ruptures, la stratégie nécessite un barsince ((crossover ((macd_line, signal_line)) <= 5, ce qui signifie que la rupture s'est produite dans les 5 barres les plus récentes. Elle nécessite également que les lignes MACD et de signal soient inférieures à 0, ce qui indique une condition de survente, et la fermeture au-dessus de la ligne WMA, ce qui indique une tendance à la hausse. Lorsque les conditions ci-dessus sont remplies, une position longue est ouverte.
Pour chaque transaction, la stratégie calcule des niveaux raisonnables de stop loss et de take profit. Le stop loss est défini au plus bas des 3 barres les plus récentes. Le take profit est défini au prix d'entrée plus 4 fois la distance entre le stop loss et le prix d'entrée.
La clé est que la stratégie calcule la taille de la position spécifique en fonction du risque maximal abordable. Le paramètre capital_risk définit le pourcentage du capital total qui peut être perdu pour chaque transaction. La taille de la position en USD est ensuite calculée en fonction de la plage de stop loss. Elle est ensuite convertie en contrats pour l'exécution.
Le risque de chaque transaction est contrôlé à 1% du capital total, ce qui permet de contrôler efficacement les retraits.
Améliorations possibles:
Cette stratégie détermine la direction de la tendance en utilisant le MACD, et prend le contrôle des risques comme la priorité pour le commerce avec une taille de position optimisée. Les clés sont le contrôle des risques et la taille de la position, ce qui peut réaliser des profits stables à long terme. Mais le MACD présente quelques défauts, et les mécanismes de stop loss/take profit ont besoin d'une optimisation supplémentaire.
/*backtest start: 2022-10-19 00:00:00 end: 2023-10-25 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy( "McDonalds ", shorttitle="Ur Lovin' It", initial_capital=10000, default_qty_type=strategy.cash, currency=currency.USD ) capital_risk = input( 1.0, "% capital risk per trade" ) / 100 r_exit = input( 4.0, "Take Profit in 'R'" ) wma_length = input( 150, 'WMA Bias Length' ) [macd_line, signal_line, hist ] = macd(close, 12, 26, 9) w_line = wma( close, wma_length ) golong = barssince(crossover(macd_line, signal_line)) <= 5 and ( macd_line < 0 and signal_line < 0 ) and ( close > w_line ) and strategy.opentrades == 0 float stop = na float tp = na // For a stop, use a recent low stop := golong ? lowest(low, 3)[1] : stop[1] range = abs(close - stop) tp := golong ? close + (r_exit * range) : tp[1] // This is the bit that calculates how much size to use so we only lose 1% of the `strategy.equity` how_much_willing_to_lose = strategy.equity * capital_risk // Spread the risk across the stop range position_size_in_usd = how_much_willing_to_lose / (range / close) // Sized specified in base contract position_size_in_contracts = position_size_in_usd / close // Enter the position if golong strategy.entry("long", strategy.long, qty=position_size_in_contracts) strategy.exit("long exit","long", stop=stop, limit=tp) // experimental exit strategy // hist_strength = hist >= 0 ? ( hist[1] < hist ? 'strong' : 'weak') : ( hist[1] < hist ? 'weak' : 'strong' ) // if hist < 0 and hist_strength == 'strong' and falling( hist, 8 ) // strategy.close("long") plot( strategy.equity, color=strategy.equity > 10000 ? color.green : color.red, linewidth=2 )