Длинная и короткая стратегия пересечения SMA в сочетании с контролем пиковой коррекции и автоматическим завершением

SMA
Дата создания: 2024-07-29 14:16:58 Последнее изменение: 2024-07-29 14:16:58
Копировать: 0 Количество просмотров: 555
1
Подписаться
1617
Подписчики

Длинная и короткая стратегия пересечения SMA в сочетании с контролем пиковой коррекции и автоматическим завершением

Обзор

Эта стратегия представляет собой многопрофильную торговую систему, которая сочетает в себе пересекающийся сигнал простой скользящей средней (SMA) и контроль за пиковым отступлением. Она использует пересекание 14- и 28-дневных SMA для создания многопрофильных торговых сигналов, а также для мониторинга пиковых отступлений стратегии в режиме реального времени.

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

  1. Сигналы транзакций генерируются:

    • Когда 14-дневный SMA проходит через 28-дневный SMA, образуется многосигналный сигнал.
    • Когда 14-й SMA проходит под 28-й SMA, генерируется сигнал обратного хода.
  2. Контроль за пиковым отказом:

    • В режиме реального времени отслеживается кривая интересов стратегии, фиксируются исторические максимумы (пики).
    • Когда текущие доли ниже пика, вступает в состояние отступления, записывая минимум ((нижняя часть долины)).
    • Процент отмены = (пик - дно долины) / пик * 100%.
    • Если процент вывода превышает заданную максимальную отметку, стратегия прекращает открытие новых позиций.
  3. Анализ циклов пик-долина:

    • Установка минимального процента отступления, используемого для определения эффективного пикового-донного цикла.
    • Каждый раз, когда завершается действительный цикл, записывайте номер цикла, предыдущие увеличения, уменьшения и время окончания.
    • Результаты анализа будут представлены в виде таблиц, которые помогут трейдерам просмотреть историческую эффективность стратегии.

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

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

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

  3. Прозрачные показатели риска: Анализ пиковых и дновых циклов предоставляет подробную историческую информацию об отступлениях, что позволяет трейдерам получить интуитивное представление о рисковых характеристиках стратегии, что помогает принимать более обоснованные торговые решения.

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

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

Стратегический риск

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

  2. Частые сделки: В условиях нестабильных рынков SMA могут часто пересекаться, что приводит к чрезмерному количеству сделок и высокой стоимости сделок.

  3. Потенциальное существенное отступление: Несмотря на то, что существует максимальный контроль за отступлением, одно крупное падение может привести к значительным потерям в условиях сильной волатильности рынка.

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

  5. Потеря возможности вернуться: При достижении максимальной отзывной отметки и прекращении торгов, стратегия может упустить возможности, связанные с рыночным переворотом.

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

  1. Введение динамических параметров: Можно рассмотреть возможность корректировки циклов SMA и снятия отметки в зависимости от динамики рыночных колебаний, чтобы адаптироваться к различным рыночным условиям.

  2. Добавление дополнительных рыночных фильтров: В сочетании с другими техническими показателями или фундаментальными факторами, такими как RSI или объем торгов, фильтруют потенциальные ложные сигналы.

  3. Поступление и выезд в группах: Вместо того, чтобы работать с полным складом, можно строить склады в группах, чтобы снизить риск принятия единоличных решений.

  4. Присоединяйтесь к механизму сдерживания: На базе снятия контроля, добавление динамической функции остановки, чтобы закрепить прибыль и повысить общую доходность.

  5. Оптимизация управления капиталом: Внедрение динамического управления позициями на основе размеров счетов и рыночной волатильности для лучшего контроля риска.

  6. Введение алгоритмов машинного обучения: Использование технологий машинного обучения для оптимизации процесса выбора параметров и генерации сигналов, повышения адаптивности и точности стратегий.

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

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

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

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

