Количественная торговая стратегия с отслеживанием множественных условных трендов, основанная на уровнях коррекции Фибоначчи

SL MA TP ATR
Дата создания: 2024-12-20 15:55:57 Последнее изменение: 2024-12-20 15:55:57
Копировать: 1 Количество просмотров: 420
1
Подписаться
1617
Подписчики

Количественная торговая стратегия с отслеживанием множественных условных трендов, основанная на уровнях коррекции Фибоначчи

Обзор

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

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

Сначала стратегия рассчитывает шесть ключевых уровней фибоначевых отступлений: 0,23,6%, 38,2%, 50%, 61,8% и 100%. В зависимости от того, где открытая цена находится относительно этих уровней, условия входа разделяются на три ситуации: 1) цена открытия находится между 23,6% и 50%; 2) цена открытия на уровне 61,8% и в указанном временном окне; 3) цена открытия ниже 23,6% и ниже минувшей низкой точки.

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

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

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

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

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

  1. Внедрение индикаторов определения тренда (например, среднелинейная система), совершение торговли только тогда, когда тренд ясен.
  2. Увеличение показателей волатильности (например, ATR), динамическая коррекция стоп-позиции.
  3. Анализ объемов сделок повышает доверие к ценовым прорывам.
  4. Оптимизация временных окон с учетом наиболее оптимальных периодов торгов на основе анализа исторических данных.
  5. Повышение целевых показателей прибыли и улучшение механизмов получения прибыли.

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

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

Исходный код стратегии
/*backtest
start: 2024-11-19 00:00:00
end: 2024-12-18 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Fibonacci Retracement Strategy", overlay=true)

// Get the high and low of the previous day
previousHigh = request.security(syminfo.tickerid, "D", high[1])
previousLow = request.security(syminfo.tickerid, "D", low[1])

// Fibonacci levels for the previous day (from high to low)
fib0 = previousHigh
fib236 = previousHigh - (previousHigh - previousLow) * 0.236
fib382 = previousHigh - (previousHigh - previousLow) * 0.382
fib50 = previousHigh - (previousHigh - previousLow) * 0.5
fib618 = previousHigh - (previousHigh - previousLow) * 0.618
fib1 = previousHigh - (previousHigh - previousLow) * 1

// Current open price (for the current day)
openPrice = open

// Time for 9:15 AM check
timeStart = timestamp(year, month, dayofmonth, 9, 15)
timeClose = timestamp(year, month, dayofmonth, 9, 30) // Time window to allow for opening range

// Entry Conditions
buyCondition1 = openPrice >= fib236 and openPrice <= fib50
buyCondition2 = openPrice == fib618 and time >= timeStart and time <= timeClose
buyCondition3 = openPrice < fib236 and openPrice < previousLow

// Stop Loss based on conditions
stopLoss1 = fib618
stopLoss2 = fib618 - (fib618 - fib1) / 2
stopLoss3 = fib382

// Plot Fibonacci levels with calculated values
plot(fib0, color=color.green, linewidth=1, title="Fib 0")
plot(fib236, color=color.red, linewidth=1, title="Fib 0.236")
plot(fib382, color=color.blue, linewidth=1, title="Fib 0.382")
plot(fib50, color=color.yellow, linewidth=1, title="Fib 0.5")
plot(fib618, color=color.purple, linewidth=1, title="Fib 0.618")
plot(fib1, color=color.orange, linewidth=1, title="Fib 1")

// Plot labels for Fibonacci levels with actual values
label.new(x=bar_index, y=fib0, text="Fib 0: " + str.tostring(fib0), style=label.style_label_right, color=color.green, textcolor=color.white, size=size.small, yloc=yloc.abovebar)
label.new(x=bar_index, y=fib236, text="Fib 0.236: " + str.tostring(fib236), style=label.style_label_right, color=color.red, textcolor=color.white, size=size.small, yloc=yloc.abovebar)
label.new(x=bar_index, y=fib382, text="Fib 0.382: " + str.tostring(fib382), style=label.style_label_right, color=color.blue, textcolor=color.white, size=size.small, yloc=yloc.abovebar)
label.new(x=bar_index, y=fib50, text="Fib 0.5: " + str.tostring(fib50), style=label.style_label_right, color=color.yellow, textcolor=color.white, size=size.small, yloc=yloc.abovebar)
label.new(x=bar_index, y=fib618, text="Fib 0.618: " + str.tostring(fib618), style=label.style_label_right, color=color.purple, textcolor=color.white, size=size.small, yloc=yloc.abovebar)
label.new(x=bar_index, y=fib1, text="Fib 1: " + str.tostring(fib1), style=label.style_label_right, color=color.orange, textcolor=color.white, size=size.small, yloc=yloc.abovebar)

// Entry conditions and strategy execution
if (buyCondition1)
    strategy.entry("Buy", strategy.long, stop=stopLoss1)
    label.new(bar_index, low, "BUY", color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small)

if (buyCondition2)
    strategy.entry("Buy", strategy.long, stop=stopLoss2)
    label.new(bar_index, low, "BUY", color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small)

if (buyCondition3)
    strategy.entry("Buy", strategy.long, stop=stopLoss3)
    label.new(bar_index, low, "BUY", color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small)

// Show exit signals and labels
if (buyCondition1)
    strategy.exit("Exit", from_entry="Buy", stop=stopLoss1)
    label.new(bar_index, high, "EXIT", color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small)

if (buyCondition2)
    strategy.exit("Exit", from_entry="Buy", stop=stopLoss2)
    label.new(bar_index, high, "EXIT", color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small)

if (buyCondition3)
    strategy.exit("Exit", from_entry="Buy", stop=stopLoss3)
    label.new(bar_index, high, "EXIT", color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small)