
Cette stratégie est intégrée à la stratégie homogène, aux diagrammes de nuages d’Ichimoku et aux indicateurs techniques des canaux Keltner, permettant le suivi des tendances et les transactions de rupture, et est applicable à la négociation d’algorithmes à haute fréquence.
Cette stratégie intègre plusieurs indicateurs techniques tels que le diagramme de nuage d’Ichimoku, le canal de Keltner et la stratégie homogène, permettant le suivi de tendances et des transactions de rupture plus efficaces. Par rapport à un seul indicateur, la stratégie juge plus globalement et plus précisément, évitant ainsi certains faux signaux. Il existe également des paramètres plus complexes qui nécessitent une optimisation pour chaque action.
/*backtest
start: 2023-11-19 00:00:00
end: 2023-12-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
// Author: Persio Flexa
// Description: Ichimoku Clouds with Keltner Channel, perfect for margin trading
strategy("Ichimoku Keltner Strategy", overlay=true)
// -- Keltner ------------------------------------------------------------------
source = close
useTrueRange = input(true)
length = input(18, minval=1)
mult = input(1.8)
ma = sma(source, length)
range = useTrueRange ? tr : high - low
rangema = sma(range, length)
upper = ma + rangema * mult
lower = ma - rangema * mult
plot(ma, title="BASE", color=orange,transp=85)
plot(upper, title="UPPER", color=red)
plot(lower, title="LOWER", color=green)
//crossUpper = crossover(source, upper)
//crossLower = crossunder(source, lower)
crossUpper = source > upper
crossLower = source < lower
bprice = 0.0
bprice := crossUpper ? high+syminfo.mintick : nz(bprice[1])
sprice = 0.0
sprice := crossLower ? low -syminfo.mintick : nz(sprice[1])
crossBcond = false
crossBcond := crossUpper ? true
: na(crossBcond[1]) ? false : crossBcond[1]
crossScond = false
crossScond := crossLower ? true
: na(crossScond[1]) ? false : crossScond[1]
cancelBcond = crossBcond and (source < ma or high >= bprice )
cancelScond = crossScond and (source > ma or low <= sprice )
// ---------------------------------------------------------------------
// -- Ichimoku
ATRlength = input(200, minval=1)
ATRMult = input(2.272, minval=1)
ATR = rma(tr(true), ATRlength)
len = input(26, minval=1, title="EMA Length")
src = input(close, title="Source")
out = ema(src, len)
emaup = out+(ATR*ATRMult)
emadw = out-(ATR*ATRMult)
conversionPeriods = input(15, minval=1),
basePeriods = input(35, minval=1)
laggingSpan2Periods = input(52, minval=1),
displacement = input(26, minval=1)
donchian(len) => avg(lowest(len), highest(len))
conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = avg(conversionLine, baseLine)
leadLine2 = donchian(laggingSpan2Periods)
p1 = plot(leadLine1, offset = displacement, color=green,transp=85, title="Lead 1")
p2 = plot(leadLine2, offset = displacement, color=red,transp=85, title="Lead 2")
fill(p1, p2,silver)
longCond = crossover(conversionLine, baseLine)
shortCond = crossunder(conversionLine, baseLine)
// -------------------------------------------------------------------------
if (crossUpper and (conversionLine > baseLine))
strategy.entry("long", strategy.long, stop=bprice, comment="LONG")
if (crossLower and (conversionLine < baseLine))
strategy.entry("short", strategy.short, stop=sprice, comment="SHORT")
strategy.close("long", when = (shortCond and source < lower))
strategy.close("short", when = (longCond and source > upper))