В процессе загрузки ресурсов... загрузка...

Стратегия прорыва "Чоппинес"

Автор:Чао Чжан, Дата: 2023-10-07 15:59:26
Тэги:

Обзор

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

Логика стратегии

Основными концепциями стратегии прорыва "Шоппинес К-лайн" являются:

  1. Использование индекса товарного канала (CCI) для определения того, находятся ли цены в перекупленных или перепроданных зонах.

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

  3. Включение объема торговли, чтобы рассматривать только сигналы покупки и продажи, когда объем растет.

  4. Принимать длинные позиции, когда выявляется восходящий тренд, и CCI показывает перепроданность. Принимать короткие позиции, когда выявлен нисходящий тренд, и CCI показывает перекуп.

  5. Установка стоп-лосса и точек получения прибыли для контроля рисков и блокировки прибыли.

В частности, стратегия использует CCI для анализа перекупленности/перепроданности, K-линейные паттерны для направления тренда и объем для импульса.

Анализ преимуществ

Стратегия прорыва Choppiness K-line имеет следующие преимущества:

  1. Объединение нескольких индикаторов повышает надежность торговых сигналов.

  2. Использование K-линейных моделей помогает точно определить обратные тенденции.

  3. Стоп-лосс и получение прибыли эффективно контролируют риски и блокируют прибыль.

  4. Только если учесть сигналы повышения громкости, можно избежать ложных сигналов.

  5. Логика стратегии ясна, а параметры гибкие для оптимизации в различных акциях и рыночных условиях.

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

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

Потенциальные риски стратегии включают:

  1. Сигналы CCI могут отставать, в результате чего пропускаются оптимальные точки входа.

  2. Фальшивые прорывы в K-линейных моделях могут привести к ненужным потерям.

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

  4. Статический стоп-лосс/прибыль может выйти раньше или пропустить дальнейшие тренды.

  5. Параметры, установленные для одного актива, могут не соответствовать другим.

  6. Результаты тестов могут не соответствовать результатам выступления вживую.

Руководство по оптимизации

Стратегия может быть усилена путем:

  1. Оптимизация параметров CCI для быстрой генерации сигнала.

  2. Добавление большего количества индикаторов, таких как MACD, Bollinger Bands для улучшения точности сигнала.

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

  4. Использование динамического стоп-лосса и прибыли на основе волатильности рынка.

  5. Улучшение логики увеличения объема для обнаружения дивергенции объема и цены.

  6. Настройка параметров для различных запасов и рыночных режимов для улучшения стабильности.

  7. Включение механизмов, следующих за тенденциями, для улучшения эффективности на всех этапах рынка.

  8. Модулизация стратегии для большей гибкости и расширяемости.

Заключение

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


/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 00:00:00
period: 2h
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/
// © vikris

//@version=4
strategy("[VJ]War Machine PAT Intra", overlay=true, calc_on_every_tick = false)

// ********** Strategy inputs - Start **********

// Used for intraday handling
// Session value should be from market start to the time you want to square-off 
// your intraday strategy
// Important: The end time should be at least 2 minutes before the intraday
// square-off time set by your broker
var i_marketSession = input(title="Market session", type=input.session, 
     defval="0915-1455", confirm=true)

// Make inputs that set the take profit % (optional)
longProfitPerc = input(title="Long Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=5.0) * 0.01

shortProfitPerc = input(title="Short Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=5.0) * 0.01
     
// Set stop loss level with input options (optional)
longLossPerc = input(title="Long Stop Loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=5.0) * 0.01

shortLossPerc = input(title="Short Stop Loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=5.0) * 0.01    

trendFactor = input(title="Trend Factor(Lower means trending)", type=input.integer, minval=1, step=1, defval=50)

oversold = input(title="Oversold", type=input.integer, minval=1, step=1, defval=25)

overbought = input(title="Overbought", type=input.integer, minval=1, step=1, defval=75)

// ********** Strategy inputs - End **********


// ********** Supporting functions - Start **********

// A function to check whether the bar or period is in intraday session
barInSession(sess) => time(timeframe.period, sess) != 0
// Figure out take profit price
longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)

// Determine stop loss price
longStopPrice  = strategy.position_avg_price * (1 - longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)


// ********** Supporting functions - End **********


// ********** Strategy - Start **********
// See if intraday session is active
bool intradaySession = barInSession(i_marketSession)

// Trade only if intraday session is active

//=================Strategy logic goes in here===========================
//Vol Confirmation
vol = volume > volume[1]

//Engulfing candle confirm
bullishEC = close > open[1] and close[1] < open[1]
bearishEC = close < open[1] and close[1] > open[1]

//Candles colors
greenCandle = (close > open)
redCandle = (close < open)

length = input(title="Length", type=input.integer, defval=14, minval=1, maxval=2000)
src = hlc3
upper = sum(volume * (change(src) <= 0 ? 0 : src), length)
lower = sum(volume * (change(src) >= 0 ? 0 : src), length)
_rsi(upper, lower) =>
    100.0 - (100.0 / (1.0 + upper / lower))
mf = _rsi(upper, lower)
ci = 100 * log10(sum(atr(1), length) / (highest(length) - lowest(length))) / log10(length)

//tradeSignal = ((rsiOS or rsiOS[1]) and bullishEC) or ((rsiOB or rsiOB[1]) and bearishEC)




//Final Long/Short Condition
longCondition =  redCandle and mf < oversold and ci <trendFactor and vol
shortCondition = greenCandle and mf >overbought and ci <trendFactor and vol
 
//Long Strategy - buy condition and exits with Take profit and SL
if (longCondition and intradaySession)
    stop_level = longStopPrice
    profit_level = longExitPrice
    strategy.entry("My Long Entry Id", strategy.long)
    strategy.exit("TP/SL", "My Long Entry Id", stop=stop_level, limit=profit_level)


//Short Strategy - sell condition and exits with Take profit and SL
if (shortCondition and intradaySession)
    stop_level = shortStopPrice
    profit_level = shortExitPrice
    strategy.entry("My Short Entry Id", strategy.short)
    strategy.exit("TP/SL", "My Short Entry Id", stop=stop_level, limit=profit_level)
 
 
// Square-off position (when session is over and position is open)
squareOff = (not intradaySession) and (strategy.position_size != 0)
strategy.close_all(when = squareOff, comment = "Square-off")

// ********** Strategy - End **********

Больше