
Это сложная количественная торговая стратегия, которая объединяет несколько технических показателей и торговых идей. Стратегия основана на блоке заказов, обнаружении изменения тренда, пересечении средних перемещений и анализе нескольких временных рамок для создания торговых сигналов.
Блок заказов (Order Block): Стратегия использует функцию, чтобы вычислить блок заказов, который является важным ценовым уровнем и обычно представляет собой централизованную область заказов крупных учреждений.
Обнаружение изменения тренда: использование пересечения простых движущихся средних (SMA) для выявления потенциальных изменений тренда.
Анализ в несколько временных рамок: вычисляют 50-циклические и 200-циклические индикаторные скользящие средние ((EMA) на 1-часовой временной рамке для определения более крупных рыночных тенденций.
Условия участия:
Выходная стратегия: используйте фиксированные процентные уровни стоп-поста и стоп-лосса для управления рисками и блокировки прибыли.
Многомерный анализ: в сочетании с несколькими временными рамками и техническими показателями, обеспечивает более полный рыночный взгляд.
Следить за тенденциями: повышает вероятность получения прибыли, торгуя в направлении больших тенденций.
Точное вхождение: используйте блоки заказов и изменения краткосрочных тенденций для оптимизации времени входа.
Управление рисками: использование заранее установленных стоп-стоп и стоп-лосс процентов для эффективного контроля риска каждой сделки.
Адаптируемость: параметры стратегии могут быть изменены, чтобы адаптироваться к различным рыночным условиям.
Чрезмерная торговля: в условиях резкой волатильности рынка может возникать частота торговых сигналов, увеличивающих стоимость сделки.
Риск скольжения: в менее ликвидном рынке фактическая цена исполнения может иметь большое отклонение от идеальной цены.
Риск обратного тренда: вблизи точки обратного тренда стратегия может потерпеть последовательный убыток.
Чувствительность к параметрам: эффективность стратегии может быть очень чувствительна к параметрам, которые требуют постоянной оптимизации.
В зависимости от рыночной среды: в условиях рыночного кризиса или быстрого колебания рынок может оказаться неэффективным.
Динамическая параметровая настройка: рассмотрение автоматической настройки стоп-лосс в зависимости от волатильности рынка.
Добавление фильтров: введение дополнительных технических или рыночных настроений, чтобы уменьшить количество ложных сигналов.
Временная фильтрация: добавление ограничений на время торгового окна, чтобы избежать низкой ликвидности.
Управление позицией: реализация более сложных стратегий управления позицией, таких как корректировка позиции на основе волатильности.
Отслеживание и оптимизация: проведение более широкого отслеживания исторических данных для выявления оптимальных комбинаций параметров.
Повышение осведомленности о рыночной среде: разработка алгоритмов для выявления различных состояний рынка и соответствующей корректировки стратегии.
Это комплексная, логически сложная количественная торговая стратегия, объединенная с многовременным анализом, теорией блоков заказов и технологией отслеживания тенденций. Стратегия направлена на повышение успешности торгов, путем поиска точных входных точек в направлении больших тенденций. Однако из-за своей сложности стратегия также сталкивается с чрезмерной адаптацией и чувствительностью к параметрам.
/*backtest
start: 2024-06-28 00:00:00
end: 2024-07-28 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("S&P 500", overlay=true)
// Parámetros
length = input(14, "Longitud")
src = input(close, "Fuente")
profit_percent = input.float(0.08955, "Porcentaje de ganancia", step=0.00001, minval=0)
stop_loss_percent = input.float(0.04477, "Porcentaje de stop loss", step=0.00001, minval=0)
// Función para calcular el Order Block
order_block(src, len) =>
highest = ta.highest(high, len)
lowest = ta.lowest(low, len)
mid = (highest + lowest) / 2
ob = src > mid ? highest : lowest
ob
// Cálculo del Order Block
ob = order_block(src, length)
// Función para detectar cambios de tendencia
trend_change(src, len) =>
up = ta.crossover(src, ta.sma(src, len))
down = ta.crossunder(src, ta.sma(src, len))
[up, down]
// Detectar cambios de tendencia
[trend_up, trend_down] = trend_change(src, length)
// Calcular EMA 50 y EMA 200 en timeframe de 1 hora
ema50_1h = request.security(syminfo.tickerid, "60", ta.ema(close, 50))
ema200_1h = request.security(syminfo.tickerid, "60", ta.ema(close, 200))
// Condiciones de EMA
ema_buy_condition = ema50_1h > ema200_1h
ema_sell_condition = ema50_1h < ema200_1h
// Señales de compra y venta
buy_signal = trend_up and close > ob and ema_buy_condition
sell_signal = trend_down and close < ob and ema_sell_condition
// Ejecutar la estrategia
if (buy_signal)
strategy.entry("Compra", strategy.long)
if (sell_signal)
strategy.entry("Venta", strategy.short)
// Calcular precios de toma de ganancias y stop loss
if (strategy.position_size != 0)
entry_price = strategy.position_avg_price
is_long = strategy.position_size > 0
take_profit = entry_price * (1 + (is_long ? 1 : -1) * profit_percent / 100)
stop_loss = entry_price * (1 + (is_long ? -1 : 1) * stop_loss_percent / 100)
strategy.exit(is_long ? "Long TP/SL" : "Short TP/SL", limit=take_profit, stop=stop_loss)
// Visualización
plot(ob, "Order Block", color.purple, 2)
plot(ta.sma(src, length), "SMA", color.blue)
plot(ema50_1h, "EMA 50 1h", color.yellow)
plot(ema200_1h, "EMA 200 1h", color.white)
bgcolor(buy_signal ? color.new(color.green, 90) : sell_signal ? color.new(color.red, 90) : na)