
La stratégie est basée sur trois indicateurs principaux: l’indicateur de tendance, le canal de Keltner et l’indicateur DM.
L’indicateur de tendance est composé des SMA et des EMA. Lorsqu’une EMA traverse la SMA, elle confirme l’entrée dans la tendance. Le canal Keltner est utilisé pour déterminer les prix d’ouverture et de fermeture de Candle. L’indicateur DM est utilisé pour déterminer la direction de la hausse.
Vous pouvez faire plus si vous remplissez les conditions d’admission suivantes:
La stratégie consiste à définir deux arrêts et un arrêt-perte. Vous pouvez envisager d’utiliser le suivi des arrêts pour obtenir plus de profit.
La direction de la tendance est déterminée par la fourche dorée de l’EMA et de l’SMA. Le paramètre EMA est 46, le paramètre SMA est 46.
Le canal Keltner est composé de trois lignes: la ligne médiane, la ligne supérieure et la ligne inférieure. La ligne médiane est le SMA du prix de clôture, de longueur 81.
Le canal de Keltner est principalement utilisé pour déterminer si les prix sont dans le canal et s’ils traversent le canal.
L’indicateur DM est composé de trois lignes: ADX, +DI et -DI. +DI mesure la force de la hausse, -DI mesure la force de la baisse.
Le paramètre ADX est défini comme étant 10, le paramètre DI comme étant 19. Lorsque la ligne de référence définie sur la ligne +DI est portée (par défaut 27), cela signifie que la tendance est forte et qu’elle convient au travail supplémentaire.
Cette stratégie, qui combine tendances, canaux et indicateurs de force et de faiblesse, permet d’évaluer efficacement les mouvements de prix et la direction de la pluralité. Elle présente les avantages suivants:
Le jugement de la tendance est relativement précis et permet d’éviter les opérations inverses.
Les passages de Keltner sont clairement visibles, formant des supports et des points de pression.
L’indicateur DM permet de mesurer la force de survol et de s’assurer que la direction de survol est correcte.
Les conditions stratégiques sont rigoureuses et permettent de filtrer efficacement les fausses percées de retour en arrière.
Il est possible de mettre en place des points de stop-loss pour profiter des opportunités de profit.
Cette stratégie comporte aussi des risques:
La tendance pourrait se retourner, l’EMA pourrait traverser le SMA et il faudrait s’attendre à une sortie en temps opportun.
En cas de forte activité, le canal peut s’effondrer et ne peut pas être considéré comme un point de pression de support strict.
L’indicateur DM peut émettre des signaux erronés et doit être évalué en fonction de l’évolution des prix.
Une fausse percée peut déclencher une entrée en jeu, mais une rechute rapide, avec un arrêt raisonnable des pertes.
Les points d’arrêt et de perte doivent être constamment optimisés pour s’adapter aux changements du marché.
Les mesures d’optimisation peuvent être améliorées dans les domaines suivants:
Adapter les paramètres et tester l’efficacité des différentes méthodes de jugement des tendances.
Optimiser les paramètres de la chaîne pour qu’ils soient plus proches de la vraie gamme de fluctuations.
Testez différentes combinaisons de paramètres DM et sélectionnez le meilleur.
Les conditions d’entrée sont différentes, par exemple, le filtrage du volume des transactions.
Optimiser les stratégies de stop-loss, par exemple en essayant de suivre le stop-loss pour obtenir plus de profits.
Les variétés sont testées séparément pour sélectionner la meilleure combinaison de paramètres.
La stratégie utilise une combinaison d’indicateurs pour déterminer la direction de la tendance, les niveaux de pression de soutien et la force de pluralité, permettant de capturer efficacement la tendance et de contrôler les risques. Cependant, il est nécessaire de rester attentif aux risques et d’optimiser les paramètres pour s’adapter aux changements du marché.
/*backtest
start: 2022-10-27 00:00:00
end: 2023-11-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Original Idea by: Wunderbit Trading
//@version=4
strategy("Keltner Channel ETH/USDT 1H", overlay=true, initial_capital=1000,pyramiding = 0, currency="USD", default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent,commission_value=0.07)
/// TREND
ribbon_period = input(46, "Period", step=1)
leadLine1 = ema(close, ribbon_period)
leadLine2 = sma(close, ribbon_period)
// p3 = plot(leadLine1, color= #53b987, title="EMA", transp = 50, linewidth = 1)
// p4 = plot(leadLine2, color= #eb4d5c, title="SMA", transp = 50, linewidth = 1)
// fill(p3, p4, transp = 60, color = leadLine1 > leadLine2 ? #53b987 : #eb4d5c)
//Upward Trend
UT=leadLine2 < leadLine1
DT=leadLine2>leadLine1
///////////////////////////////////////INDICATORS
// KELTNER //
source = close
useTrueRange = input(true)
length = input(81, step=1, minval=1)
mult = input(2.5, step=0.1)
// Calculate Keltner Channel
ma = sma(source, length)
range = useTrueRange ? tr : high - low
rangema = sma(range, length)
upper = ma + rangema * mult
lower = ma - rangema * mult
plot(ma, title="Middle", color=color.orange)
p1=plot(upper, title="Upper", color=color.orange)
p2=plot(lower, title="Lower", color=color.orange)
fill(p1,p2)
// DMI INDICATOR //
adxlen = 10 // input(10, title="ADX Smoothing")
dilen = input(19, title="DI Length")
keyLevel = 23// input(23, title="key level for ADX")
dirmov(len) =>
up = change(high)
down = -change(low)
truerange = rma(tr, len)
plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange)
minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange)
[plus, minus]
adx(dilen, adxlen) =>
[plus, minus] = dirmov(dilen)
sum = plus + minus
adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
[adx, plus, minus]
[sig, up, down] = adx(dilen, adxlen)
benchmark=input(title="DMI Benchmark", defval=27, minval=1,step=1)
// plot(sig, color=color.red, title="ADX")
// plot(up, style=plot.style_histogram, color=color.green, title="+DI")
// plot(down, style=plot.style_histogram, color=color.red, title="-DI")
// plot(keyLevel, color=color.white, title="Key Level")
///////////////////////////////////////////////////////////
////////////////////////////////////////////////////Component Code Start
testStartYear = input(2019, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testStopYear = input(9999, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
testPeriod() => true
///// Component Code Stop //////////////////////////////////////////
//////////////// STRATEGY EXECUTION //////////////////////////
//LONG SET UP
// Take Profit / Stop Loss
long_tp1_inp = input(4.5, title='Long Take Profit 1 %', step=0.1)/100
long_tp1_qty = input(15, title="Long Take Profit 1 Qty", step=1)
long_tp2_inp = input(20, title='Long Take Profit 2%', step=0.1)/100
long_tp2_qty = input(100, title="Long Take Profit 2 Qty", step=1)
long_take_level_1 = strategy.position_avg_price * (1 + long_tp1_inp)
long_take_level_2 = strategy.position_avg_price * (1 + long_tp2_inp)
long_sl_inp = input(4, title='Long Stop Loss %', step=0.1)/100
long_stop_level = strategy.position_avg_price * (1 - long_sl_inp)
// STRATEGY CONDITION
// LONG
entry_long = ((open > lower and open < upper) and close > upper) and up > down and up > benchmark // and volume[0] > volume[1]
entry_price_long=valuewhen(entry_long,close,0)
SL_long = entry_price_long * (1 - long_sl_inp)
exit_long = (close < lower) or low < SL_long
// STRATEGY EXECUTION
if testPeriod()
// LONG
if UT
strategy.entry(id="Long", long=true, when=entry_long, comment = "INSERT ENTER LONG COMMAND")
strategy.exit("TP1","Long", qty_percent=long_tp1_qty, limit=long_take_level_1) // PLACE TAKE PROFIT IN WBT BOT SETTINGS
strategy.exit("TP2","Long", qty_percent=long_tp2_qty, limit=long_take_level_2) // PLACE TAKE PROFIT IN WBT BOT SETTINGS
strategy.close(id="Long", when=exit_long, comment= "INSERT EXIT LONG COMMAND")
//PLOT FIXED SLTP LINE
// LONG POSITION
plot(strategy.position_size > 0 ? long_take_level_1 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="1st Long Take Profit")
plot(strategy.position_size > 0 ? long_take_level_2 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="2nd Long Take Profit")
plot(strategy.position_size > 0 ? long_stop_level : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Stop Loss")