Il s’agit d’une stratégie de négociation multi-bureaux personnalisée pour Bitcoin. Elle vous permet de faire plus ou moins en fonction des différents jours de négociation de la semaine. Les prix peuvent avoir tendance à se déplacer dans une direction ou dans une autre direction sur les différents jours de négociation de la semaine.
Assurez-vous que vous utilisez des diagrammes de jour pour voir la performance et l’historique des transactions afin de vous assurer que le script fonctionne comme prévu et que vous obtenez le maximum de données historiques de la vue des transactions.
La logique centrale de cette stratégie est de permettre aux utilisateurs de choisir de faire des transactions multiples chaque jour de la semaine, des transactions à vide ou pas de transactions du tout.
Tout d’abord, il permet à l’utilisateur de définir une plage de dates pour le retour, comprenant le mois, la date et l’année de début et le mois, la date et l’année de fin.
Il utilise ensuite un ensemble de timeframes pour stocker la représentation numérique de chaque jour de la semaine, allant de 0 le dimanche à 6 le samedi.
Un autre ensemble, timeframes_options, est utilisé pour stocker les options pour effectuer des transactions à plusieurs, à vide ou à ne pas effectuer de transactions chaque jour.
Dans le cycle for, la stratégie vérifie si le jour de négociation en cours correspond à un jour donné dans l’arrayon des timeframes. Si elle correspond et que l’option est différente du jour précédent, elle ferme d’abord toutes les positions non liquidées.
Si l’option n’est pas sans fil, ouvrez la position dans la direction correspondante en fonction de la position de tête multiple ou de tête vide choisie.
Ainsi, la stratégie peut effectuer des transactions multi-héros selon les paramètres de chaque jour de la semaine, dans une plage de dates définie.
Le principal avantage de cette stratégie est qu’elle offre des transactions multi-points hautement personnalisées. Les utilisateurs peuvent choisir librement la direction dans laquelle ils négocient chaque jour de la semaine.
Contrairement à une stratégie de négociation hebdomadaire fixe, cette stratégie peut être adaptée de manière flexible. Si les résultats ne sont pas optimaux certains jours, il est facile de modifier et de négocier uniquement les autres jours.
La gamme de dates de retouche est également très flexible et permet de tester n’importe quelle période de temps spécifiée par l’utilisateur pour voir quelles combinaisons de dates fonctionnent le mieux.
La logique des transactions est très claire et simple, facile à comprendre et à modifier. L’utilisateur peut ajuster les paramètres sans avoir à programmer.
La stratégie permet également de liquider automatiquement les positions non liquidées lors de changements de direction quotidiens, évitant ainsi des risques inutiles.
Le principal risque de cette stratégie réside dans le fait que les options de transactions quotidiennes que l’utilisateur définit ne conviennent pas nécessairement à toutes les plages de dates.
Par exemple, le fait d’avoir plus de jours ouvrables que le week-end peut s’avérer efficace à un certain moment, mais peut échouer à un autre moment.
Par conséquent, il est nécessaire de tester avec prudence les différentes dates et de ne pas s’appuyer sur un seul test. Les paramètres doivent être ajustés en fonction de la situation du marché.
Un autre risque est de ne pas être en mesure d’arrêter la position en cours de liquidation en cas de changement de direction quotidienne. Cela peut entraîner une expansion des pertes. Cependant, la stratégie tente d’atténuer ce problème en utilisant la liquidation automatique.
Dans l’ensemble, la stratégie repose davantage sur l’optimisation des paramètres et nécessite suffisamment de tests pour trouver une combinaison de paramètres adaptée aux différentes conditions du marché.
Cette stratégie peut être optimisée par les éléments suivants:
Augmentation de la logique de stop loss lors des changements de direction quotidiens, réglage d’un stop loss mobile lorsque la position est rentable et réduction des retraits.
Ajout d’un filtre qui émet un signal lorsque le prix franchit le sommet ou le bas d’une certaine journée, afin d’éviter les échanges répétés en l’absence de tendance.
Réduire la taille de la position pendant les périodes de forte volatilité et augmenter la position pendant les périodes de faible volatilité, afin de contrôler le risque.
L’option d’ajouter de l’apprentissage automatique aux jours de négociation permet de déterminer la probabilité de négociation quotidienne en fonction des données historiques et de générer une orientation dynamique quotidienne.
Augmentation de la logique de traitement des événements inattendus, tels que la suspension des transactions en cas d’événement financier majeur, afin d’éviter d’être piégé.
La stratégie offre une grande flexibilité dans le choix de la direction quotidienne, offrant une capacité de négociation multi-points. L’utilisateur peut librement combiner des tests pour trouver les meilleurs paramètres. Cependant, la stratégie a des exigences d’optimisation élevées et nécessite de nombreux tests pour trouver des paramètres adaptés aux différents marchés.
/*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)))