
Данная стратегия представляет собой динамическую систему отслеживания тренда, основанную на двойном канале скользящей средней, в сочетании с механизмом управления рисками. В этой стратегии используются две простые скользящие средние (SMA) для построения торгового канала, где верхняя граница использует скользящую среднюю, рассчитанную по самой высокой цене, а нижняя граница использует скользящую среднюю, рассчитанную по самой низкой цене. Система использует пять последовательных цен закрытия линии K, прорывающих верхнюю дорожку, в качестве сигнала на вход и пять последовательных цен закрытия линии K, падающих ниже нижней дорожки или отступающих на 25% от самой высокой точки, в качестве сигнала на выход для достижения динамического тренда. отслеживание и контроль рисков.
Основной принцип стратегии — улавливание ценовых трендов с помощью канала двойной скользящей средней и установление строгого механизма входа и выхода:
Эта стратегия создает полноценную торговую систему отслеживания тренда с помощью канала двойной скользящей средней в сочетании со строгим подтверждением входа и двойными механизмами выхода для достижения эффективного отслеживания тренда и эффективного контроля рисков. Преимуществами стратегии являются четкая логика исполнения и идеальный контроль рисков, но она все еще нуждается в оптимизации параметров для различных рыночных сред и может быть дополнительно улучшена путем добавления фильтрации рыночной среды, подтверждения за несколько временных периодов и т. д. В целом, это количественная торговая стратегия с законченной структурой и строгой логикой, которая подходит для применения в рыночной среде с очевидными тенденциями.
/*backtest
start: 2025-01-02 00:00:00
end: 2025-01-09 00:00:00
period: 10m
basePeriod: 10m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/
//@version=5
strategy("Moving Average Channel (MAC)", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// Parameters for Moving Averages
upperMALength = input.int(10, title="Upper MA Length")
lowerMALength = input.int(8, title="Lower MA Length")
stopLossPercent = input.float(25.0, title="Stop Loss (%)", minval=0.1) / 100
// Calculate Moving Averages
upperMA = ta.sma(high, upperMALength)
lowerMA = ta.sma(low, lowerMALength)
// Plot Moving Averages
plot(upperMA, color=color.red, title="Upper Moving Average")
plot(lowerMA, color=color.green, title="Lower Moving Average")
// Initialize variables
var int upperCounter = 0
var int lowerCounter = 0
var float entryPrice = na
var float highestPrice = na
// Update counters based on conditions
if (low <= upperMA)
upperCounter := 0
else
upperCounter += 1
if (high >= lowerMA)
lowerCounter := 0
else
lowerCounter += 1
// Entry condition: 5 consecutive bars above the Upper MA
if (upperCounter == 5 and strategy.position_size == 0)
strategy.entry("Long", strategy.long)
highestPrice := high // Initialize highest price
// Update the highest price after entry
if (strategy.position_size > 0)
highestPrice := na(highestPrice) ? high : math.max(highestPrice, high)
// Exit condition: 5 consecutive bars below the Lower MA
if (lowerCounter == 5 and strategy.position_size > 0)
strategy.close("Long", comment="Exit: 5 bars below Lower MA")
// Stop-loss condition: Exit if market closes below 25% of the highest price since entry
stopLossCondition = low < highestPrice * (1 - stopLossPercent)
if (stopLossCondition and strategy.position_size > 0)
strategy.close("Long", comment="Exit: Stop Loss")