Esta estrategia genera señales de negociación basadas en tres líneas de promedio móvil exponencial (EMA) con diferentes períodos: EMA a corto plazo con período de 5 días, EMA a mediano plazo con período de 8 días y EMA a largo plazo con período de 13 días.
Esta estrategia juzga la tendencia del mercado mediante el cálculo de EMA de diferentes períodos. La EMA a corto plazo refleja el precio promedio de los últimos días, mientras que las EMA a mediano y largo plazo reflejan el precio promedio en períodos de tiempo más largos. El cruce de la EMA a corto plazo con las EMA a mediano y largo plazo señala una ruptura al alza del precio, por lo que se toma una posición larga. Por el contrario, cuando la EMA a corto plazo cruza por debajo de las otras dos, señala una ruptura al descenso del precio, por lo que se toma una posición corta.
Específicamente, esta estrategia calcula simultáneamente las EMA de 5 días, 8 días y 13 días. Genera señales largas cuando la EMA de 5 días cruza las de 8 días y 13 días; genera señales cortas cuando la EMA de 5 días cruza por debajo de las otras dos. Después de ir largo, la posición se cierra una vez que la EMA de 5 días cruza de nuevo por debajo de la EMA de 13 días. Del mismo modo para la posición corta.
Ideas de mejora:
Este es un sistema típico de ruptura que juzga las reversiones de tendencia comparando cruces entre EMAs de corto, mediano y largo período. Su simplicidad en la señalización facilita la facilidad de negociación, pero también sufre de retraso inherente a las EMAs e incapacidad para filtrar tendencias reales de correcciones temporales.
/*backtest start: 2023-11-16 00:00:00 end: 2023-11-23 00:00:00 period: 30m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © gregoirejohnb // @It is modified by ttsaadet. // Moving average crossover systems measure drift in the market. They are great strategies for time-limited people. // So, why don't more people use them? // // strategy(title="EMA Crossover Strategy", shorttitle="EMA-5-8-13 COS by TTS", overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100, currency=currency.TRY,commission_type=strategy.commission.percent,commission_value=0.04, process_orders_on_close = true, initial_capital = 100000) // === GENERAL INPUTS === //strategy start date start_year = input(defval=2020, title="Backtest Start Year") // === LOGIC === short_period = input(type=input.integer,defval=5,minval=1,title="Length") mid_period = input(type=input.integer,defval=8,minval=1,title="Length") long_period = input(type=input.integer,defval=13,minval=1,title="Length") longOnly = input(type=input.bool,defval=false,title="Long Only") shortEma = ema(hl2,short_period) midEma = ema(hl2,mid_period) longEma = ema(hl2,long_period) plot(shortEma,linewidth=2,color=color.red,title="Fast") plot(midEma,linewidth=2,color=color.orange,title="Fast") plot(longEma,linewidth=2,color=color.blue,title="Slow") longEntry = ((shortEma > midEma) and crossover(shortEma,longEma)) or ((shortEma > longEma) and crossover(shortEma,midEma)) shortEntry =((shortEma < midEma) and crossunder(shortEma,longEma)) or ((shortEma < longEma) and crossunder(shortEma,midEma)) plotshape(longEntry ? close : na,style=shape.triangleup,color=color.green,location=location.belowbar,size=size.small,title="Long Triangle") plotshape(shortEntry and not longOnly ? close : na,style=shape.triangledown,color=color.red,location=location.abovebar,size=size.small,title="Short Triangle") plotshape(shortEntry and longOnly ? close : na,style=shape.xcross,color=color.black,location=location.abovebar,size=size.small,title="Exit Sign") // === STRATEGY - LONG POSITION EXECUTION === enterLong() => longEntry exitLong() => crossunder(shortEma,longEma) strategy.entry(id="Long", long=strategy.long, when=enterLong()) strategy.close(id="Long", when=exitLong()) // === STRATEGY - SHORT POSITION EXECUTION === enterShort() => not longOnly and shortEntry exitShort() => crossover(shortEma,longEma) strategy.entry(id="Short", long=strategy.short, when=enterShort()) strategy.close(id="Short", when=exitShort())