Исходный код стратегии
/*backtest
start: 2023-07-23 00:00:00
end: 2024-07-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/

capital = 10000

//@version=5
strategy(title = "Correct Strategy Peak-Drawdown Cycles [Tradingwhale]", shorttitle = "Peak-Draw [Tradingwhale]", initial_capital = capital, overlay=true, margin_long=100, margin_short=100)

// The code below is from Tradingwhale LLC
/// ==============================================================================
//  Peak-Trough Cycles with Date and Prev. RunUp
// Initialize variables
showTable = input.bool(true, title = "Plot Peak to Bottom Drawdown Cycles table?")
min_trough = input.float(3.0, title = "Define Minimum Drawdown/Trough to Display (%)", minval = 1, maxval = 100, step = 0.5, tooltip = "Peaks and Trough Cycles have to be roped in by either a lookback period or minmimum troughs to show. If you don't then every bar could be a peak or trough/bottom. I've decided to use minimum declines here because lookback seems more arbitrary.")
maxdraw = input.float(40.0, title = "Max Drawdown", minval = 1, maxval = 100, step = 0.5, tooltip = "Define the drawdown level where the srtategy stops executing trades.")

var float equityPeak = na
var float equityTrough = na
var int cycleCount = 0
var bool inDrawdown = false
var float initialCapital = capital
var float prevTrough = initialCapital
var float prevRunUp = na
var bool useLighterGray = true
var int lastYear = na

// Variable to indicate whether the strategy should end
var bool end_strategy = false

// Table to display data
var table resultTable = table.new(position.top_right, 5, 30, bgcolor=#ffffff00, frame_color=#4f4040, frame_width=1)

// Function to convert float to percentage string
f_to_percent(value) =>
    str.tostring(value, "#.##") + "%"

// Function to get month/year string without commas
get_month_year_string() =>
    str.tostring(year) + "/" + str.tostring(month)

// Update the table headers
if (bar_index == 0 and showTable)
    table.cell(resultTable, 0, 0, "Show Min Trough: " + f_to_percent(min_trough), bgcolor=#a8a8a88f, text_size=size.normal)
    table.cell(resultTable, 1, 0, "Cycle Count", bgcolor=#a8a8a88f, text_size=size.normal)
    table.cell(resultTable, 2, 0, "Prev.RunUp(%)", bgcolor=#a8a8a88f, text_size=size.normal)
    table.cell(resultTable, 3, 0, "Drawdown(%)", bgcolor=#a8a8a88f, text_size=size.normal)
    table.cell(resultTable, 4, 0, "Year/Month", bgcolor=#a8a8a88f, text_size=size.normal)

// Track peaks and troughs in equity
if (na(equityPeak) or strategy.equity > equityPeak)
    if (inDrawdown and strategy.equity > equityPeak and not na(equityTrough)) // Confirm end of drawdown cycle
        drawdownPercentage = (equityPeak - equityTrough) / equityPeak * 100
        if drawdownPercentage > min_trough
            cycleCount += 1
            prevRunUp := (equityPeak - prevTrough) / prevTrough * 100
            if cycleCount <= 20 and showTable
                currentYear = year
                if na(lastYear) or currentYear != lastYear
                    useLighterGray := not useLighterGray
                    lastYear := currentYear
                rowColor = useLighterGray ? color.new(color.gray, 80) : color.new(color.gray, 50)
                table.cell(resultTable, 1, cycleCount, str.tostring(cycleCount), bgcolor=rowColor, text_size=size.normal)
                table.cell(resultTable, 2, cycleCount, f_to_percent(prevRunUp), bgcolor=rowColor, text_size=size.normal)
                table.cell(resultTable, 3, cycleCount, f_to_percent(drawdownPercentage), bgcolor=rowColor, text_size=size.normal)
                table.cell(resultTable, 4, cycleCount, get_month_year_string(), bgcolor=rowColor, text_size=size.normal)
            prevTrough := equityTrough
    equityPeak := strategy.equity
    equityTrough := na
    inDrawdown := false
else if (strategy.equity < equityPeak)
    equityTrough := na(equityTrough) ? strategy.equity : math.min(equityTrough, strategy.equity)
    inDrawdown := true

// Calculate if the strategy should end
if not na(equityPeak) and not na(equityTrough)
    drawdownPercentage = (equityPeak - equityTrough) / equityPeak * 100
    if drawdownPercentage >= maxdraw
        end_strategy := true


// This code below is from Tradingview, but with additions where commented (see below)

longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))
if (longCondition) and not end_strategy // Add 'and not end_strategy' to your order conditions to automatically end the strategy if max_draw is exceeded/
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))
if (shortCondition) and not end_strategy // Add 'and not end_strategy' to your order conditions to automatically end the strategy if max_draw is exceeded/
    strategy.entry("My Short Entry Id", strategy.short)