Стратегия альфа-тенденции с последующей остановкой потери

Автор:Чао Чжан, Дата: 2023-11-27 15:25:35
Тэги:

img

Обзор

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

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

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

В то же время активирован механизм последнего стоп-лосса. Уровень последнего стоп-лосса по умолчанию составляет 10% от цены закрытия дня. При хранении длинных позиций, если цена падает ниже уровня стоп-лосса, стратегия выйдет из позиции, чтобы остановить потерю. Аналогично для коротких позиций. Это помогает лучше зафиксировать прибыль и снизить риски.

Анализ преимуществ

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

  2. Посредством возможности отслеживания стоп-лосса можно эффективно контролировать убытки от одной сделки, снижая риски.

  3. Эта стратегия обладает сильной способностью контролировать риски. Даже при неблагоприятных рыночных условиях потери могут быть сведены к минимуму.

  4. При меньшем количестве эталонных входов эта стратегия эффективна в расчете и подходит для торговли на высокой частоте.

Анализ рисков

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

  2. При включении последующего стоп-лосса процент стоп-лосса должен быть установлен соответствующим образом.

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

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

Вышеперечисленные риски могут быть уменьшены путем корректировки параметров индикатора Альфа, установки DYNAMIC стоп-лосса, сокращения длины торгового цикла и т.д.

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

  1. Для поиска более подходящих комбинаций параметров индикатора Альфа можно проверить различные параметры индикатора.

  2. Попытка установить процентные ставки стоп-лосса динамически на основе ATR для лучшего адаптации к колебаниям рынка.

  3. Комбинируйте с другими индикаторами, такими как MACD, KD, чтобы отфильтровать некоторые ложные сигналы.

  4. Параметры могут быть автоматически оптимизированы на основе результатов торговли в режиме реального времени и обратного тестирования с использованием методов машинного обучения для улучшения интеллекта выбора параметров.

Заключение

Альфа-стратегия тренда с отслеживанием стоп-лосса сочетает в себе определение тренда и контроль рисков. Она может эффективно идентифицировать ценовые тенденции и блокировать прибыль для снижения рисков. По сравнению с простыми стратегиями отслеживания тренда, эта стратегия может получить более высокую устойчивую отдачу.


/*backtest
start: 2023-10-27 00:00:00
end: 2023-11-26 00:00:00
period: 1h
basePeriod: 15m
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/
// author © KivancOzbilgic
// developer © KivancOzbilgic
//@version=5

strategy("AlphaTrend Strategy", shorttitle='ATst', overlay=true, format=format.price, precision=2, margin_long=100, margin_short=100)
coeff = input.float(1, 'Multiplier', step=0.1)
AP = input(14, 'Common Period')
ATR = ta.sma(ta.tr, AP)
src = input(close)
showsignalsk = input(title='Show Signals?', defval=false)
novolumedata = input(title='Change calculation (no volume data)?', defval=false)
upT = low - ATR * coeff
downT = high + ATR * coeff
AlphaTrend = 0.0
AlphaTrend := (novolumedata ? ta.rsi(src, AP) >= 50 : ta.mfi(hlc3, AP) >= 50) ? upT < nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : upT : downT > nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : downT

color1 = AlphaTrend > AlphaTrend[1] ? #00E60F : AlphaTrend < AlphaTrend[1] ? #80000B : AlphaTrend[1] > AlphaTrend[3] ? #00E60F : #80000B
k1 = plot(AlphaTrend, color=color.new(#0022FC, 0), linewidth=3)
k2 = plot(AlphaTrend[2], color=color.new(#FC0400, 0), linewidth=3)

fill(k1, k2, color=color1)

buySignalk = ta.crossover(AlphaTrend, AlphaTrend[2])
sellSignalk = ta.crossunder(AlphaTrend, AlphaTrend[2])


K1 = ta.barssince(buySignalk)
K2 = ta.barssince(sellSignalk)
O1 = ta.barssince(buySignalk[1])
O2 = ta.barssince(sellSignalk[1])

plotshape(buySignalk and showsignalsk and O1 > K2 ? AlphaTrend[2] * 0.9999 : na, title='BUY', text='BUY', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(#0022FC, 0), textcolor=color.new(color.white, 0))

plotshape(sellSignalk and showsignalsk and O2 > K1 ? AlphaTrend[2] * 1.0001 : na, title='SELL', text='SELL', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.maroon, 0), textcolor=color.new(color.white, 0))


// //ENTER SOME SETUP TRADES FOR TSL EXAMPLE
// longCondition = ta.crossover(ta.sma(close, 10), ta.sma(close, 20))
// if longCondition
//     strategy.entry('My Long Entry Id', strategy.long)

// shortCondition = ta.crossunder(ta.sma(close, 10), ta.sma(close, 20))
// if shortCondition
//     strategy.entry('My Short Entry Id', strategy.short)



longCondition = buySignalk
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = sellSignalk
if (shortCondition)
    strategy.entry("Short", strategy.short)
    

enableTrailing = input.bool(title='Enable Trailing Stop (%)',defval = true)
//TRAILING STOP CODE
trailStop = input.float(title='Trailing (%)', minval=0.0, step=0.1, defval=10) * 0.01



longStopPrice = 0.0
shortStopPrice = 0.0
longStopPrice := if strategy.position_size > 0
    stopValue = close * (1 - trailStop)
    math.max(stopValue, longStopPrice[1])
else
    0
shortStopPrice := if strategy.position_size < 0
    stopValue = close * (1 + trailStop)
    math.min(stopValue, shortStopPrice[1])
else
    999999

//PLOT TSL LINES
plot(series=strategy.position_size > 0 ? longStopPrice : na, color=color.new(color.red, 0), style=plot.style_linebr, linewidth=1, title='Long Trail Stop', offset=1, title='Long Trail Stop')
plot(series=strategy.position_size < 0 ? shortStopPrice : na, color=color.new(color.red, 0), style=plot.style_linebr, linewidth=1, title='Short Trail Stop', offset=1, title='Short Trail Stop')

    
if enableTrailing
    //EXIT TRADE @ TSL
    if strategy.position_size > 0
        strategy.exit(id='Close Long', stop=longStopPrice)
    if strategy.position_size < 0
        strategy.exit(id='Close Short', stop=shortStopPrice)


 

Больше