
Стратегия торговли с перерасчетом средней стоимости, основанная на динамическом колебателе Шанде (CMO), является стратегией технического анализа, используемой для выявления зон перепродажи путем вычисления динамики изменения цен в течение определенного периода времени. Стратегия основана на мониторинге динамических изменений цен на активы, чтобы совершать сделки в случае крайнего отклонения цен, чтобы поймать возможность возвращения средней стоимости цен.
В основе стратегии лежит расчет и применение показателей CMO. Движение CMO измеряется путем расчета разницы между суммарными значениями роста и падения в течение определенного периода. Конкретная формула расчета: CMO = 100 × (повышение и уменьшение) / (повышение и уменьшение)
В отличие от традиционного RSI, CMO использует одновременные данные о взлетах и падениях в молекуле, что обеспечивает более симметричную динамику. Стратегия считает, что рынок перепродается, когда CMO ниже 50, и ожидает, что цена восстановится, поэтому открывает больше позиций.
Эта стратегия использует показатели CMO для захвата рыночных возможностей перекупа и перепродажи, в сочетании с фиксированными временными остановками, чтобы создать стабильную систему торговли с средним возвратом. Логика стратегии ясна, контроль риска разумен, имеет хорошую практическую ценность.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-09 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Chande Momentum Oscillator Strategy", overlay=false)
// Input for the CMO period
cmoPeriod = input.int(9, minval=1, title="CMO Period")
// Calculate price changes
priceChange = ta.change(close)
// Separate positive and negative changes
up = priceChange > 0 ? priceChange : 0
down = priceChange < 0 ? -priceChange : 0
// Calculate the sum of ups and downs using a rolling window
sumUp = ta.sma(up, cmoPeriod) * cmoPeriod
sumDown = ta.sma(down, cmoPeriod) * cmoPeriod
// Calculate the Chande Momentum Oscillator (CMO)
cmo = 100 * (sumUp - sumDown) / (sumUp + sumDown)
// Define the entry and exit conditions
buyCondition = cmo < -50
sellCondition1 = cmo > 50
sellCondition2 = ta.barssince(buyCondition) >= 5
// Track if we are in a long position
var bool inTrade = false
if (buyCondition and not inTrade)
strategy.entry("Long", strategy.long)
inTrade := true
if (sellCondition1 or sellCondition2)
strategy.close("Long")
inTrade := false
// Plot the Chande Momentum Oscillator
plot(cmo, title="Chande Momentum Oscillator", color=color.blue)
hline(-50, "Buy Threshold", color=color.green)
hline(50, "Sell Threshold", color=color.red)