
Обзор
Стратегия основана на показателях UT Bot, разработанных QuantNomad, в сочетании с мышлением мобильной остановки. Первоначальный код был написан @Yo_adriiiiaan, изменен @HPotter. Стратегия будет использоваться в сочетании с Smart Money Concepts LuxAlgo.
Стратегический принцип
Основные принципы этой стратегии:
- Если цена закрытия превышает 50-летнюю простую скользящую среднюю, то совершается многоторговля.
- Для многоосновных позиций устанавливается движущаяся стоп-цена. Движущаяся стоп-цена составляет 80% от текущей цены закрытия (от 1 до 20%). Движущаяся стоп-цена движется вверх по мере роста цены, но не движется вниз, что защищает прибыль.
- Для свободных позиций также устанавливается движущаяся стоп-цена. Движущаяся стоп-цена составляет 120% от текущей закрывающей цены. Движущая стоп-цена движется вниз по мере падения цены, но не движется вверх.
- Используйте ATR (Average True Range) в качестве отсчета для движущегося стоп-цены. ATR (Average True Range) для движущегося стоп-цены рассчитывается следующим образом: при движении вверх, возьмите предыдущую ATR (Average True Range) для движущегося стоп-цены и текущую закрывающую цену - ATR*Ключевая стоимость (Key Value) - наибольшая из двух; при движении вниз, принимается предыдущая ATR, движущаяся по цене стоп-лосса, и (Current Closing Price + ATR)*Key Value) - меньшее из двух значений. Key Value - это параметр, который устанавливается пользователем для регулирования чувствительности мобильного стоп-лоста.
- В зависимости от прорыва цены перемещения ATR, определяется направление текущей позиции. При перерыве цены перемещения ATR вверх, держите позицию с несколькими позициями; при перерыве цены перемещения ATR вниз, держите позицию с несколькими позициями; в остальных случаях сохраняйте текущую позицию без изменений.
Анализ преимуществ
- Устройство с мобильным стопом может хорошо защитить прибыль, позволяя стратегии получать больше прибыли в трендовых ситуациях.
- Стоп-стратегия для многоголовых и пустых позиций, способная адаптироваться к различным ситуациям.
- Используя ATR в качестве эталона для остановки, можно динамически регулировать положение остановки, более гибко и эффективно.
- Для оптимизации пользователя предоставляются параметры ключевых значений, которые можно настраивать в зависимости от разных сортов и циклов, чтобы повысить адаптивность.
Анализ рисков
- Частые остановки могут привести к перераспределению операций, увеличению комиссионных расходов и снижению прибыли в условиях шока.
- В некоторых ситуациях фиксированный процент может не очень хорошо реагировать на колебания цены.
- В стратегии учитываются только движущиеся стопы, а не движущиеся стопы, что может привести к упущению некоторых возможностей для получения прибыли.
- Выбор параметров имеет большое влияние на эффективность стратегии, а неправильные параметры могут привести к большему риску отмены.
Направление оптимизации
- Можно рассмотреть возможность оптимизации условий входа в сочетании с другими показателями или условиями, такими как объем торгов, волатильность и т. д., чтобы повысить надежность сигнала.
- Для расчета методов мобильного стоп-стоп можно исследовать более сложные и эффективные способы, например, использование параличевой стоп-стоп, динамического стоп-стоп и т. д.
- Можно добавить механизм с мобильными стопами, например, настройка динамических стопов на основе ATR или процентов, чтобы лучше блокировать прибыль.
- Для различных сортов и циклов можно проводить оптимизацию параметров, искать наиболее подходящие комбинации параметров. Также можно динамически корректировать параметры в зависимости от изменений состояния рынка.
Подвести итог
Эта стратегия основана на показателях UT Bot, добавляет логику мобильного остановки, которая может защищать прибыль в трендовых ситуациях. В то же время, стратегия устанавливает стоп-потери для многоголовых и пустых позиций, обладает высокой адаптивностью. Используя ATR в качестве ориентира для мобильного стоп-потери, можно динамически регулировать стоп-позиции, повышая гибкость.
В будущем можно будет совершенствовать стратегию, оптимизируя условия входа в игру, исследуя более сложные способы мобильного остановки, включая механизм мобильного остановки, оптимизируя параметры для разных сортов и циклов, чтобы получить более стабильную прибыль. В целом, концепция стратегии проста и понятна, легко понять и реализовать, но есть еще пространство для дальнейшей оптимизации, которое стоит продолжать исследовать и совершенствовать.
Исходный код стратегии
/*backtest
start: 2023-03-05 00:00:00
end: 2024-03-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Trailingstop", overlay=true)
if close > sma(close, 50)
strategy.entry("long", strategy.long)
// Trailing stop loss for long positions
Trailperc = 0.20
price_stop_long = 0.0
if (strategy.position_size > 0)
stopValue = close * (1 - Trailperc)
price_stop_long := max(stopValue, price_stop_long[1])
else
price_stop_long := 0
if (strategy.position_size > 0)
strategy.exit(id="stoploss_long", stop=price_stop_long)
// Trailing stop loss for short positions
Trailperc_short = 0.20
price_stop_short = 0.0
if (strategy.position_size < 0)
stopValue_short = close * (1 + Trailperc_short)
price_stop_short := min(stopValue_short, price_stop_short[1])
else
price_stop_short := 0
if (strategy.position_size < 0)
strategy.exit(id="stoploss_short", stop=price_stop_short)
// ATR Trailing Stop for visualization
keyvalue = input(3, title="Key Value. 'This changes the sensitivity'", step=0.5)
atrperiod = input(10, title="ATR Period")
xATR = atr(atrperiod)
nLoss = keyvalue * xATR
xATRTrailingStop = 0.0
xATRTrailingStop := iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss),
iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss),
iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss)))
pos = 0
pos := iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1,
iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0)))
xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue
plot(xATRTrailingStop, color = xcolor, title = "Trailing Stop")