Stratégie de compression de l' élan

Auteur:ChaoZhang est là., Date: 2023-11-14 14h04 et 24h
Les étiquettes:

img

Résumé

L'idée principale de cette stratégie est de combiner l'indicateur de dynamique Lazy Bear et l'indicateur MFI Crypto Face pour aller long lorsque la tendance monte et court lorsque la tendance descend, réalisant ainsi une stratégie de trading quantitative qui suit les tendances du marché.

La logique de la stratégie

  1. Utilisez BlueWave, l'indicateur de dynamique de Lazy Bear, qui calcule la régression linéaire du prix de clôture par rapport à la moyenne maximale, la plus basse et la plus proche de 20 jours pour déterminer la direction de la tendance.

  2. Utilisez l'indicateur MFI amélioré par Crypto Face, qui calcule la somme des variations de prix et du volume au cours des 58 derniers jours pour déterminer le flux de trésorerie.

  3. Lorsque le BlueWave dépasse 0 et que la IFM est supérieure à 0, un signal d'achat est généré pour ouvrir une position longue; lorsque le BlueWave dépasse 0 et que la IFM est inférieure à 0, un signal de vente est généré pour ouvrir une position courte.

  4. Définir les conditions de stop loss et de profit pour suivre la tendance du marché en vue de réaliser des bénéfices, tout en contrôlant les risques.

Les avantages

  1. La combinaison de deux indicateurs permet de déterminer plus précisément l'orientation de la tendance du marché.

  2. La courbe lisse de BlueWave évite les biais des valeurs aberrantes, rendant le jugement de tendance plus fiable.

  3. Les IFM peuvent déterminer le flux de trésorerie, évitant ainsi les pertes dues à de fausses fuites.

  4. La stratégie comporte peu de paramètres et est facile à mettre en œuvre et à utiliser.

  5. Des paramètres de stop loss et de prise de profit flexibles aident à contrôler les risques de négociation.

  6. Les sessions de négociation peuvent être réglées pour éviter une volatilité anormale pendant des heures de marché spécifiques.

Les risques

  1. La poursuite de la tendance à la baisse peut entraîner des positions courtes et des pertes successives.

  2. Des signaux erronés peuvent conduire à être piégés après avoir pénétré dans des positions.

  3. Un stop-loss trop grand peut amplifier les pertes.

  4. La volatilité élevée peut souvent atteindre des points de stop-loss.

  5. Une mauvaise optimisation des paramètres peut entraîner une mauvaise performance de la stratégie.

  6. Les signaux de négociation trop fréquents peuvent augmenter les coûts de transaction et les dérapages.

Amélioration

  1. Optimiser les paramètres de BlueWave et MFI pour des signaux plus stables et fiables.

  2. Incorporer des indicateurs de tendance pour éviter des pertes courtes soutenues.

  3. Ajustez dynamiquement les ratios stop loss/take profit pour réduire la probabilité d'être pris au piège.

  4. Améliorer les conditions d'entrée pour réduire les faux signaux.

  5. Considérez la taille de la position pour éviter de courir après les rallies et les dépôts.

  6. Combinez avec des modèles d'apprentissage automatique pour des points d'entrée et de sortie plus précis.

Conclusion

Cette stratégie combine les indicateurs BlueWave et MFI pour déterminer la direction de la tendance, en allant long sur les tendances haussières et court sur les tendances baissières, en suivant efficacement les tendances du marché pour les bénéfices. Cependant, des risques existent dans les paramètres, les paramètres stop loss/take profit, les tendances baissières soutenues, etc., nécessitant une optimisation supplémentaire de l'ajustement des paramètres, des mécanismes de stop loss, des conditions de filtrage, etc. pour améliorer les performances et la robustesse de la stratégie.


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

// @version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Bunghole 2021
strategy(title="Crypto Squeeze Strategy", initial_capital = 100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0, currency = 'USD', overlay=true)

//// Stoploss and Take Profit Parameters
// Enable Long Strategy
enable_long_strategy = input(true, title="Enable Long Strategy", group="SL/TP For Long Strategy",inline="1")
long_stoploss_value = input(defval=50, title='Stoploss %', type=input.float, minval=0.1, group="SL/TP For Long Strategy",inline="2")
long_stoploss_percentage = (close * (long_stoploss_value / 100)) / syminfo.mintick
long_takeprofit_value = input(defval=50, title='Take Profit %', type=input.float, minval=0.1, group="SL/TP For Long Strategy",inline="2")
long_takeprofit_percentage = (close * (long_takeprofit_value / 100)) / syminfo.mintick

