Stratégie de trading d'énergie à intervalle de temps


Date de création: 2023-11-23 15:32:00 Dernière modification: 2023-11-23 15:32:00
Copier: 0 Nombre de clics: 603
1
Suivre
1617
Abonnés

Stratégie de trading d’énergie à intervalle de temps

Aperçu

La stratégie de force d’achat et de vente dans les fuseaux horaires est une stratégie qui utilise le mouvement des prix des actions dans les différentes fuseaux horaires de la journée. Elle détermine le meilleur moment pour faire du trading dans les 48 heures et demie de la journée.

Principe de stratégie

La logique centrale de cette stratégie est que les actions ont tendance à suivre une régularité dans leurs mouvements de prix à différentes périodes de la journée. La stratégie consiste à définir un intervalle de 48 heures et demie et à choisir entre trois options pour faire plus, faire moins ou ne pas faire d’opérations dans chaque intervalle. Lorsque le temps entre dans un intervalle, si le réglage est long, le réglage est long; si le réglage est vide, le réglage est vide.

Par exemple, si la stratégie est définie comme étant en surplus entre 6h30 et 7h30, la stratégie est en surplus à 6h30; si elle est définie comme étant en surplus entre 7h00 et 7h30, la stratégie est en surpoids avant 7h00 et en surpoids avant 7h00.

L’avantage de cette stratégie est qu’elle permet de capturer les changements de prix des actions au cours d’une journée. Le risque est que les changements de prix peuvent changer avec le temps, ce qui peut entraîner l’inefficacité de la stratégie.

Analyse des avantages

Le plus grand avantage de cette stratégie est qu’elle exploite les caractéristiques des actions Price is Right, c’est-à-dire que les prix ont des moyennes et des écarts différents dans différentes périodes de temps. Cela permet à la stratégie d’utiliser une stratégie de négociation de gamme pendant les périodes de forte volatilité, d’utiliser une stratégie de tendance pendant les périodes de moindre volatilité et de répondre de manière flexible aux changements du marché.

Un autre avantage est la flexibilité dans la définition des paramètres. La combinaison optimale de paramètres peut être choisie en fonction des caractéristiques des différentes actions, ce qui couvre partiellement le risque d’incertitude.

Analyse des risques

Le principal risque provient de l’instabilité hypothétique. Si le cours d’une action change au cours d’une journée, les prévisions de bénéfices de la stratégie sont affectées. Ces changements peuvent provenir des fondamentaux de l’action ou d’un événement Black Swan dans le grand environnement.

En outre, les transactions trop fréquentes peuvent entraîner des risques en termes de frais de transaction. Si le volume de transactions n’est pas suffisamment soutenu, l’accumulation des frais de transaction peut également affecter les bénéfices finaux.

Direction d’optimisation

On peut envisager d’introduire des modèles d’apprentissage automatique pour réaliser un ajustement dynamique des paramètres. Par exemple, on peut former un modèle LSTM pour prédire le prix d’une action pour la prochaine période de temps, en ajustant les paramètres de plus de blanchiment.

Ou bien, on peut essayer de combiner les indices fondamentaux des actions pour déterminer si la loi du changement de prix est susceptible de changer et ainsi déterminer le moment de lancer la stratégie.

Résumer

Une stratégie de négociation algorithmique efficace, flexible et contrôlable par les paramètres. L’orientation future de l’optimisation peut être considérée comme l’introduction de modèles d’apprentissage automatique ou combinée à un jugement fondamental, ce qui rend la stratégie plus rentable et plus résistante au risque.

