Стратегия торговли курсом изменения

Автор:Чао Чжан, Дата: 2023-09-28 11:26:44
Тэги:

Обзор

Эта стратегия рассчитывает скорость изменения с течением времени для определения сигналов покупки/продажи.

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

Стратегия основывается главным образом на следующих показателях:

  1. Быстрая простая скользящая средняя (по умолчанию 14 дней): для оценки краткосрочной тенденции
  2. Медленная простая скользящая средняя (по умолчанию 100 дней): для измерения долгосрочной тенденции
  3. Справочная простая скользящая средняя (по умолчанию 30 дней): для определения общего направления
  4. Коэффициент изменения: рассчитывается на основе наивысшей/наименьшей цены за период обратной связи (по умолчанию 12 бар) для оценки величины колебаний цен.

Особые правила въезда:

  1. Цена ниже базовой SMA
  2. ROC выше заранее установленного низкого порога ROC (по умолчанию 2,3%)
  3. Быстрый рост SMA и медленный спад SMA, указывающие на потенциальный перекресток

Особые правила выхода:

  1. Цена выше базовой SMA
  2. ROC выше заранее установленного высокого порога ROC (по умолчанию 4,7%)
  3. 3 последовательных восходящих ствола
  4. Текущая прибыль > 0
  5. Быстрая SMA над медленной SMA

Размер позиции представляет собой процентную часть (по умолчанию 96%) от общего собственного капитала для использования кредитного плеча.

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

Стратегия имеет следующие преимущества:

  1. Использование ROC для обнаружения колебаний позволяет фиксировать движения вверх/вниз для получения более высокой доходности.

  2. Сочетание быстрой/медленной SMA помогает более точно определить низкие/высокие точки.

  3. Справочная SMA обеспечивает общее направление, чтобы избежать отвлечения от краткосрочного шума.

  4. Следующая остановка потери блокирует прибыль и уменьшает риск снижения.

  5. Увеличение размеров позиций увеличивает прибыль.

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

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

Стратегия также имеет следующие риски:

  1. Неправильные параметры ROC и SMA могут привести к пропущенным сигналам или плохим сделкам.

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

  3. Процент стоп-лосса может быть скорректирован.

  4. Склонна к перепадам на различных рынках.

  5. Риск чрезмерной адаптации к тесту.

Риски могут управляться с помощью оптимизации параметров, размещения позиций, корректировки стоп-лосса, тестирования надежности и т.д.

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

Стратегия может быть улучшена в следующих аспектах:

  1. Добавьте другие технические показатели, такие как волатильность, объем, чтобы улучшить точность сигнала.

  2. Оптимизировать количество сделок путем уменьшения частоты торговли, чтобы минимизировать воздействие випса.

  3. Включите методы прорыва вокруг ключевых уровней цен.

  4. Используйте машинное обучение для автоматической оптимизации параметров.

  5. Проверка надежности на разных рынках и в разные сроки.

  6. Настройка специализированных параметров для различных продуктов, таких как акции, форекс и т.д.

  7. Постоянно совершенствуйте сигналы и контроль рисков на основе результатов.

Резюме

Эта стратегия определяет торговые возможности вокруг краткосрочных колебаний с использованием анализа ROC и SMA. Она помогает извлечь выгоду из быстрых колебаний, но также требует надлежащего контроля рисков. Прекрасные параметры настройки, размещение позиций, стоп-потери и тестирование надежности могут повысить его стабильность и адаптивность. Стратегия служит справочным шаблоном для количественной торговли, но требует настройки для разных рынков.


/*backtest
start: 2022-09-21 00:00:00
end: 2023-09-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
// Author: Sonny Parlin (highschool dropout)
// Best if run on 5m timeframe
strategy(shorttitle="ROC+Strategy", title="Rate of Change Strategy",
                                      overlay=true,  currency=currency.USD,
                                      initial_capital=10000)

// Inputs and variables
ss = input(14, minval=10, maxval=50, title="SMA Fast (days)")
ff = input(100, minval=55, maxval=200, title="SMA Slow (days)")
ref = input(30, minval=20, maxval=50, title="SMA Reference (days)")
lowOffset = input(0.023, "ROC Low (%)", minval=0, step=0.01)
highOffset = input(0.047, "ROC High (%)", minval=0, step=0.01)
orderStake = input(0.96, "Order Stake (%)", minval=0, step=0.01)
lookback = input(12, "Lookback Candles", minval=1, step=1) 

// SMA
smaFast = sma(close, ss)
smaSlow = sma(close, ff)
smaRef = sma(close, ref)
ROC = (max(close[lookback],close) - min(close[lookback],close)) / max(close[lookback],close)

// Set up SMA plot but don't show by default
plot(smaFast, "smaFast", color=#00ff00, display = 0)
plot(smaSlow, "smaSlow", color=#ff0000, display = 0)
plot(smaRef, "smaRef", color=#ffffff, display = 0)

// The buy stratey:
// Guard that the low is under our SMA Reference line 
// Guard that the rate of change over the lookback period is greater than our 
// ROC lowOffset %, default is 0.023. (low < smaRef) and (ROC > lowOffset)
// SMA fast is on the rise and SMA slow is falling and they are very likely
// to cross. (rising(smaFast,1)) and (falling(smaSlow, 1)) 
enterLong = (low < smaRef) and (ROC > lowOffset) and (rising(smaFast,1)) and (falling(smaSlow,1)) 

// The sell Strategy:
// Guard that close is higher than our SMA reference line and that the rate of 
// change over the lookback period is greater than our highOffset %, default
// is 0.047. (close > smaRef) and (ROC > highOffset)
// Guard that close has risen by 3 candles in a row (rising(close,3)) 
// Guard that we currently have profit (strategy.openprofit > 0)
// Guard that SMA fast is higher than smaSlow (smaFast > smaSlow)
// If it keeps going up past our close position the trailing stoploss will kick in!
enterShort = (close > smaRef) and (ROC > highOffset) and (rising(close,3)) and (strategy.openprofit > 0) and (smaFast > smaSlow)

// Order size is based on total equity
// Example 1:
// startingEquity = 2000
// close = 47434.93
// orderStake = 0.45
// (2,000 × orderStake) / close = orderSize = 0.0189733599 = approx $900

// Example 2:
// startingEquity = 2000
// close = 1.272
// orderStake = 0.45
// (startingEquity × orderStake) / close = orderSize = 707.5471698113 = approx $900
orderSize = (strategy.equity * orderStake) / close

// Trailing Stoploss
// I'm using 2.62 as my default value, play with this for different results.
longTrailPerc = input(title="Trailing Stoploss (%)",
     type=input.float, minval=0.0, step=0.1, defval=3.62) * 0.01
     
longStopPrice = 0.0

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

if (enterLong)
    strategy.entry("Open Long Position", strategy.long, orderSize, when=strategy.position_size <= 0)
    
if (enterShort)
    strategy.exit(id="Close Long Position", stop=longStopPrice)


//plot(strategy.equity)

Больше