
Cette stratégie utilise les canaux internes des prix pour déterminer les mouvements futurs des prix et appartient à la stratégie de suivi de la tendance. Lorsque les prix forment un certain nombre de canaux internes de fluctuation des prix, elle est considérée comme un signal de renversement de tendance et effectue une opération d’achat ou de vente.
Cette stratégie juge la formation d’un canal interne en fonction de la relation entre le prix le plus élevé et le prix le plus bas des deux lignes K précédentes et suivantes. Il est jugé comme un canal interne de prix lorsque un certain nombre de lignes K satisfont à la condition que le prix le plus élevé soit inférieur au prix le plus élevé de la ligne K précédente et que le prix le plus bas soit supérieur au prix le plus bas de la ligne K précédente.
La stratégie détermine la direction du canal interne en même temps que la formation du canal interne. Si c’est un canal interne haussier, cela génère un signal d’achat; si c’est un canal interne baissier, cela génère un signal de vente.
Pour filtrer les faux signaux, la stratégie a également introduit l’indicateur de moyenne mobile. Un signal de transaction réel n’est généré que lorsque le prix est au-dessus ou au-dessous de la moyenne mobile. Cela permet d’éviter dans une certaine mesure les transactions erronées lors de la correction du marché.
Après l’entrée, la stratégie définit également un point d’arrêt de perte en fonction du choix de l’utilisateur. Il existe trois types de points d’arrêt: point d’arrêt fixe, point d’arrêt ATR et point d’arrêt le plus bas de la période précédente. Le paramètre d’arrêt est un point d’arrêt pour le ratio de rendement du risque. Cela peut bloquer les bénéfices et contrôler les risques dans une certaine mesure.
Le plus grand avantage de cette stratégie réside dans sa capacité à identifier les points de basculement de la tendance. Lorsque les prix forment un certain nombre de canaux internes, cela indique souvent une baisse importante. Ce jugement est très conforme à la théorie traditionnelle de l’analyse technique.
En outre, la stratégie elle-même est très configurable. L’utilisateur peut choisir librement le nombre de canaux internes, le cycle de la moyenne mobile, les paramètres de stop-loss-stop, etc. Cela offre une grande flexibilité pour différentes variétés et différents styles de négociation.
Enfin, le filtrage des moyennes mobiles et la mise en place d’un stop-loss réduisent considérablement le risque de transaction. La stratégie peut donc être utilisée dans tous les types de transactions sur le marché.
Le plus grand risque de cette stratégie réside dans la probabilité élevée d’erreurs dans le jugement de la tendance. Les canaux internes ne peuvent pas déterminer complètement le renversement des prix, il existe une certaine probabilité d’erreur. Si le nombre déterminé est insuffisant, il peut y avoir de faux signaux.
De plus, cette stratégie ne s’applique pas du tout dans les marchés en cours de stabilisation ou de volatilité. Lorsque les prix fluctuent à la baisse mais qu’aucune tendance n’a été établie, la stratégie génère continuellement de faux signaux. Cela est dû à la mécanisme de la stratégie.
Enfin, les paramètres d’arrêt-perte trop conservateurs peuvent empêcher la stratégie de tenir suffisamment longtemps pour capturer les bénéfices des grandes tendances.
Il y a encore beaucoup de place pour l’optimisation de cette stratégie. Parmi les possibilités d’optimisation, citons:
Optimisation du nombre et de la forme des canaux internes. L’efficacité des transactions peut être testée sous différents nombres ou combinaisons d’arrangements.
Optimiser les paramètres de cycle des moyennes mobiles pour mieux juger de la direction des tendances. Le cycle par défaut actuel peut ne pas convenir à toutes les variétés.
Ajout d’autres filtres d’indicateurs. Par exemple, l’introduction d’une bande de Brin, qui ne génère un signal de transaction que lorsque le prix franchit la bande de Brin pour monter ou descendre.
Optimisation des paramètres stop-loss et stop-loss pour permettre à la stratégie de conserver sa position plus longtemps afin de capturer les bénéfices de la super tendance.
Dans l’ensemble, la stratégie existe par son exactitude dans le jugement de la tendance. Les algorithmes de trading les plus efficaces peuvent être exécutés à condition de garantir l’exactitude du jugement et d’être accompagnés d’un réglage approprié de la gestion des risques.
Cette stratégie est généralement une stratégie de trading quantitatif basée sur le canal interne des prix pour déterminer la tendance future des prix. Elle combine deux méthodes de jugement, le suivi de la tendance et le renversement de la tendance, et présente certains avantages. Mais il existe également une certaine marge d’optimisation, l’investisseur peut l’ajuster en fonction de ses propres besoins, en fonction de la variété et de l’environnement de négociation.
/*backtest
start: 2023-12-03 00:00:00
end: 2023-12-10 00:00:00
period: 3m
basePeriod: 1m
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/
// From "Day Trading Cryptocurrency
// Strategies, Tactics, Mindset, and Tools Required To Build Your
// New Income Stream"
// by Phil C. Senior
// "Inside bars are a two -bar pattern. They can indicate either a continuation of the
// existing move or a reversal. A continuation occurs when there is no significant
// support or resistance level in sight, while a reversal occurs close to a strong sup-
// port or resistance level...
// ...A lot of traders are aware of inside bars but few manage to make money with
// them. Why is this so? It goes back to interpreting price action. A lot of traders look
// to trade in geometric ways. What I mean is that they search for fancy shapes on a
// chart and think that this is what represents true price action.
// This is not the case. A shape is just a shape. The formation by itself means
// nothing unless underlying order flow backs it up. This is why it’s extremely impor-
// tant that you look for inside bars when a trend is already in place. The best place to
// look for them is in the beginning of trends."
// © tweakerID
//@version=4
strategy("Inside Bar Strategy w/ SL",
overlay=true,
default_qty_type=strategy.percent_of_equity,
default_qty_value=100,
initial_capital=10000,
commission_value=0.04,
calc_on_every_tick=false,
slippage=0)
direction = input(0, title = "Strategy Direction", type=input.integer, minval=-1, maxval=1)
strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))
/////////////////////// STRATEGY INPUTS ////////////////////////////////////////
title1=input(true, "-----------------Strategy Inputs-------------------")
i_NBars = input(defval=1, type=input.integer, title="# Of Inside Bars in pattern", options=[1, 2, 3, 4])
i_BarsDirection = input(false, title="Only trade using complete bullish or bearish patterns")
i_MAFilter = input(true, title="Use MA Trend Filter")
i_MALen = input(65, title="MA Length")
/////////////////////// BACKTESTER /////////////////////////////////////////////
title2=input(true, "-----------------General Inputs-------------------")
// Backtester General Inputs
i_SL=input(true, title="Use Stop Loss and Take Profit")
i_SLType=input(defval="ATR Stop", title="Type Of Stop", options=["Strategy Stop", "Swing Lo/Hi", "ATR Stop"])
i_SPL=input(defval=10, title="Swing Point Lookback")
i_PercIncrement=input(defval=1, step=.1, title="Swing Point SL Perc Increment")*0.01
i_ATR = input(14, title="ATR Length")
i_ATRMult = input(5, step=.1, title="ATR Multiple")
i_TPRRR = input(2, step=.1, title="Take Profit Risk Reward Ratio")
TS=input(false, title="Trailing Stop")
// Bought and Sold Boolean Signal
bought = strategy.position_size > strategy.position_size[1]
or strategy.position_size < strategy.position_size[1]
// Price Action Stop and Take Profit
LL=(lowest(i_SPL))*(1-i_PercIncrement)
HH=(highest(i_SPL))*(1+i_PercIncrement)
LL_price = valuewhen(bought, LL, 0)
HH_price = valuewhen(bought, HH, 0)
entry_LL_price = strategy.position_size > 0 ? LL_price : na
entry_HH_price = strategy.position_size < 0 ? HH_price : na
tp=strategy.position_avg_price + (strategy.position_avg_price - entry_LL_price)*i_TPRRR
stp=strategy.position_avg_price - (entry_HH_price - strategy.position_avg_price)*i_TPRRR
// ATR Stop
ATR=atr(i_ATR)*i_ATRMult
ATRLong = ohlc4 - ATR
ATRShort = ohlc4 + ATR
ATRLongStop = valuewhen(bought, ATRLong, 0)
ATRShortStop = valuewhen(bought, ATRShort, 0)
LongSL_ATR_price = strategy.position_size > 0 ? ATRLongStop : na
ShortSL_ATR_price = strategy.position_size < 0 ? ATRShortStop : na
ATRtp=strategy.position_avg_price + (strategy.position_avg_price - LongSL_ATR_price)*i_TPRRR
ATRstp=strategy.position_avg_price - (ShortSL_ATR_price - strategy.position_avg_price)*i_TPRRR
// Strategy Stop
float LongStop = valuewhen(bought,low[1],0)*(1-i_PercIncrement)
float ShortStop = valuewhen(bought,high[1],0)*(1+i_PercIncrement)
float StratTP = na
float StratSTP = na
/////////////////////// STRATEGY LOGIC /////////////////////////////////////////
MAFilter=close > sma(close, i_MALen)
plot(i_MAFilter ? sma(close, i_MALen) : na)
bullBar=close > open
bearBar=close < open
contbullBar=barssince(not bullBar) >= (i_NBars+1)
contbearBar=barssince(not bearBar) >= (i_NBars+1)
InsideBar(NBars) =>
Inside1Bar=high < high[1] and low > low[1]
Inside2Bar=high < high[2] and low > low[2] and Inside1Bar
Inside3Bar=high < high[3] and low > low[3] and Inside1Bar and Inside2Bar
Inside4Bar=high < high[4] and low > low[4] and Inside1Bar and Inside2Bar and Inside3Bar
if NBars == 1
inside1Bar=Inside1Bar
[inside1Bar]
else if NBars == 2
inside2Bar=Inside2Bar
[inside2Bar]
else if NBars == 3
inside3Bar=Inside3Bar
[inside3Bar]
else if NBars == 4
inside4Bar=Inside4Bar
[inside4Bar]
else
[na]
[insideBar] = InsideBar(i_NBars)
bullInsideBar=bar_index > 40 and insideBar and bullBar
and (i_BarsDirection ? contbullBar : true) and (i_MAFilter ? MAFilter : true)
bearInsideBar=bar_index > 40 and insideBar and bearBar
and (i_BarsDirection ? contbearBar : true) and (i_MAFilter ? not MAFilter : true)
BUY = bullInsideBar
SELL = bearInsideBar
//Debugging Plots
plot(contbullBar ? 1:0, transp=100, title="contbullBar")
plot(contbearBar ? 1:0, transp=100, title="contbearBar")
//Trading Inputs
DPR=input(true, "Allow Direct Position Reverse")
reverse=input(false, "Reverse Trades")
// Entries
if reverse
if not DPR
strategy.entry("long", strategy.long, when=SELL and strategy.position_size == 0)
strategy.entry("short", strategy.short, when=BUY and strategy.position_size == 0)
else
strategy.entry("long", strategy.long, when=SELL)
strategy.entry("short", strategy.short, when=BUY)
else
if not DPR
strategy.entry("long", strategy.long, when=BUY and strategy.position_size == 0)
strategy.entry("short", strategy.short, when=SELL and strategy.position_size == 0)
else
strategy.entry("long", strategy.long, when=BUY)
strategy.entry("short", strategy.short, when=SELL)
SL= i_SLType == "Swing Lo/Hi" ? entry_LL_price : i_SLType == "ATR Stop" ? LongSL_ATR_price : LongStop
SSL= i_SLType == "Swing Lo/Hi" ? entry_HH_price : i_SLType == "ATR Stop" ? ShortSL_ATR_price : ShortStop
TP= i_SLType == "Swing Lo/Hi" ? tp : i_SLType == "ATR Stop" ? ATRtp : StratTP
STP= i_SLType == "Swing Lo/Hi" ? stp : i_SLType == "ATR Stop" ? ATRstp : StratSTP
//TrailingStop
dif=(valuewhen(strategy.position_size>0 and strategy.position_size[1]<=0, high,0))
-strategy.position_avg_price
trailOffset = strategy.position_avg_price - SL
var tstop = float(na)
if strategy.position_size > 0
tstop := high- trailOffset - dif
if tstop<tstop[1]
tstop:=tstop[1]
else
tstop := na
StrailOffset = SSL - strategy.position_avg_price
var Ststop = float(na)
Sdif=strategy.position_avg_price-(valuewhen(strategy.position_size<0
and strategy.position_size[1]>=0, low,0))
if strategy.position_size < 0
Ststop := low+ StrailOffset + Sdif
if Ststop>Ststop[1]
Ststop:=Ststop[1]
else
Ststop := na
strategy.exit("TP & SL", "long", limit=TP, stop=TS? tstop : SL, when=i_SL)
strategy.exit("TP & SL", "short", limit=STP, stop=TS? Ststop : SSL, when=i_SL)
/////////////////////// PLOTS //////////////////////////////////////////////////
plot(i_SL and strategy.position_size > 0 and not TS ? SL : i_SL and strategy.position_size > 0 and TS ? tstop : na , title='SL', style=plot.style_cross, color=color.red)
plot(i_SL and strategy.position_size < 0 and not TS ? SSL : i_SL and strategy.position_size < 0 and TS ? Ststop : na , title='SSL', style=plot.style_cross, color=color.red)
plot(i_SL and strategy.position_size > 0 ? TP : na, title='TP', style=plot.style_cross, color=color.green)
plot(i_SL and strategy.position_size < 0 ? STP : na, title='STP', style=plot.style_cross, color=color.green)
// Draw price action setup arrows
plotshape(BUY ? 1 : na, style=shape.triangleup, location=location.belowbar,
color=color.green, title="Bullish Setup", size=size.auto)
plotshape(SELL ? 1 : na, style=shape.triangledown, location=location.abovebar,
color=color.red, title="Bearish Setup", size=size.auto)