El CMF rompió la estrategia de la línea uniforme
La estrategia combina el indicador de movilidad CMF y la EMA de 200 días para construir señales comerciales.
Específicamente, el CMF refleja la velocidad de cambio del flujo de capitales. Cuando el CMF está arriba, usa 0 como señal de compra, y cuando está abajo, usa 0 como señal de venta. Al mismo tiempo, el precio solo hace más cuando está por encima de la EMA de 200 días y solo hace nada cuando está por debajo de la EMA de 200 días.
El stop-loss se establece como el doble del indicador ATR. El stop-loss se establece como el doble del stop-loss, logrando una proporción de stop-loss de 2: 1.
La ventaja de esta estrategia es que se utiliza el CMF para determinar el movimiento de los flujos de capitales, al mismo tiempo que se utiliza el EMA para determinar la tendencia general. El LETTRE tiene un ratio de ganancias y pérdidas, lo que favorece una rentabilidad estable.
En general, la estrategia de CMF para romper la línea media funciona mejor cuando la tendencia es evidente. Pero en el disco real, todavía se necesita prestar atención a la hora en que el indicador emite la señal para evitar pérdidas innecesarias.
/*backtest start: 2023-08-11 00:00:00 end: 2023-09-10 00:00:00 period: 45m basePeriod: 5m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // *************************************************** // CMF Velocity with 200 EMA Strategy // CMF Velocity Indicator by TheSadRhinoInvesting // Author: TheSadRhinoInvesting, v1.0, 2021.05.16 // INITIAL RELEASE // *************************************************** //@version=4 strategy("CMF Velocity with 200EMA Strategy") // *************************************************** // Strategy & Rules // *************************************************** // This strategy is a demonstration of my new Indicator: CMF Velocity // CMF Velocity: https://www.tradingview.com/script/zsTl96Gd-CMF-Velocity/ // The strategy works best in a strongly trending market // === Indicators === // EMA // @ 200 // CMF Velocity // @ 11, 7 // ATR // @ 10 // === Rules === // long only // - price above EMA200 // short only // - price below EMA200 // Stop Loss = 2x ATR // Profit = 2x SL/risk (Profit Ratio x Max Loss) // === Entries === // LONG // - long entry (Typical): // - CMF Velocity crosses above 0 // SHORT // - short entry (Typical): // - CMF Velocity crosses below 0 // *************************************************** // Backtest Parameters // *************************************************** testStartYear = input(2021, "Backtest Start Year") testStartMonth = input(5, "Backtest Start Month") testStartDay = input(2, "Backtest Start Day") testStartHour = input(0, "Backtest Start Hour") testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, testStartHour, 0) testEndYear = input(2021, "Backtest End Year") testEndMonth = input(5, "Backtest End Month") testEndDay = input(16, "Backtest End Day") testEndHour = input(0, "Backtest End Hour") testPeriodEnd = timestamp(testEndYear, testEndMonth, testEndDay, testEndHour, 0) timeBacktesting = true 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)) // *************************************************** // Inputs // *************************************************** // Profit/Loss Ratio pLRatioMultiplier = input(2, title="Profit/Loss Multiplier", step=0.1, minval=0.1) // EMA Period emaPeriod = input(200, title="EMA Period", step=1, minval=1) // ATR Multiplier atrMultiplier = input(2, title="ATR Multiplier", step=0.1, minval=0.1) // ATR Period atrPeriod = input(10, title="ATR Period", step=1, minval=1) // CMF Period cmfPeriod = input(11, title="CMF Period", step=1, minval=1) // CMF Velocity Period cmfVelocityPeriod = input(7, title="CMF Velocity Period", step=1, minval=1) // *************************************************** // Indicator Functions // *************************************************** // CMF Function cmf(period) => moneyFlowMultiplier = (((close - low) - (high - close)) / (high - low)) * volume notNaMoneyFlowMultiplier = na(moneyFlowMultiplier) ? 0 : moneyFlowMultiplier moneyFlowAverage = sma(notNaMoneyFlowMultiplier, period) volumeAverage = sma(volume, period) moneyFlowAverage / volumeAverage // CMF Velocity Function cmfVelocity(cmf, period) => difference = change(cmf) sma(difference, period) // *************************************************** // Indicator Calculation and Plotting // *************************************************** cmfSeries = cmf(cmfPeriod) cmfVelocitySeries = cmfVelocity(cmfSeries, cmfVelocityPeriod) atrSeries = atr(atrPeriod) triggerEMA = ema(close, emaPeriod) plot(triggerEMA) // *************************************************** // Strategy Execution // *************************************************** if (crossover(cmfVelocitySeries, 0.0) and triggerEMA < close and timeBacktesting) stopOffset = atrSeries * atrMultiplier profitOffset = stopOffset * pLRatioMultiplier stopLoss = close - stopOffset takeProfit = close + profitOffset strategy.entry("Long Entry", true) strategy.exit("Exit", "Long Entry", stop=stopLoss, limit=takeProfit) if (crossunder(cmfVelocitySeries, 0.0) and triggerEMA > close and timeBacktesting) stopOffset = atrSeries * atrMultiplier profitOffset = stopOffset * pLRatioMultiplier stopLoss = close + stopOffset takeProfit = close - profitOffset strategy.entry("Short Entry", false) strategy.exit("Exit", "Short Entry", stop=stopLoss, limit=takeProfit)