Количественная стратегия, основанная на оптимизации параметров и следующая за трендом


Дата создания: 2024-01-02 11:01:22 Последнее изменение: 2024-01-02 11:01:22
Копировать: 0 Количество просмотров: 682
1
Подписаться
1621
Подписчики

Количественная стратегия, основанная на оптимизации параметров и следующая за трендом

Обзор

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

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

Эта стратегия использует индикатор percentrank для определения ценовой тенденции. Percentrank указывает на относительную силу текущей цены в течение просмотра цикла.

%rank имеет значение от 0 до 100. Когда %rank близко к 0, то текущая цена близка к самой низкой цене за просмотрный период и находится в зоне недооценки; когда близко к 100, то текущая цена близка к самой высокой цене за просмотрный период и находится в зоне переоценки.

Эта стратегия также включает в себя параметр scale как величину смещения. Смещение диапазона от 0 до 100 в диапазоне scale до 100+ scale. При этом устанавливаются две сигнальные линии level_1 и level_2.

Сигналы просмотра возникают, когда индикатор percentrank пересекает уровень_1 снизу вверх; сигналы просмотра возникают, когда он пересекает уровень_2 вверх. Условия равновесия противоположны сигналам входа.

Стратегические преимущества

  1. Используйте индикатор percentrank, чтобы определить силу ценового тренда и избежать ловушки
  2. Применение методов оптимизации параметров, регулирования масштаба смещения и значений сигнальной линии, для корректировки параметров для различных сортов и циклов, повышения стабильности
  3. Сочетание идей отслеживания тенденций и обратной торговли для своевременного отслеживания тенденций после прорыва сигнальной линии

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

  1. Неправильные тенденции приводят к ненужным потерям
  2. Неочевидные тенденции в ценовых колебаниях могут привести к ошибочным сигналам.
  3. Неправильная настройка параметров может привести к частоте или недостаточному количеству сделок

Для вышеуказанных рисков можно оптимизировать параметры len, scale, level; в то же время можно использовать другие показатели в качестве подтверждения, чтобы избежать ошибочных сделок.

Направление оптимизации

В этой стратегии есть место для дальнейшей оптимизации:

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

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2023-12-02 00:00:00
end: 2024-01-01 00:00:00
period: 4h
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/
// © Alex_Dyuk

//@version=4
strategy(title="percentrank", shorttitle="percentrank")
src = input(close, title="Source")
len = input(title="lookback - Период сравнения", type=input.integer, defval=10, minval=2)
scale = input(title="scale offset - смещение шкалы", type=input.integer, defval=50, minval=0, maxval=100)
level_1 = input(title="sygnal line 1", type=input.integer, defval=30)
level_2 = input(title="sygnal line 2", type=input.integer, defval=-30)

prank = percentrank(src,len)-scale
plot(prank, style = plot.style_columns)
plot(level_2, style = plot.style_line, color = color.red)
plot(level_1, style = plot.style_line, color = color.green)

longCondition = (crossunder(level_1, prank) == true)
if (longCondition)
    strategy.entry("Long", strategy.long)
longExitCondition = (crossover(level_2, prank) == true)
if (longExitCondition)
    strategy.close("Long")
    
shortCondition = (crossover(level_2, prank) == true)
if (shortCondition)
    strategy.entry("Short", strategy.short)
shortexitCondition = (crossunder(level_1, prank) == true)
if (shortexitCondition)
    strategy.close("Short")