La stratégie est un système de rétraction conçu pour les titres très volatils, et donc le bitcoin est une variété de transaction très idéale. La stratégie peut être utilisée sur des graphiques en ligne solaire ou sur des périodes de temps plus courtes (j’ai trouvé de bons résultats sur des périodes de 3 heures, mais je n’ai pas testé avec moins d’une heure).
La stratégie calcule la volatilité en comparant les variations du prix de clôture des deux lignes K précédentes et utilise cette variation de prix pour générer une moyenne mobile. Une bande de décalage standard est enveloppée dans la moyenne mobile, avec un décalage standard interne et deux décalages standards externes. Si le prix est supérieur au filtre de moyenne mobile prédéfini, nous sommes en hausse.
Pour Bitcoin, j’ai gardé les bandes d’écart standard internes et externes, mais j’ai trouvé que le suivi des fluctuations de 3 cycles est bon pour les transactions sur les graphiques d’une journée et le suivi des fluctuations de 5 cycles est bon pour les transactions sur les graphiques de 3 heures. Comme ce n’est pas une stratégie de buy-and-hold, vous voudrez peut-être vous en tenir à la devise la plus fluide afin de pouvoir entrer et sortir rapidement de n’importe quelle bourse. Si vous testez cette stratégie sur un marché moins volatile, le changement de la bande d’écart standard interne à environ 0,75 peut s’appliquer à une variété de marchés de marchandises, mais peut également s’appliquer aux stocks.
Comment gérer les risques:
Choisir le bon indicateur de volatilité et contrôler la position unique
Optimiser les paramètres et réduire les transactions invalides.
Le système de stop-loss et la gestion rigoureuse des fonds.
L’efficacité de l’exécution des transactions et le choix d’un modèle à bonne liquidité.
Adaptez les paramètres aux caractéristiques des différents standards.
Cette stratégie peut être optimisée dans les domaines suivants:
Optimisation des cycles des moyennes mobiles pour mieux suivre les fluctuations des différents indices.
Ajustez les paramètres de la bande de fréquence d’oscillation pour qu’ils soient plus proches de la plage d’oscillation de la norme spécifique.
Ajout d’autres conditions de filtrage, telles que l’augmentation du volume des transactions, pour vérifier davantage le signal de transaction.
L’utilisation de la technologie d’apprentissage automatique pour optimiser dynamiquement les paramètres rend les stratégies plus adaptatives.
Les tests sont effectués sur des périodes de temps plus longues afin de saisir plus d’opportunités de transactions.
Ajout d’un suivi mobile de stop-loss pour que les bénéfices restent davantage dans le compte.
En combinaison avec d’autres indicateurs ou modèles, établir une stratégie de combinaison quantitative.
La stratégie est globalement simple et intuitive, utilisant des indicateurs de volatilité pour identifier les retournements afin de capturer les points de retournement du marché. La stratégie a beaucoup de marge d’optimisation et peut continuer à améliorer la stabilité et la rentabilité de la stratégie en ajustant les paramètres et en combinant avec d’autres indicateurs techniques.
/*backtest
start: 2023-09-11 00:00:00
end: 2023-10-11 00:00:00
period: 4h
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/
// © gary_trades
//This script is designed to be used on volatile securities/tickers so is best suited for day charts on Crypto (particularly good for BTC).
//It takes both long and short trades and the main indicator settings can be changed by the use so they can test for ideal settings for ticker of interest.
//@version=4
strategy("BTC Volatility Band Strategy", shorttitle="Vol Band Strategy", overlay=false, margin_long=100, margin_short=100)
//VOLATILTY
CandleChange = ((close - close[1])/close)*100 //OR CandleChange = ((close[2] - close[1])/close)*100
plot(CandleChange, color=color.red, linewidth = 1)
//VOLATILITY BANDS
MAlen = input(7, minval=3, maxval=30, title=" MA Length")
MAout = sma(CandleChange, MAlen)
plot(MAout, color=color.black, display=display.none)
InnerBand = input(1.0, minval=0.5, maxval=5, title="Inner Band")
OuterBand = input(2.00, minval=0.5, maxval=10, title="Outer Band")
devInner = InnerBand * stdev(CandleChange, MAlen)
devOuter = OuterBand * stdev(CandleChange, MAlen)
upper1 = MAout + devInner
lower1 = MAout - devInner
b1 = plot(upper1, "Upper Inner", color=color.gray)
b2 = plot(lower1, "Lower Inner", color=color.gray)
upper2 = MAout + devOuter
lower2 = MAout - devOuter
b3 = plot(upper2, "Upper Outer", color=color.gray)
b4 = plot(lower2, "Lower Outer", color=color.gray)
fill(b1, b3, color.rgb(250,145,175,70), title="Background")
fill(b2, b4, color.rgb(250,145,175,70), title="Background")
band1 = hline(25, "Upper Band", color=color.gray, linestyle=hline.style_dotted, linewidth=2)
band0 = hline(-25, "Lower Band", color=color.gray, linestyle=hline.style_dotted, linewidth=2)
//LONG FILTER
VolFilterL = CandleChange <= lower1 and CandleChange > lower2
SMAFilterL = close[1] > sma(close[1], 50)
PriceFilterL = close > lowest(close,7)
LongFilter = VolFilterL and SMAFilterL and PriceFilterL
bgcolor(LongFilter ? color.new(color.green, 80) : na)
//SHORT FILTER
VolFilterS = CandleChange >= upper1 and CandleChange < upper2
SMAFilterS = close[1] < sma(close[1], 50)
PriceFilterS = close < highest(close,7)
ShortFilter = VolFilterS and SMAFilterS and PriceFilterS
bgcolor(ShortFilter ? color.new(color.red, 80) : na)
//SETTING BACK TEST INPUTS
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2000, title = "From Year", minval = 1970)
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2100, title = "To Year", minval = 1970)
startDate = timestamp("America/New_York", fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp("America/New_York", toYear, toMonth, toDay, 00, 00)
time_condition = time >= startDate and time <= finishDate
//ORDER DETAILS
Risk = (high[7] - low[7])/ 7
Profit = Risk*1.15
Loss = Risk*0.65
AlertMSG = "New stategy position" + tostring(strategy.position_size)
if (time_condition)
strategy.entry("Long", strategy.long, when = LongFilter, alert_message=AlertMSG)
if (LongFilter)
LongStop = strategy.position_avg_price - Loss
LongProfit = strategy.position_avg_price + Profit
strategy.exit("TP/SL", "Long", stop=LongStop, limit=LongProfit)
if (time_condition)
strategy.entry("Short", strategy.short, when = ShortFilter, alert_message=AlertMSG)
if (ShortFilter)
ShortStop = strategy.position_avg_price + Loss
ShortProfit = strategy.position_avg_price - Profit
strategy.exit("TP/SL", "Short", stop=ShortStop, limit=ShortProfit)