Stratégie de négociation personnalisée pour le jour de la semaine

Auteur:ChaoZhang est là., Date: le 26 septembre 2023 à 20h49
Les étiquettes:

Résumé

Il s'agit d'une stratégie de trading longue/courte personnalisée pour le bitcoin qui permet de backtesting longing ou shorting sur différents jours de la semaine.

Assurez-vous que vous êtes sur le calendrier quotidien lors de l'affichage des performances et de l'historique des transactions pour vous assurer que le script fonctionne comme prévu et que vous disposez des données historiques maximales de TradingView.

La logique de la stratégie

La logique de base de la stratégie est de permettre à l'utilisateur de choisir long, court ou aucun trading pour chaque jour de la semaine.

Tout d'abord, il permet à l'utilisateur de définir la plage de dates pour le backtesting, y compris le mois de début, le jour, l'année et le mois de fin, le jour, l'année.

Ensuite, il utilise un tableau de temps pour stocker la représentation numérique de chaque jour de la semaine, du dimanche 0 au samedi 6.

Un autre tableau timeframes_options est utilisé pour stocker le choix de long, court ou aucun trading pour chaque jour.

Dans une boucle for, la stratégie vérifie si le jour de négociation actuel correspond à un jour dans le tableau des délais.

Si l'option n'est pas None, elle ouvre une position dans la direction appropriée en fonction du long ou du short choisi.

Ainsi, la stratégie peut négocier long/short sur la fourchette de dates fixée en fonction des paramètres pour chaque jour de la semaine.

Analyse des avantages

Le principal avantage de cette stratégie est qu'elle offre un trading long/short hautement personnalisable.

Contrairement aux stratégies de négociation hebdomadaires fixes, celle-ci peut être ajustée de manière flexible.

La plage de dates de backtest est également très flexible, ce qui permet de tester n'importe quelle période spécifiée par l'utilisateur pour voir quelles combinaisons de dates fonctionnent le mieux.

La logique de trading est très claire et simple, facile à comprendre et à modifier.

La stratégie ferme également automatiquement les positions en cas de changement de direction chaque jour, évitant ainsi les risques inutiles.

Analyse des risques

Le principal risque réside dans le fait que les options de négociation quotidienne choisies par l'utilisateur peuvent ne pas correspondre à toutes les fourchettes de dates.

Par exemple, des séances plus longues en semaine et des week-ends plus courts peuvent être efficaces pour certaines périodes, mais échouer dans d'autres.

Il est donc nécessaire de tester soigneusement les fourchettes de dates et de ne pas s'appuyer sur un seul résultat de backtest.

Un autre risque est l'incapacité de réduire les pertes à temps lorsque la direction change quotidiennement.

Dans l'ensemble, la stratégie repose fortement sur l'optimisation et nécessite des tests suffisants pour trouver des ensembles de paramètres adaptés aux différentes conditions du marché.

Directions d'optimisation

La stratégie peut être améliorée sous plusieurs aspects:

  1. Ajoutez une logique de stop loss sur les changements de direction quotidiens, en définissant des stops de trailing lorsque les positions sont rentables pour limiter les retraits.

  2. Ajoutez un filtre, prenant uniquement des signaux sur la rupture de certains jours haut / bas, évitant les transactions sans tendance.

  3. Réduire la taille des positions en période de forte volatilité et l'augmenter lorsque la volatilité est faible pour contrôler le risque.

  4. Ajoutez l'apprentissage automatique aux sélections de jour de négociation, en jugeant la probabilité de chaque jour sur la base des données historiques, générant des directions quotidiennes dynamiques.

  5. Ajoutez de la logique pour gérer les événements soudains comme les grandes nouvelles en faisant une pause dans les transactions pour éviter d'être pris de côté.

Conclusion

Cette stratégie fournit une capacité de trading long / court très flexible grâce à des sélections de direction quotidiennes. Les utilisateurs peuvent librement combiner les tests pour des paramètres optimaux. Mais elle a des exigences d'optimisation élevées, nécessitant des tests approfondis pour trouver des paramètres adaptés à différents marchés. L'ajout d'améliorations telles que des arrêts, des filtres, des ajustements dynamiques peut réduire le risque et améliorer la robustesse.


/*backtest
start: 2022-09-19 00:00:00
end: 2023-09-25 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=4
// strategy("Day of Week Custom Buy/Sell Strategy", overlay=true, currency=currency.USD, default_qty_value=1.0,initial_capital=30000.00,default_qty_type=strategy.percent_of_equity)

frommonth = input(defval = 6, minval = 01, maxval = 12, title = "From Month")
fromday = input(defval = 14, minval = 01, maxval = 31, title = "From day")
fromyear = input(defval = 2021, minval = 1900, maxval = 2100, title = "From Year")

tomonth = input(defval = 12, minval = 01, maxval = 12, title = "To Month")
today = input(defval = 31, minval = 01, maxval = 31, title = "To day")
toyear = input(defval = 2100, minval = 1900, maxval = 2100, title = "To Year")

timeframes = array.new_int(7, 1)
timeframes_options = array.new_string(7, 'None')

array.set(timeframes,0,7)
array.set(timeframes_options,0, input(defval='None', options=['Long','Short','None'], title='sunday'))
array.set(timeframes,1,1)
array.set(timeframes_options,1, input(defval='Long', options=['Long','Short','None'], title='monday'))
array.set(timeframes,2,2)
array.set(timeframes_options,2, input(defval='Long', options=['Long','Short','None'], title='tuesday'))
array.set(timeframes,3,3)
array.set(timeframes_options,3, input(defval='Long', options=['Long','Short','None'], title='wednesday'))
array.set(timeframes,4,4)
array.set(timeframes_options,4, input(defval='None', options=['Long','Short','None'], title='thursday'))
array.set(timeframes,5,5)
array.set(timeframes_options,5, input(defval='None', options=['Long','Short','None'], title='friday'))
array.set(timeframes,6,6)
array.set(timeframes_options,6, input(defval='None', options=['Long','Short','None'], title='saturday'))



for i = 0 to array.size(timeframes) - 1
    
    if dayofweek == array.get(timeframes, i) and array.get(timeframes_options, i) != array.get(timeframes_options, i==0?6:i-1)
        strategy.close_all()

    if dayofweek == array.get(timeframes, i) and array.get(timeframes_options, i)!='None' and array.get(timeframes_options, i) != array.get(timeframes_options, i==0?6:i-1)
        if array.get(timeframes_options, i) == 'Long'
            strategy.entry("Long", strategy.long, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00)))
        else if array.get(timeframes_options, i) == 'Short'
            strategy.entry("Short", strategy.short, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00)))


Plus de