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

ATR SL TP
Дата создания: 2024-11-18 16:11:21 Последнее изменение: 2024-11-18 16:11:21
Копировать: 0 Количество просмотров: 576
1
Подписаться
1617
Подписчики

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

Обзор

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

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

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

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

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

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

  1. Риск ложного прорыва: после значительных колебаний может произойти ложный прорыв, что приводит к остановке выхода
  2. Чувствительность параметров: неправильная установка порога может привести к упущенным возможностям или переторгу
  3. Зависимость от рыночной конъюнктуры: частое возникновение сбоев при рыночных колебаниях
  4. Влияние скольжения: в период высокой волатильности реальная цена сделки может быть значительно отклонена от цены сигнала
  5. Риски управления капиталом: отсутствие механизмов управления позициями может привести к чрезмерному риску

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

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

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

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

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

//@version=5
strategy("Big Candle Breakout Strategy Both Side", overlay=true)  

// Input for the point move threshold
point_move_in = input.int(100, title="Point Move Threshold")
point_target = input.int(100, title="Point Target")
point_stoploss = input.int(100, title="Point Stop Loss")
point_buffer = input.int(5, title="Point Buffer")

point_move = point_buffer + point_move_in

// Define the start and end times for trading
start_hour = 9
start_minute = 15
end_hour = 14
end_minute = 30

// Function to check if the current time is within the allowed trading window
in_time_range = (hour(time('30')) > start_hour or (hour(time('30')) == start_hour and minute(time('30')) >= start_minute)) and (hour(time('30')) < end_hour or (hour(time('30')) == end_hour and minute(time('30')) <= end_minute))

// Retrieve the open, high, low, and close prices of 30-minute candles
open_30m = request.security(syminfo.tickerid, "30", open)
high_30m = request.security(syminfo.tickerid, "30", high)
low_30m = request.security(syminfo.tickerid, "30", low)
close_30m = request.security(syminfo.tickerid, "30", close)

// Calculate the range of the candle
candle_range_long = (close_30m - open_30m)
candle_range_short = (open_30m - close_30m)

// Determine if the candle meets the criteria to be marked
big_candle_long = candle_range_long >= point_move_in
big_candle_short = candle_range_short >= point_move_in

// Variables to store the state of the trade
var float long_entry_price = na
var float long_target_price = na
var float long_stop_loss_price = na

var float short_entry_price = na
var float short_target_price = na
var float short_stop_loss_price = na

// Check if there are no active trades
no_active_trades = (strategy.opentrades == 0)

// Long entry condition
if (big_candle_long and na(long_entry_price) and in_time_range and no_active_trades)
    long_entry_price := high_30m+point_buffer
    long_target_price := long_entry_price + point_target
    long_stop_loss_price := long_entry_price - point_stoploss
    strategy.entry("Buy", strategy.long, stop=long_entry_price, limit=long_target_price)

plot(long_entry_price, style=plot.style_linebr, color=color.blue, linewidth=2, title="Entry Price")
plot(long_target_price, style=plot.style_linebr, color=color.green, linewidth=2, title="Target Price")
plot(long_stop_loss_price, style=plot.style_linebr, color=color.red, linewidth=2, title="Stop Loss Price")

// Short entry condition
if (big_candle_short and na(short_entry_price) and in_time_range and no_active_trades)
    short_entry_price := low_30m - point_buffer
    short_target_price := short_entry_price - point_target
    short_stop_loss_price := short_entry_price + point_stoploss
    strategy.entry("Sell", strategy.short, stop=short_entry_price, limit=short_target_price)

plot(short_entry_price, style=plot.style_linebr, color=color.blue, linewidth=2, title="Short Entry Price")
plot(short_target_price, style=plot.style_linebr, color=color.green, linewidth=2, title="Short Target Price")
plot(short_stop_loss_price, style=plot.style_linebr, color=color.red, linewidth=2, title="Short Stop Loss Price") 

// Long exit conditions
if (not na(long_entry_price))
    strategy.exit("Long Exit", from_entry="Buy", limit=long_target_price, stop=long_stop_loss_price)
   
// Short exit conditions
if (not na(short_entry_price))
    strategy.exit("Short Exit", from_entry="Sell", limit=short_target_price, stop=short_stop_loss_price)

// Reset trade status
if (strategy.position_size == 0)
    long_entry_price := na
    long_target_price := na
    long_stop_loss_price := na

    short_entry_price := na
    short_target_price := na
    short_stop_loss_price := na

// Plot the big candle and entry/exit levels
plotshape(series=big_candle_long, location=location.abovebar, style=shape.circle, color=color.green)
plotshape(series=big_candle_short, location=location.abovebar, style=shape.circle, color=color.red)

//plot(long_entry_price, style=plot.style_stepline, color=color.blue, linewidth=2, title="Entry Price")
//plot(long_target_price, style=plot.style_stepline, color=color.green, linewidth=2, title="Target Price")
//plot(long_stop_loss_price, style=plot.style_stepline, color=color.red, linewidth=2, title="Stop Loss Price")