Code source de la stratégie
/*backtest
start: 2023-10-23 00:00:00
end: 2023-11-22 00:00:00
period: 1h
basePeriod: 15m
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("Timeframe Time of Day Buying and Selling Strategy", overlay=true)

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_string(48, '')
timeframes_options = array.new_string(49, 'None')

array.set(timeframes,0,'2330-0000')
array.set(timeframes_options,0, input(defval='None', options=['Long','Short','None'], title='0000-0030'))
array.set(timeframes,1,'0000-0030')
array.set(timeframes_options,1, input(defval='Long', options=['Long','Short','None'], title='0030-0100'))
array.set(timeframes,2,'0030-0100')
array.set(timeframes_options,2, input(defval='Long', options=['Long','Short','None'], title='0100-0130'))
array.set(timeframes,3,'0100-0130')
array.set(timeframes_options,3, input(defval='Long', options=['Long','Short','None'], title='0130-0200'))
array.set(timeframes,4,'0130-0200')
array.set(timeframes_options,4, input(defval='Long', options=['Long','Short','None'], title='0200-0230'))
array.set(timeframes,5,'0200-0230')
array.set(timeframes_options,5, input(defval='None', options=['Long','Short','None'], title='0230-0300'))
array.set(timeframes,6,'0230-0300')
array.set(timeframes_options,6, input(defval='None', options=['Long','Short','None'], title='0300-0330'))
array.set(timeframes,7,'0300-0330')
array.set(timeframes_options,7, input(defval='None', options=['Long','Short','None'], title='0330-0400'))
array.set(timeframes,8,'0330-0400')
array.set(timeframes_options,8, input(defval='None', options=['Long','Short','None'], title='0400-0430'))
array.set(timeframes,9,'0400-0430')
array.set(timeframes_options,9, input(defval='None', options=['Long','Short','None'], title='0430-0500'))
array.set(timeframes,10,'0430-0500')
array.set(timeframes_options,10, input(defval='None', options=['Long','Short','None'], title='0500-0530'))
array.set(timeframes,11,'0500-0530')
array.set(timeframes_options,11, input(defval='None', options=['Long','Short','None'], title='0530-0600'))
array.set(timeframes,12,'0530-0600')
array.set(timeframes_options,12, input(defval='None', options=['Long','Short','None'], title='0600-0630'))
array.set(timeframes,13,'0600-0630')
array.set(timeframes_options,13, input(defval='None', options=['Long','Short','None'], title='0630-0700'))
array.set(timeframes,14,'0630-0700')
array.set(timeframes_options,14, input(defval='None', options=['Long','Short','None'], title='0700-0730'))
array.set(timeframes,15,'0700-0730')
array.set(timeframes_options,15, input(defval='None', options=['Long','Short','None'], title='0730-0800'))
array.set(timeframes,16,'0730-0800')
array.set(timeframes_options,16, input(defval='None', options=['Long','Short','None'], title='0800-0830'))
array.set(timeframes,17,'0800-0830')
array.set(timeframes_options,17, input(defval='None', options=['Long','Short','None'], title='0830-0900'))
array.set(timeframes,18,'0830-0900')
array.set(timeframes_options,18, input(defval='None', options=['Long','Short','None'], title='0900-0930'))
array.set(timeframes,19,'0900-0930')
array.set(timeframes_options,19, input(defval='None', options=['Long','Short','None'], title='0930-1000'))
array.set(timeframes,20,'0930-1000')
array.set(timeframes_options,20, input(defval='None', options=['Long','Short','None'], title='1000-1030'))
array.set(timeframes,21,'1000-1030')
array.set(timeframes_options,21, input(defval='None', options=['Long','Short','None'], title='1030-1100'))
array.set(timeframes,22,'1030-1100')
array.set(timeframes_options,22, input(defval='None', options=['Long','Short','None'], title='1100-1130'))
array.set(timeframes,23,'1100-1130')
array.set(timeframes_options,23, input(defval='None', options=['Long','Short','None'], title='1130-1200'))
array.set(timeframes,24,'1130-1200')
array.set(timeframes_options,24, input(defval='None', options=['Long','Short','None'], title='1200-1230'))
array.set(timeframes,25,'1200-1230')
array.set(timeframes_options,25, input(defval='None', options=['Long','Short','None'], title='1230-1300'))
array.set(timeframes,26,'1230-1300')
array.set(timeframes_options,26, input(defval='None', options=['Long','Short','None'], title='1300-1330'))
array.set(timeframes,27,'1300-1330')
array.set(timeframes_options,27, input(defval='None', options=['Long','Short','None'], title='1330-1400'))
array.set(timeframes,28,'1330-1400')
array.set(timeframes_options,28, input(defval='None', options=['Long','Short','None'], title='1400-1430'))
array.set(timeframes,29,'1400-1430')
array.set(timeframes_options,29, input(defval='None', options=['Long','Short','None'], title='1430-1500'))
array.set(timeframes,30,'1430-1500')
array.set(timeframes_options,30, input(defval='None', options=['Long','Short','None'], title='1500-1530'))
array.set(timeframes,31,'1500-1530')
array.set(timeframes_options,31, input(defval='None', options=['Long','Short','None'], title='1530-1600'))
array.set(timeframes,32,'1530-1600')
array.set(timeframes_options,32, input(defval='None', options=['Long','Short','None'], title='1600-1630'))
array.set(timeframes,33,'1600-1630')
array.set(timeframes_options,33, input(defval='None', options=['Long','Short','None'], title='1630-1700'))
array.set(timeframes,34,'1630-1700')
array.set(timeframes_options,34, input(defval='None', options=['Long','Short','None'], title='1700-1730'))
array.set(timeframes,35,'1700-1730')
array.set(timeframes_options,35, input(defval='None', options=['Long','Short','None'], title='1730-1800'))
array.set(timeframes,36,'1730-1800')
array.set(timeframes_options,36, input(defval='None', options=['Long','Short','None'], title='1800-1830'))
array.set(timeframes,37,'1800-1830')
array.set(timeframes_options,37, input(defval='None', options=['Long','Short','None'], title='1830-1900'))
array.set(timeframes,38,'1830-1900')
array.set(timeframes_options,38, input(defval='None', options=['Long','Short','None'], title='1900-0930'))
array.set(timeframes,39,'1900-0930')
array.set(timeframes_options,39, input(defval='None', options=['Long','Short','None'], title='1930-2000'))
array.set(timeframes,40,'1930-2000')
array.set(timeframes_options,40, input(defval='None', options=['Long','Short','None'], title='2000-2030'))
array.set(timeframes,41,'2000-2030')
array.set(timeframes_options,41, input(defval='None', options=['Long','Short','None'], title='2030-2100'))
array.set(timeframes,42,'2030-2100')
array.set(timeframes_options,42, input(defval='None', options=['Long','Short','None'], title='2100-2130'))
array.set(timeframes,43,'2100-2130')
array.set(timeframes_options,43, input(defval='None', options=['Long','Short','None'], title='2130-2200'))
array.set(timeframes,44,'2130-2200')
array.set(timeframes_options,44, input(defval='None', options=['Long','Short','None'], title='2200-2230'))
array.set(timeframes,45,'2200-2230')
array.set(timeframes_options,45, input(defval='None', options=['Long','Short','None'], title='2230-2300'))
array.set(timeframes,46,'2230-2300')
array.set(timeframes_options,46, input(defval='None', options=['Long','Short','None'], title='2300-2330'))
array.set(timeframes,47,'2300-2330')
array.set(timeframes_options,47, input(defval='None', options=['Long','Short','None'], title='2330-0000'))


string_hour = hour<10?'0'+tostring(hour):tostring(hour)
string_minute = minute<10?'0'+tostring(minute):tostring(minute)
current_time = string_hour+string_minute


f_strLeft(_str, _n) =>
    string[] _chars = str.split(_str, "")
    int _len = array.size(_chars)
    int _end = min(_len, max(0, _n))
    string[] _substr = array.new_string(0)
    if _end <= _len
        _substr := array.slice(_chars, 0, _end)
    string _return = array.join(_substr, "")

f_strRight(_str, _n) =>
    string[] _chars = str.split(_str, "")
    int _len = array.size(_chars)
    int _beg = max(0, _len - _n)
    string[] _substr = array.new_string(0)
    if _beg < _len
        _substr := array.slice(_chars, _beg, _len)
    string _return = array.join(_substr, "")


for i = 0 to array.size(timeframes) - 1
    start_time = f_strLeft(array.get(timeframes, i), 4)
    end_time = f_strRight(array.get(timeframes, i), 4)
    
    if current_time == end_time and array.get(timeframes_options, i)!='None' and array.get(timeframes_options, i) != array.get(timeframes_options, i==47?0:i+1) and timestamp(toyear, tomonth, today, 00, 00)
        strategy.close_all()

    if current_time == start_time and array.get(timeframes_options, i)!='None' and array.get(timeframes_options, i) != array.get(timeframes_options, i==0?47: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)))