Stratégie de compression quantitative des vagues


Date de création: 2023-11-14 14:04:24 Dernière modification: 2023-11-14 14:04:24
Copier: 0 Nombre de clics: 640
1
Suivre
1617
Abonnés

Stratégie de compression quantitative des vagues

Aperçu

L’idée principale de cette stratégie est de combiner les indicateurs dynamiques de Lazy Bear et les indicateurs MFI de Crypto Face, pour acheter en hausse et vendre en baisse, pour réaliser une stratégie de trading quantitative qui suit les tendances du marché.

Principe de stratégie

  1. L’indicateur de dynamique BlueWave de Lazy Bear est utilisé pour déterminer la direction de la tendance en calculant la régression linéaire du prix de clôture par rapport aux hauts, aux bas et aux prix de clôture du 20e jour. Lorsque BlueWave dépasse 0, la tendance est à la hausse; lorsque BlueWave dépasse 0, la tendance est à la baisse.

  2. L’indicateur MFI, amélioré par Crypto Face, est utilisé pour déterminer la direction des flux de fonds en calculant les hausses et les baisses des 58 derniers jours et le volume des transactions. Les MFI supérieurs à 0 indiquent les flux de fonds entrants et les MFI inférieurs à 0 indiquent les flux de fonds sortants.

  3. Lorsque BlueWave dépasse 0 et que le MFI est supérieur à 0, un signal d’achat est émis pour ouvrir une position plus élevée; lorsque BlueWave dépasse 0 et que le MFI est inférieur à 0, un signal de vente est émis pour ouvrir une position vide.

  4. Il s’agit de mettre en place des conditions de stop loss et de suivre les tendances du marché pour réaliser des bénéfices tout en contrôlant les risques.

Avantages stratégiques

  1. La combinaison de ces deux indicateurs permet de déterminer plus précisément la direction des tendances du marché.

  2. Les indicateurs BlueWave permettent d’aplanir la courbe, d’éviter d’être influencés par des données anormales et de mieux évaluer les tendances du marché.

  3. L’indicateur MFI permet d’évaluer les flux de fonds et d’éviter les pertes en cas de fausse rupture.

  4. Les paramètres de stratégie sont moins nombreux et plus faciles à mettre en œuvre et à utiliser.

  5. Il est possible de régler les conditions de stop loss et de stop loss de manière flexible pour contrôler le risque de transaction.

  6. Il est possible de régler les périodes d’achat et de vente pour éviter les fluctuations anormales du marché à un moment donné.

Risque stratégique

  1. La stratégie peut se poursuivre en cours de baisse de cours et entraîner des pertes si le cours baisse.

  2. Si l’indicateur produit un faux signal, il peut être placé après l’entrée.

  3. Le risque d’augmentation des pertes est trop élevé.

  4. Il y a une forte probabilité que le stop loss soit franchi en cas de forte volatilité.

  5. L’optimisation de paramètres incorrecte peut entraîner une mauvaise efficacité de la stratégie.

  6. Les stratégies génèrent des signaux de trading trop fréquents, augmentant les frais de transaction et les coûts des points de glissement.

Direction d’optimisation

  1. Optimiser les paramètres de BlueWave et MFI pour rendre l’indicateur plus stable et plus fiable.

  2. Le taux d’inflation est le plus élevé de la région, avec un taux d’inflation moyen de 2,5%.

  3. Adaptez dynamiquement le ratio de stop-loss et de stop-loss pour réduire la probabilité de prise de risque.

  4. Optimiser les conditions d’ouverture des positions et réduire les faux signaux.

  5. Envisagez d’ajouter un contrôle de position afin d’éviter les pertes de suivi.

  6. Les points d’achat et de vente sont plus précis grâce à des algorithmes d’apprentissage automatique.

Résumer

La stratégie utilise une combinaison de deux indicateurs utilisant BlueWave et MFI pour déterminer la direction de la tendance, en faisant plus lorsque la tendance est à la hausse et en faisant moins lorsque la tendance est à la baisse, pour suivre efficacement la tendance du marché. Cependant, il existe également des risques liés au paramétrage, au stop loss, à la baisse continue, etc. Il est nécessaire d’optimiser davantage le paramétrage, le mécanisme de stop loss, les conditions de filtrage, etc.

Code source 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")