Esta estratégia integra estratégia de média móvel, gráficos de nuvem de Ichimoku e indicadores técnicos do canal Keltner para alcançar o seguimento da tendência e a negociação de avanço, que é adequada para a negociação algorítmica de alta frequência.
Esta estratégia integra gráficos de nuvem Ichimoku, canais de Keltner e estratégias de média móvel com múltiplos indicadores técnicos para alcançar rastreamento de tendências e negociação de avanço eficiente. Em comparação com um único indicador, o julgamento desta estratégia é mais abrangente e preciso, evitando certos falsos sinais. Ao mesmo tempo, há também problemas de que as configurações de parâmetros são mais complexas e precisam ser otimizadas para ações individuais. Em geral, esta estratégia é adequada para negociação algorítmica de alta frequência com efeitos significativos.
/*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))