Стратегия торговли акциями, объединяющая экспоненциальную скользящую среднюю с последующей остановкой потери и процентной остановкой потери

Автор:Чао Чжан, Дата: 2024-01-03 16:25:54
Тэги:

img

Обзор

Ядром этой стратегии является использование экспоненциальных скользящих средних перекресток в качестве торговых сигналов, в сочетании с отслеживанием стоп-лосса и процентным стоп-лосом для блокировки прибыли и контроля рисков.

Логика стратегии

  1. Вычислить быструю EMA и медленную EMA, причем быструю EMA составляет 20 дней, а медленную EMA - 50 дней.

  2. После входа на рынок устанавливается стоп-лосс на основе направления хранения, например, 7% для длинной позиции и 7% для короткой позиции.

  3. В то же время устанавливается цена остановки потери на основе цены входа и направления держания, например, на 2% ниже цены входа для длинной торговли и на 2% выше цены входа для короткой торговли.

  4. Сравните последнюю цену стоп-лосса и цену стоп-лосса, используйте ту, которая ближе к рыночной цене, как окончательную цену стоп-лосса для этой сделки, отправьте ордер стоп-лосса.

Преимущества

  1. Простые и простые в реализации сигналы движущейся средней торговли.

  2. Следующая остановка потери блокирует прибыль в максимально возможной степени, избегая ненужных потерь от ложных сигналов.

  3. Процентный стоп-лосс интуитивно понятен и легко настраивается для контроля максимальных потерь на одну сделку.

  4. Сочетание последующих остановок и фиксированных остановок как блокирует прибыль и контролирует риски.

Риски и контрмеры

  1. Движущиеся средние могут легко генерировать ложные сигналы, добавлять дополнительные фильтры, такие как громкость.

  2. Задержки задержки иногда запускаются слишком рано, немного расслабьте процент задержки.

  3. Неправильное установление фиксированного стоп-лосса может быть слишком агрессивным или консервативным, необходимо протестировать и настроить процентный параметр.

  4. Механические выходные стоп-лосс могут упустить возможности переворота рынка, включают в себя технические индикаторы для оценки стоп-триггера.

Руководство по оптимизации

  1. Попробуйте различные комбинации EMA, чтобы найти оптимальный баланс.

  2. Добавьте такие показатели, как громкость, чтобы отфильтровать ложные сигналы.

  3. Проверьте больше акций, чтобы найти подходящие проценты стоп-лосса.

  4. Попробуйте адаптивные остановки, которые адаптируются к рыночным условиям.

  5. Включайте такие индикаторы, как RSI, чтобы определить время остановки.

Резюме

Эта стратегия объединяет движущиеся средние торговые сигналы, последующие остановки и процентные остановки. Благодаря оптимизации параметров, она может достигать стабильной прибыли с строгим контролем рисков по различным акциям и товарам, которые стоит исследовать и постоянно совершенствовать для торговцев количеством.


/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-02 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © wouterpruym1828

//@version=5
strategy(title=" Combining Trailing Stop and Stop loss (% of instrument price)",
     overlay=true, pyramiding=1, shorttitle="TSL&SL%")

//INDICATOR SECTION

// Indicator Input options+
i_FastEMA = input.int(title = "Fast EMA period", minval = 0, defval = 20)
i_SlowEMA = input.int(title = "Slow EMA period", minval = 0, defval = 50)
     
// Calculate moving averages
fastEMA = ta.ema(close, i_FastEMA)
slowEMA = ta.ema(close, i_SlowEMA)

// Plot moving averages
plot(fastEMA, title="Fast SMA", color=color.blue)
plot(slowEMA, title="Slow SMA", color=color.orange)




//STRATEGY SECTION  

// Calculate trading conditions
buy  = ta.crossover(fastEMA, slowEMA)
sell = ta.crossunder(fastEMA, slowEMA)

// STEP 1:
// Configure trail stop loss level with input options (optional)

longTrailPerc = input.float(title="Long Trailing Stop (%)", minval=0.0, step=0.1, defval=7) * 0.01

shortTrailPerc = input.float(title="Short Trailing Stop (%)", minval=0.0, step=0.1, defval=7) * 0.01

//Configure stop loss level with input options (optional)

longStopPerc = input.float(title="Long Stop Loss (%)", minval=0.0, step=0.1, defval=2)*0.01

shortStopPerc = input.float(title="Short Stop Loss (%)", minval=0.0, step=0.1, defval=2)*0.01


// STEP 2:
// Determine trail stop loss prices
longTrailPrice = 0.0, shortTrailPrice = 0.0

longTrailPrice := if (strategy.position_size > 0)
    stopValue = high * (1 - longTrailPerc)
    math.max(stopValue, longTrailPrice[1])
else
    0

shortTrailPrice := if (strategy.position_size < 0)
    stopValue = low * (1 + shortTrailPerc)
    math.min(stopValue, shortTrailPrice[1])
else
    999999

// Determine stop loss prices
entryPrice = 0.0

entryPrice := strategy.opentrades.entry_price(strategy.opentrades - 1)


longLossPrice = entryPrice * (1 - longStopPerc)

shortLossPrice = entryPrice * (1 + shortStopPerc)


// Plot stop loss values for confirmation

plot(series=(strategy.position_size > 0) ? longTrailPrice : na,
     color=color.fuchsia, style=plot.style_cross,
     linewidth=2, title="Long Trail Stop")
plot(series=(strategy.position_size < 0) ? shortTrailPrice : na,
     color=color.fuchsia, style=plot.style_cross,
     linewidth=2, title="Short Trail Stop")

plot(series=(strategy.position_size > 0) ? longLossPrice : na,
     color=color.olive, style=plot.style_cross,
     linewidth=2, title="Long Stop Loss")
plot(series=(strategy.position_size < 0) ? shortLossPrice : na,
     color=color.olive, style=plot.style_cross,
     linewidth=2, title="Short Stop Loss")

// Submit entry orders
if (buy)
    strategy.entry("Buy", strategy.long)

if (sell)
    strategy.entry("Sell", strategy.short)


//Evaluating trailing stop or stop loss to use

longStopPrice = longTrailPrice < longLossPrice ? longLossPrice : longTrailPrice

shortStopPrice = shortTrailPrice > shortLossPrice ? shortLossPrice : shortTrailPrice

// STEP 3:
// Submit exit orders for stop price

if (strategy.position_size > 0)
    strategy.exit(id="Buy Stop", stop=longStopPrice)

if (strategy.position_size < 0)
    strategy.exit(id="Sell Stop", stop=shortStopPrice)


Больше