La stratégie est basée sur le principe de la rupture de la ceinture de Brin, qui se produit lorsque le prix est complètement dépassé par une hausse ou une baisse. Elle permet de capturer le mouvement de la ligne de convergence rétrograde après une fluctuation anormale, ce qui est approprié pour les traders actifs qui recherchent des profits efficaces.
Cette stratégie utilise les bandes de Brin pour définir la portée des fluctuations du marché actuel. Lorsque les prix forment une colonne solaire ou une colonne solaire complète et franchissent complètement les bandes de Brin, ce qui signifie que le marché atteint un état de haute volatilité et que les prix reviendront à la direction de la ligne d’équilibre.
Plus précisément, la stratégie calcule le milieu, le haut et le bas des rayons de la ceinture de Brin avec le prix de clôture de 20 lignes K. Un signal de plus est généré lorsque le prix est inférieur au bas de la ceinture et le prix de clôture est inférieur au prix d’ouverture. Un signal de manque est généré lorsque le prix est supérieur au haut de la ceinture et le prix de clôture est supérieur au prix d’ouverture.
Les principaux avantages de cette stratégie sont les suivants:
L’utilisation de la courbe de Brin pour évaluer les fluctuations du marché permet d’identifier efficacement les situations anormales.
Le point de rupture sert de point d’arrêt et permet de maîtriser efficacement le risque.
Le retour en orbite fixe une cible raisonnable pour éviter une sur-chasse et une chute.
Filtrage complet des lignes K pour améliorer la qualité du signal.
Les paramètres sont simples à définir, faciles à mettre en œuvre et à optimiser.
La logique est claire, le code est simple et élégant.
La stratégie présente également les risques suivants:
Une erreur de paramètre de la bande de Bryn peut entraîner une défaillance.
La rupture pourrait être le début d’une nouvelle tendance, avec le risque d’un départ prématuré.
Les objectifs de l’orbite centrale pourraient être trop conservateurs pour être rentables de façon durable.
Il y a un risque de glissement de terrain, car les grands trous ne peuvent pas être complètement remplis.
La tendance à la volatilité peut entraîner des transactions fréquentes et inutiles.
La stratégie peut être optimisée en fonction des points suivants:
Évaluer la force de la tendance, ajuster les paramètres ou la fréquence des transactions.
En combinaison avec d’autres indicateurs, le meilleur moment d’entrée est déterminé.
Ajustez le stop loss en fonction de la volatilité.
Optimiser le placement de la première cible pour réaliser des bénéfices rapides.
L’adhésion à un mécanisme de réintégration pour optimiser les bénéfices
L’évaluation de la crédibilité de la rupture et la prévention de la fausse transaction
La stratégie est basée sur le principe de la rupture de la ceinture de Brin et convient aux traders actifs qui recherchent des gains à court terme. L’avantage est la clarté du contrôle des risques, l’inconvénient est la possibilité d’un départ anticipé et de la limitation de l’espace de gain.
/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 00:00:00
period: 3h
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/
// © Bishnu103
//@version=4
strategy(title="Full Candle Outside BB [v1.0][Bishnu103]",shorttitle="OUTSIDE BB",overlay=true,calc_on_every_tick=true,backtest_fill_limits_assumption=2)
// ***********************************************************************************************************************
// input variables
buy_session = input(title="Buy Session", type=input.session, defval="0915-1430")
exit_inraday = input(title="Exit Intraday?", type=input.bool, defval=true)
entry_distance = input(title="Entry distance from alert", minval=1, maxval=10, defval=3)
show_bb_switch = input(title="Show BB", type=input.bool, defval=true)
//
bbLength = input(title="BB Length", minval=1, defval=20)
bbStdDev = input(title="BB StdDev", minval=1, defval=2)
// ***********************************************************************************************************************
// global variables
long_entry = false
short_entry = false
long_exit = false
short_exit = false
// variable values available across candles
var entry_price = 0.0
var sl_price = 0.0
var exit_price = 0.0
var candle_count = 0
// ***********************************************************************************************************************
// function to return bollinger band values based on candle poition passed
getBB(pos) => [mBB, uBB, lBB] = bb(close[pos], bbLength, bbStdDev)
// function returns true if current time is within intraday byuing session set in input
BarInSession(sess) => time(timeframe.period, sess) != 0
// ***********************************************************************************************************************
// strategy
//
// get current bb value
[mBB_0,uBB_0,lBB_0] = getBB(0)
// check if full candle outside upper BB
outside_uBB = low > uBB_0 and close <= open
outside_lBB = high < lBB_0 and close >= open
// ***********************************************************************************************************************
// entry conditions
long_entry := outside_lBB
short_entry := outside_uBB
// keep candle count since the alert generated so that order can be cancelled after N number of candle calling it out as invalid alert
candle_count := candle_count + 1
if long_entry or short_entry
candle_count := 0
// ***********************************************************************************************************************
// risk management
//
// decide entry and sl price
if long_entry
entry_price := high
if short_entry
entry_price := low
if long_entry
sl_price := low
if short_entry
sl_price := high
// first exit is when price hits middle BB, gets updated for each candle based on it's middle BB value
exit_price := mBB_0
// ***********************************************************************************************************************
// position sizing
price = if close[0] > 25000
25000
else
price = close[0]
qty = 25000/price
// ***********************************************************************************************************************
// entry
//if long_entry and strategy.position_size == 0
// strategy.entry("BUY", strategy.long, qty, stop=entry_price, comment="BUY @ "+ tostring(entry_price))
if long_entry and strategy.position_size == 0
strategy.order("BUY", strategy.long, qty, stop=entry_price, comment="BUY @ "+ tostring(entry_price))
//if short_entry and strategy.position_size == 0
// strategy.entry("SELL", strategy.short, qty, stop=entry_price, comment="SELL @ "+ tostring(entry_price))
if short_entry and strategy.position_size == 0
strategy.order("SELL", strategy.short, qty, stop=entry_price, comment="SELL @ "+ tostring(entry_price))
// cancel an order if N number of candles are completed after alert candle
strategy.cancel_all(candle_count > entry_distance)
// if current time is outside byuing session then do not enter intraday trade
strategy.cancel_all(timeframe.isintraday and not BarInSession(buy_session))
// ***********************************************************************************************************************
// exit
if strategy.position_size > 0
strategy.cancel("EXIT at MBB", true)
strategy.cancel("EXIT at SL", true)
strategy.order("EXIT at MBB", strategy.short, abs(strategy.position_size), limit=exit_price, comment="EXIT TG @ "+ tostring(exit_price))
strategy.order("EXIT at SL", strategy.short, abs(strategy.position_size), stop=sl_price, comment="EXIT SL @ "+ tostring(sl_price))
if strategy.position_size < 0
strategy.cancel("EXIT at MBB", true)
strategy.cancel("EXIT at SL", true)
strategy.order("EXIT at MBB", strategy.long, abs(strategy.position_size), limit=exit_price, comment="EXIT TG @ "+ tostring(exit_price))
strategy.order("EXIT at SL", strategy.long, abs(strategy.position_size), stop=sl_price, comment="EXIT SL @ "+ tostring(sl_price))
// if intraday trade, close the trade at open of 15:15 candle //!!!!!!!!!!!!!!!!!!!!! TO BE CORRECTED !!!!!!!!!!!!!!!!!!!!!!!
if timeframe.isintraday and exit_inraday and hour == 15 and minute == 00
strategy.close("BUY", when=strategy.position_size > 0, qty=strategy.position_size, comment="EXIT @ "+ tostring(close))
strategy.close("SELL", when=strategy.position_size < 0, qty=strategy.position_size, comment="EXIT @ "+ tostring(close))
// ***********************************************************************************************************************
// plots
//
// plot BB
[mBBp,uBBp,lBBp] = getBB(0)
p_mBB = plot(show_bb_switch ? mBBp : na, color=color.teal)
p_uBB = plot(show_bb_switch ? uBBp : na, color=color.teal)
p_lBB = plot(show_bb_switch ? lBBp : na, color=color.teal)
fill(p_uBB,p_lBB,color=color.teal,transp=95)