
Cette stratégie combine les indicateurs des moyennes mobiles, des bandes de Brin et des moyennes pondérées en volumes de transactions pour juger de l’entrée dans les conditions de formation de la fourche dorée et de traversée de la longueur de la moyenne sur la courte moyenne. La stratégie utilise également le canal de la bande de Brin, qui ne considère l’entrée que lorsque le prix touche la bande de Brin, afin d’éviter une entrée fréquente dans les fluctuations des prix.
Cette stratégie consiste principalement à déterminer la direction de la tendance à l’aide d’indicateurs de la ligne moyenne, en utilisant les points de vente de la zone de fluctuation de la position de Boer. Plus précisément, la stratégie contient les règles clés suivantes:
construire un système de jugement de fourche en utilisant l’EMA de 50 jours et l’EMA de 200 jours, considéré comme étant en tendance haussière à plusieurs têtes lorsqu’il traverse une moyenne mobile lente sur une moyenne mobile rapide;
Le prix étant supérieur au VWAP, il est considéré comme étant en phase de hausse et favorable à la construction d’une position plus importante;
Le fait que le cours ait touché ou dépassé la trajectoire de descente de Brin indique que le cours pourrait être proche du point de rebond et qu’il y a de meilleures chances;
Après avoir entré dans des positions multiples, le prix a dépassé le seuil d’arrêt lorsque Brin est entré dans la voie.
La combinaison de ces règles permet à la stratégie de choisir le bon point d’achat et de mettre un stop loss pour assurer un gain.
L’utilisation d’un système d’évaluation de la fourchette d’or pour déterminer la direction de la tendance générale et éviter les gains et les pertes mineurs dans une situation de choc;
L’indicateur VWAP permet de déterminer la direction des fluctuations des prix et de choisir plus précisément le point d’achat.
Les indicateurs de la courbe de Brin permettent de déterminer le point d’achat, ce qui rend la stratégie plus résiliente, tout en fixant un stop-loss pour bloquer les gains.
Plusieurs indicateurs se vérifient les uns les autres pour rendre les décisions stratégiques plus précises et plus fiables.
Le système de jugement de la fourchette d’or peut émettre un faux signal, la longueur du cycle de la ligne moyenne doit être raccourcie de manière appropriée et doit être vérifiée avec d’autres indicateurs;
Les paramètres de la bande de Boolean mal définis peuvent également rendre la stratégie inefficace, et les paramètres de la période de la bande de Boolean et de l’écart-type doivent être ajustés.
Le paramètre du point de rupture est trop lâche et ne permet pas de contrôler efficacement les pertes. Le périmètre de rupture doit être ajusté de manière appropriée pour assurer la maîtrise des risques.
Optimiser les combinaisons d’équilibre des fourches dorées, tester les différents paramètres d’équilibre et trouver le paramètre optimal;
tester les paramètres de la bande de Bryn à différentes périodes pour trouver la meilleure combinaison de paramètres d’amplitude et de dispersion;
Tester et optimiser la portée de l’arrêt de la perte afin de contrôler efficacement le risque et de ne pas le déclencher trop facilement.
Cette stratégie utilise un système intégré d’équilibrage, des bandes de broyage et des indicateurs VWAP pour déterminer le moment d’entrée, en équilibrant les opportunités de découverte et les risques de contrôle. Par l’optimisation des paramètres ultérieurs et la modification des règles, il est prévu de saisir les opportunités persistantes dans l’industrie et le marché.
/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 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/
// © mohanee
//@version=4
strategy(title="VWAP and BB strategy [$$]", overlay=true,pyramiding=2, default_qty_value=1, default_qty_type=strategy.fixed, initial_capital=10000, currency=currency.USD)
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 6, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2020, title = "From Year", minval = 1970)
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 8, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2020, title = "To Year", minval = 1970)
// Calculate start/end date and time condition
DST = 1 //day light saving for usa
//--- Europe
London = iff(DST==0,"0000-0900","0100-1000")
//--- America
NewYork = iff(DST==0,"0400-1300","0500-1400")
//--- Pacific
Sydney = iff(DST==0,"1300-2200","1400-2300")
//--- Asia
Tokyo = iff(DST==0,"1500-2400","1600-0100")
//-- Time In Range
timeinrange(res, sess) => time(res, sess) != 0
london = timeinrange(timeframe.period, London)
newyork = timeinrange(timeframe.period, NewYork)
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = time >= startDate and time <= finishDate
is_price_dipped_bb(pds,source1) =>
t_bbDipped=false
for i=1 to pds
t_bbDipped:= (t_bbDipped or close[i]<source1) ? true : false
if t_bbDipped==true
break
else
continue
t_bbDipped
is_bb_per_dipped(pds,bbrSrc) =>
t_bbDipped=false
for i=1 to pds
t_bbDipped:= (t_bbDipped or bbrSrc[i]<=0) ? true : false
if t_bbDipped==true
break
else
continue
t_bbDipped
// variables BEGIN
shortEMA = input(50, title="fast EMA", minval=1)
longEMA = input(200, title="slow EMA", minval=1)
//BB
smaLength = input(7, title="BB SMA Length", minval=1)
bbsrc = input(close, title="BB Source")
strategyCalcOption = input(title="strategy to use", type=input.string, options=["BB", "BB_percentageB"], defval="BB")
//addOnDivergence = input(true,title="Add to existing on Divergence")
//exitOption = input(title="exit on RSI or BB", type=input.string, options=["RSI", "BB"], defval="BB")
//bbSource = input(title="BB source", type=input.string, options=["close", "vwap"], defval="close")
//vwap_res = input(title="VWAP Resolution", type=input.resolution, defval="session")
stopLoss = input(title="Stop Loss%", defval=1, minval=1)
//variables END
longEMAval= ema(close, longEMA)
shortEMAval= ema(close, shortEMA)
ema200val = ema(close, 200)
vwapVal=vwap(close)
// Drawings
//plot emas
plot(shortEMAval, color = color.green, linewidth = 1, transp=0)
plot(longEMAval, color = color.orange, linewidth = 1, transp=0)
plot(ema200val, color = color.purple, linewidth = 2, style=plot.style_line ,transp=0)
//bollinger calculation
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
basis = sma(bbsrc, smaLength)
dev = mult * stdev(bbsrc, smaLength)
upperBand = basis + dev
lowerBand = basis - dev
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)
bbr = (bbsrc - lowerBand)/(upperBand - lowerBand)
//bollinger calculation
//plot bb
//plot(basis, "Basis", color=#872323, offset = offset)
p1 = plot(upperBand, "Upper", color=color.teal, offset = offset)
p2 = plot(lowerBand, "Lower", color=color.teal, offset = offset)
fill(p1, p2, title = "Background", color=#198787, transp=95)
plot(vwapVal, color = color.purple, linewidth = 2, transp=0)
// Colour background
//barcolor(shortEMAval>longEMAval and close<=lowerBand ? color.yellow: na)
//longCondition= shortEMAval > longEMAval and close>open and close>vwapVal
longCondition= ( shortEMAval > longEMAval and close>open and close>vwapVal and close<upperBand ) //and time_cond // and close>=vwapVal
//Entry
strategy.entry(id="long", comment="VB LE" , long=true, when= longCondition and ( strategyCalcOption=="BB"? is_price_dipped_bb(10,lowerBand) : is_bb_per_dipped(10,bbr) ) and strategy.position_size<1 ) //is_price_dipped_bb(10,lowerBand)) //and strategy.position_size<1 is_bb_per_dipped(15,bbr)
//add to the existing position
strategy.entry(id="long", comment="Add" , long=true, when=strategy.position_size>=1 and close<strategy.position_avg_price and close>vwapVal) //and time_cond)
barcolor(strategy.position_size>=1 ? color.blue: na)
strategy.close(id="long", comment="TP Exit", when=crossover(close,upperBand) )
//stoploss
stopLossVal = strategy.position_avg_price * (1-(stopLoss*0.01) )
//strategy.close(id="long", comment="SL Exit", when= close < stopLossVal)
//strategy.risk.max_intraday_loss(stopLoss, strategy.percent_of_equity)