// Enable Short Strategy
enable_short_strategy = input(true, title="Enable Short Strategy", group="SL/TP For Short Strategy",inline="3")
short_stoploss_value = input(defval=50, title='Stoploss %', type=input.float, minval=0.1, group= "SL/TP For Short Strategy",inline="4")
short_stoploss_percentage = (close * (short_stoploss_value / 100)) / syminfo.mintick
short_takeprofit_value = input(defval=50, title='Take Profit %', type=input.float, minval=0.1, group="SL/TP For Short Strategy",inline="4")
short_takeprofit_percentage = (close * (short_takeprofit_value / 100)) / syminfo.mintick

// Plot Stoploss & Take Profit Levels
long_stoploss_price = strategy.position_avg_price * (1 - long_stoploss_value/100)
long_takeprofit_price = strategy.position_avg_price * (1 + long_takeprofit_value/100)
short_stoploss_price = strategy.position_avg_price * (1 + short_stoploss_value/100)
short_takeprofit_price = strategy.position_avg_price * (1 - short_takeprofit_value/100)
plot(enable_long_strategy and not enable_short_strategy ? long_stoploss_price: na, color=#ff0000, style=plot.style_linebr, linewidth=2, title="Long SL Level")
plot(enable_long_strategy and not enable_short_strategy ? long_takeprofit_price: na, color=#008000, style=plot.style_linebr, linewidth=2, title="Long TP Level")
plot(enable_short_strategy and not enable_long_strategy ? short_stoploss_price: na, color=#ff0000, style=plot.style_linebr, linewidth=2, title="Short SL Level")
plot(enable_short_strategy and not enable_long_strategy ? short_takeprofit_price: na, color=#008000, style=plot.style_linebr, linewidth=2, title="Short TP Level")

// Date Range
start_date = input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=31, group="Date Range")
start_month = input(title="Start Month", type=input.integer, defval=1, minval=1, maxval=12, group="Date Range")
start_year = input(title="Start Year", type=input.integer, defval=1804, minval=1800, maxval=3000, group="Date Range")
end_date = input(title="End Date", type=input.integer, defval=1, minval=1, maxval=3, group="Date Range")
end_month = input(title="End Month", type=input.integer, defval=1, minval=1, maxval=12, group="Date Range")
end_year = input(title="End Year", type=input.integer, defval=2077, minval=1800, maxval=3000, group="Date Range")
in_date_range = (time >= timestamp(syminfo.timezone, start_year, start_month, start_date, 0, 0)) and (time < timestamp(syminfo.timezone, end_year, end_month, end_date, 0, 0))


//// Indicator Inputs
// Lazy Bear's Momentum Indicator
BlueWave = linreg(close - avg(avg(highest(high, 20), lowest(low, 20)), sma(close, 20)), 20, 0)

// Replicated version of Crypto Face's MFI Indicator
mfiUpper = sum(volume * (change(hlc3) <= 0 ? 0 : hlc3), 58)
mfiLower = sum(volume * (change(hlc3) >= 0 ? 0 : hlc3), 58)
_mfiRsi(mfiUpper, mfiLower) =>
    if mfiLower == 0
        100
    if mfiUpper == 0
        0
	100.0 - (100.0 / (1.0 + mfiUpper / mfiLower))

mf = _mfiRsi(mfiUpper, mfiLower)
mfi = (mf - 50) * 3


//// Strategy
// Creating Long and Short Strategy
buy_signal = crossover(BlueWave, 0) and mfi > 0 
sell_signal = crossunder(BlueWave, 0) and mfi < 0 

// Long Strategy
if buy_signal and in_date_range and enable_long_strategy == true
    strategy.entry("Long", true, when=buy_signal, alert_message="Open Long Position")
    strategy.exit("Long  SL/TP", from_entry="Long", loss=long_stoploss_percentage, profit=long_takeprofit_percentage, alert_message="Your Long SL/TP Limit As Been Triggered.")
    strategy.close("Long", when=sell_signal, alert_message="Close Long Position")

// Short Strategy
if sell_signal and in_date_range and enable_short_strategy == true
    strategy.entry("Short", false, when = sell_signal, alert_message="Open Short Position")
    strategy.exit("Short SL/TP", from_entry="Short", loss=short_stoploss_percentage, profit=short_takeprofit_percentage, alert_message="Your Short SL/TP Limit As Been Triggered.")
    strategy.close("Short", when=buy_signal, alert_message="Close Short Position")


Plus de