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


Дата создания: 2024-01-03 16:25:54 Последнее изменение: 2024-01-03 16:25:54
Копировать: 0 Количество просмотров: 699
1
Подписаться
1621
Подписчики

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

Обзор

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

Стратегический принцип

  1. Рассчитывают быструю ЭМА и медленную ЭМА. Быстрая ЭМА имеет 20-дневный и медленная ЭМА - 50-дневный циклы. При прохождении медленной ЭМА над быстрой ЭМА генерируется сигнал покупки; при прохождении медленной ЭМА под быстрой ЭМА генерируется сигнал продажи.

  2. После входа настройка стоп-слега, в зависимости от направления удержания позиции настройка стоп-слега для многопозиций и стоп-слега для пустых позиций, например, 7%. Стоп-слега будет автоматически корректироваться на каждую K-линию, блокируя максимально возможную прибыль.

  3. Одновременно устанавливается стоп-позиция, в зависимости от направления удержания позиции и цены входа устанавливается соответственно процент стоп-позиции с несколькими позициями и стоп-позиции с пустыми позициями, например, 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)