Stratégie de sélection de plage de temps de backtesting adaptatif basée sur la superposition de double MA


Date de création: 2024-01-05 12:12:10 Dernière modification: 2024-01-05 12:12:10
Copier: 0 Nombre de clics: 589
1
Suivre
1621
Abonnés

Stratégie de sélection de plage de temps de backtesting adaptatif basée sur la superposition de double MA

Aperçu

L’idée centrale de cette stratégie est de mettre en place un cadre permettant une sélection flexible des plages de temps de retour, permettant aux utilisateurs de définir automatiquement ou manuellement les heures de début de retour en fonction de leurs besoins.

La stratégie offre quatre options de sélection de la plage de dates via des paramètres d’entrée: utilisation de l’historique complet, des jours les plus récents, des semaines les plus récentes ou des plages de dates manuelles. La stratégie définit dynamiquement la fenêtre de rétroaction en fonction de la plage de dates sélectionnée, tandis que la logique de transaction reste inchangée, ce qui permet de comparer les différences de performances de la stratégie dans différentes fenêtres de temps.

Principe de stratégie

La stratégie est composée d’un module de sélection de la plage de dates de retracement et d’un module de stratégie de négociation de double MA.

Module de sélection de la plage de dates de détection

  1. Quatre options de date sont disponibles: toutes les données historiques (ALL), les jours les plus récents (DAYS), les semaines les plus récentes (WEEKS) et la date manuelle (MANUAL).
  2. Selon la gamme choisie, le temps de début et d’arrêt est mesuré à l’aide du réglage dynamique de conversion de la boîte de temps.
  3. Utilisez la fonction de condition temporelle window ((() pour filtrer les lignes K, et seulement dans la plage de dates sélectionnée.

Module de stratégie de négociation à double MA

  1. La période de MA rapide est fastMA, par défaut 14; la période de MA lente est slowMA, par défaut 28.
  2. Lorsque le MA rapide est traversé par le MA lent, faites plus; lorsque le MA rapide est traversé par le MA lent, placez-vous à plat.
  3. Dessinez la courbe de MA rapidement.

Analyse des forces stratégiques

  1. Il est possible de choisir avec souplesse différentes périodes de répétition, sans restriction, pour répondre aux différents besoins de l’expérience.
  2. On peut tester l’effet de différents paramètres cycliques sur la même période de temps, avec des résultats comparables.
  3. La modification de la logique des transactions est simple et peut être utilisée comme un cadre pour d’autres stratégies.
  4. Les stratégies de double MA sont simples et faciles à comprendre.

Analyse des risques et des solutions

  1. Les stratégies de double MA sont plus rudimentaires et il y a des problèmes de transactions fréquentes. Des optimisations telles que l’ajout d’un mécanisme de stop-loss peuvent être envisagées.
  2. Il faut être prudent de définir manuellement la plage de dates et d’éviter d’utiliser les mauvaises dates. Des avertissements peuvent être affichés.
  3. Une période de test plus longue que le temps de rétro-analyse historique peut entraîner une augmentation du cycle de test. Il est possible d’ajouter des points de glissement ou de réduire les frais de transaction fréquents.

Orientation de l’optimisation de la stratégie

  1. L’augmentation du jugement logique de l’arrêt des pertes et la réduction du risque de pertes.
  2. Le filtrage des pools d’actions, les actions les plus pertinentes dans l’indice de préférence, améliorent la stabilité.
  3. Augmentation des filtres des signaux de transaction afin de filtrer les signaux instables sur une période donnée et de réduire les transactions inutiles.
  4. Tester les performances des différentes catégories d’indices pour trouver les meilleures variétés.

Résumer

La stratégie est un cadre de date de retour générique, flexible et personnalisable pour répondre aux différents besoins de test des utilisateurs. La stratégie peut être rapidement vérifiée et comparée avec une logique de transaction simple et efficace de double MA.

Code source de la stratégie
/*backtest
start: 2022-12-29 00:00:00
end: 2024-01-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title = "How To Auto Set Date Range", shorttitle = " ", overlay = true)

// Revision:        1
// Author:          @allanster 

// === INPUT MA ===
fastMA = input(defval = 14, title = "FastMA", type = input.integer, minval = 1, step = 1)
slowMA = input(defval = 28, title = "SlowMA", type = input.integer, minval = 1, step = 1)

// === INPUT BACKTEST RANGE ===
useRange     = input(defval = "WEEKS", title = "Date Range", type = input.string, confirm = false, options = ["ALL", "DAYS", "WEEKS", "MANUAL"])
nDaysOrWeeks = input(defval = 52, title = "# Days or Weeks", type = input.integer, minval = 1)
FromMonth    = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay      = input(defval = 15, title = "From Day", minval = 1, maxval = 31)
FromYear     = input(defval = 2019, title = "From Year", minval = 2014)
ToMonth      = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay        = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
ToYear       = input(defval = 9999, title = "To Year", minval = 2014)

// === FUNCTION EXAMPLE ===
window() => true

// === LOGIC ===
buy  = crossover(sma(close, fastMA), sma(close, slowMA))         // buy when fastMA crosses over slowMA
sell = crossunder(sma(close, fastMA), sma(close, slowMA))        // sell when fastMA crosses under slowMA

// === EXECUTION ===
strategy.entry("L", strategy.long, when=window() and buy)        // buy long when "within window of time" AND crossover
strategy.close("L", when=window() and sell)                      // sell long when "within window of time" AND crossunder         

// === PLOTTING ===
plot(sma(close, fastMA), title = 'FastMA', color = color.aqua, linewidth = 2, style = plot.style_line)    // plot FastMA
plot(sma(close, slowMA), title = 'SlowMA', color = color.yellow, linewidth = 2, style = plot.style_line)  // plot SlowMA