Strategi ini menggabungkan penunjuk Momentum CMF dan EMA 200 hari untuk membina isyarat perdagangan.
Secara khusus, Momentum CMF mencerminkan kadar perubahan dalam aliran wang. Upcrossing 0 adalah isyarat beli, dan downcrossing 0 adalah isyarat jual. Sementara itu, hanya panjang di atas EMA 200 hari, dan hanya pendek di bawahnya.
Stop loss ditetapkan pada 2 kali ATR. Ambil keuntungan adalah 2 kali stop loss, mencapai nisbah keuntungan / kerugian 2: 1.
Kelebihan strategi ini adalah menggunakan Momentum CMF untuk menilai arah aliran dana yang digabungkan dengan EMA untuk trend utama. nisbah keuntungan / kerugian membantu mendapatkan keuntungan yang stabil.
Secara keseluruhan, strategi purata bergerak CMF Momentum berfungsi dengan lebih baik apabila trend jelas.
/*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)