Stratégie de swing trading quantitative basée sur plusieurs périodes de temps


Date de création: 2023-12-01 13:50:02 Dernière modification: 2023-12-01 13:50:02
Copier: 0 Nombre de clics: 767
1
Suivre
1619
Abonnés

Stratégie de swing trading quantitative basée sur plusieurs périodes de temps

Aperçu

Cette stratégie permet de suivre les transactions en identifiant les bandes de prix de Bitcoin en combinant des indicateurs quantifiés dans différentes périodes de temps. La stratégie utilise une période de 5 minutes pour détenir des bandes de profit sur une longue période.

Principe de stratégie

  1. L’indicateur RSI est basé sur le fuseau horaire de la ligne solaire et est calculé en utilisant le volume de transactions pour le calcul de la pondération et le filtrage des fausses ruptures.
  2. Le traitement de l’EMA de l’indicateur RSI de la ligne solaire pour construire l’indicateur de la bande de fréquence quantitative.
  3. La période de 5 minutes utilise l’indicateur de régression linéaire et l’indicateur HMA pour construire le signal de transaction.
  4. Les stratégies permettent de réaliser une convergence entre les différentes périodes de temps, en identifiant les longues bandes de prix moyennes, par une combinaison d’indicateurs et de signaux de négociation de bandes de temps quantifiées.

Analyse des avantages

  1. L’indicateur RSI pondéré par le volume de transactions permet d’identifier efficacement les bandes réelles et de filtrer les fausses ruptures.
  2. L’indicateur HMA est plus sensible aux variations de prix et capte les virages en temps opportun.
  3. La combinaison de plusieurs périodes permet d’identifier plus précisément les bandes moyennes et longues.
  4. Les transactions sont effectuées dans un délai de 5 minutes et la fréquence des opérations est plus élevée.
  5. La stratégie de suivi des bandes, sans sélection précise, dure plus longtemps.

Analyse des risques

  1. Il est recommandé de combiner l’analyse quantitative avec l’analyse fondamentale, car elle peut donner de faux signaux.
  2. La bande peut être inversée à mi-chemin, un mécanisme de sortie de stop-loss doit être mis en place.
  3. Le signal de transaction a été retardé, et il est possible que vous ayez manqué le meilleur point d’entrée.
  4. La période de profit nécessite une période de détention plus longue et une certaine pression financière.

Direction d’optimisation

  1. Tester l’efficacité de l’indicateur RSI avec différents paramètres.
  2. Essayez d’introduire d’autres indicateurs auxiliaires de bande passante.
  3. Optimiser les paramètres de longueur de l’indicateur HMA.
  4. Ajouter des stratégies de stop loss et de stop stop.
  5. Adaptation du cycle de détention des transactions en bande.

Résumer

Cette stratégie permet de capturer efficacement les tendances de la longueur moyenne de Bitcoin grâce à la combinaison de plusieurs périodes et au suivi des bandes. Par rapport aux transactions de courte durée, les retraits des transactions de la longueur moyenne de la longueur moyenne sont plus faibles et la marge de profit est plus grande.

Code source de la stratégie
/*backtest
start: 2023-10-31 00:00:00
end: 2023-11-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title='Pyramiding BTC 5 min', overlay=true, pyramiding=5, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=20, commission_type=strategy.commission.percent, commission_value=0.075)
//the pyramide based on this script  https://www.tradingview.com/script/7NNJ0sXB-Pyramiding-Entries-On-Early-Trends-by-Coinrule/
//
fastLength = input(250, title="Fast filter length ", minval=1)
slowLength = input(500,title="Slow filter length",  minval=1)
source=close
v1=ema(source,fastLength)
v2=ema(source,slowLength)
//
//Backtest dates
fromMonth = input(defval=1, title="From Month")
fromDay = input(defval=10, title="From Day")
fromYear = input(defval=2020, title="From Year")
thruMonth = input(defval=1, title="Thru Month")
thruDay = input(defval=1, title="Thru Day")
thruYear = input(defval=2112, title="Thru Year")

showDate = input(defval=true, title="Show Date Range")

start = timestamp(fromYear, fromMonth, fromDay, 00, 00)  // backtest start window
finish = timestamp(thruYear, thruMonth, thruDay, 23, 59)  // backtest finish window
window() =>  // create function "within window of time"
    time >= start and time <= finish ? true : false


leng=1
p1=close[1]

len55 = 10
//taken from https://www.tradingview.com/script/Ql1FjjfX-security-free-MTF-example-JD/
HTF = input("1D", type=input.resolution)
ti = change( time(HTF) ) != 0
T_c = fixnan( ti ? close : na )

vrsi = rsi(cum(change(T_c) * volume), leng)
pp=wma(vrsi,len55)

d=(vrsi[1]-pp[1])
len100 = 10
x=ema(d,len100)
//
zx=x/-1
col=zx > 0? color.lime : color.orange

//

tf10 = input("1", title = "Timeframe", type = input.resolution, options = ["1", "5", "15", "30", "60","120", "240","360","720", "D", "W"])

length = input(50, title = "Period", type = input.integer)
shift = input(1, title = "Shift", type = input.integer)

hma(_src, _length)=>
    wma((2 * wma(_src, _length / 2)) - wma(_src, _length), round(sqrt(_length)))
    
hma3(_src, _length)=>
    p = length/2
    wma(wma(close,p/3)*3 - wma(close,p/2) - wma(close,p),p)

b =security(syminfo.tickerid, tf10, hma3(close[1], length)[shift])
//plot(a,color=color.gray)
//plot(b,color=color.yellow)
close_price = close[0]
len = input(25)

linear_reg = linreg(close_price, len, 0)


filter=input(true)

buy=crossover(linear_reg, b)

longsignal = (v1 > v2 or filter == false ) and buy and window()

//set take profit

ProfitTarget_Percent = input(3)
Profit_Ticks = close * (ProfitTarget_Percent / 100) / syminfo.mintick

//set take profit

LossTarget_Percent = input(10)
Loss_Ticks = close * (LossTarget_Percent / 100) / syminfo.mintick


//Order Placing

strategy.entry("Entry 1", strategy.long, when=strategy.opentrades == 0 and longsignal)

strategy.entry("Entry 2", strategy.long, when=strategy.opentrades == 1 and longsignal)

strategy.entry("Entry 3", strategy.long, when=strategy.opentrades == 2 and longsignal)

strategy.entry("Entry 4", strategy.long, when=strategy.opentrades == 3 and longsignal)

strategy.entry("Entry 5", strategy.long, when=strategy.opentrades == 4 and longsignal)





if strategy.position_size > 0
    strategy.exit(id="Exit 1", from_entry="Entry 1", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 2", from_entry="Entry 2", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 3", from_entry="Entry 3", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 4", from_entry="Entry 4", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 5", from_entry="Entry 5", profit=Profit_Ticks, loss=Loss_Ticks)