Stratégie basse-haute tendance

Auteur:ChaoZhang est là., Date: 2023-11-23 11:03:18
Les étiquettes:

img

Résumé

Cette stratégie est conçue sur la base du principe du marché consistant à acheter bas et à vendre haut. Elle suit les prix les plus élevés et les plus bas sur une certaine période, établit une position longue lorsque le prix franchit le prix le plus bas et ferme la position lorsque le prix tombe en dessous du prix le plus élevé ou que la condition de prise de profit est remplie.

La logique de la stratégie

Calcul du prix le plus élevé et le prix le plus bas

  • Prix le plus bas (lowcriteria): Appeler la fonction ta.lowest pour calculer le prix le plus bas sur la période de rétrospective définie par l'utilisateur (par défaut 20 barres) et tracer la ligne de prix la plus basse.

  • Prix le plus élevé (critères élevés): Appeler la fonction ta.highest pour calculer le prix le plus élevé sur la période de rétrospective définie par l'utilisateur (défaut 10 barres) et tracer la ligne de prix la plus élevée.

Signal d'entrée

Lorsque le prix actuel franchit la ligne de prix la plus basse, un signal d'achat est déclenché pour établir une position longue.

Signal de sortie

Deux méthodes de sortie sont proposées:

  1. Profit de prise fixe: Fermer la position en vue d'un profit lorsque le prix atteint le niveau de prise de profit prédéfini (par exemple 8% au-dessus du prix d'entrée).

  2. Décomposition du prix le plus élevé: Fermer la position pour réduire les pertes lorsque le prix tombe en dessous de la ligne de prix la plus élevée, en jugeant un renversement de tendance.

Filtre de tendance

Ajoutez une ligne EMA pour déterminer la direction de la tendance. Permettez d'acheter uniquement lorsque le prix est au-dessus de la ligne EMA (une tendance haussière). Ce filtre peut être activé ou désactivé.

Analyse des avantages

  • Adopter la stratégie classique consistant à acheter à bas prix et à vendre à prix élevé, en s'alignant sur les fondamentaux du marché.

  • Ajoutez un jugement de tendance pour éviter une ouverture fréquente lors de fluctuations de prix.

  • Fournir deux options de sortie pour poursuivre des bénéfices élevés ou réduire les pertes.

  • Les paramètres personnalisables s'adaptent à un plus grand nombre d'environnements de marché.

  • Une énorme marge d'optimisation de la stratégie par le réglage des paramètres, la conception des filtres, etc.

Analyse des risques

  • Le niveau fixe des bénéfices ne s'ajuste pas en fonction des mouvements réels du marché, ce qui entraîne une prise de bénéfices prématurée ou un objectif de bénéfices insuffisant.

  • La vente à la ventilation du prix le plus élevé peut déjà générer d'énormes pertes, incapable de contrôler efficacement les pertes.

  • Le jugement de tendance de l'EMA ne regarde qu'à une certaine période, éventuellement en retard par rapport au changement de tendance réel.

  • Les résultats des tests antérieurs ne peuvent pas représenter l'avenir.

Directions d'optimisation

  • Ajoutez des méthodes de prise de profit telles que l'arrêt de suivi, la sortie partielle, etc. pour ajuster dynamiquement le niveau de prise de profit.

  • Optimiser les signaux de sortie, par exemple les sorties partielles, en ajoutant d'autres indicateurs.

  • Améliorer le jugement des tendances en incorporant plus d'indicateurs ou d'apprentissage automatique.

  • Optimiser les paramètres par des backtests plus étendus pour trouver des ensembles optimaux.

  • Ajouter des méthodes de stop loss pour mieux contrôler les pertes.

Résumé

Cette stratégie applique généralement le principe classique d'achat bas et de vente élevée et peut bien fonctionner dans certaines conditions. Mais il y a encore place à l'amélioration via l'ajustement des paramètres, l'optimisation de la sortie, les mécanismes de stop loss, etc. Cet article fournit une analyse approfondie de la logique, des avantages, des inconvénients et des directions d'optimisation de la stratégie, dans le but de partager l'idée de la stratégie, ainsi que de rappeler aux investisseurs les risques et de négocier prudemment avec des stratégies quantitatives.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// @version=5
// Author = TradeAutomation


strategy(title="Low-High-Trend Strategy", shorttitle="Low-High-Trend Strategy", process_orders_on_close=true, overlay=true, commission_type=strategy.commission.cash_per_order, commission_value=1, slippage=3, initial_capital = 25000, margin_long=50, margin_short=50, default_qty_type=strategy.percent_of_equity, default_qty_value=110)


// Backtest Date Range Inputs // 
StartTime = input(defval=timestamp('01 Jan 2000 05:00 +0000'), title='Start Time')
EndTime = input(defval=timestamp('01 Jan 2099 00:00 +0000'), title='End Time')
InDateRange = true

// Strategy Calculations //
lowcriteria = ta.lowest(close, input(20, "Lowest Price Lookback", tooltip="The strategy will BUY when the price crosses over the lowest it has been in the last X amount of bars"))[1]
highcriteria = ta.highest(close, input(10, "Highest Price Lookback", tooltip="If Take-Profit is not checked, the strategy will SELL when the price crosses under the highest it has been in the last X amount of bars"))[1]
plot(highcriteria, color=color.green)
plot(lowcriteria, color=color.red)

// Take Profit //
TakeProfitInput = input(true, "Sell with Take-Profit % intead of highest price cross?")
TakeProfit = ta.crossover(close,strategy.position_avg_price*(1+(.01*input.float(8, title="Take Profit %", step=.25))))

// Operational Functions //
TrendFilterInput = input(true, "Only buy when price is above EMA trend?")
ema = ta.ema(close, input(200, "EMA Length"))
TrendisLong = (close>ema)
plot(ema)

// Entry & Exit Functions//
if (InDateRange and TrendFilterInput==true)
    strategy.entry("Long", strategy.long, when = ta.crossover(close, lowcriteria) and TrendisLong)
if (InDateRange and TrendFilterInput==false)
    strategy.entry("Long", strategy.long, when = ta.crossover(close, lowcriteria))
if (InDateRange and TakeProfitInput==true)
    strategy.close("Long", when = TakeProfit)
if (InDateRange and TakeProfitInput==false)
    strategy.close("Long", when = ta.crossunder(close, highcriteria))
if (not InDateRange)
    strategy.close_all()
    

Plus de