Осиллирующая стратегия выхода из канала

Автор:Чао Чжан, Дата: 2023-11-15 16:01:09
Тэги:

img

Обзор

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

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

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

В частности, логика торговли выглядит следующим образом:

  1. Вычислить среднюю линию: SMA ((близкий, N)

  2. Верхняя полоса: средняя линия + значение параметра

  3. Нижняя полоса: средняя линия - значение параметра

  4. Когда цена выходит выше верхней полосы, если объем торгов больше 2x предыдущего периода, делайте длинный.

  5. Когда цена опускается обратно в канал, закрыть длинную позицию.

  6. Когда цена выходит ниже нижнего диапазона, если объем торгов больше 2x предыдущего периода, перейдите на короткий.

  7. Когда цена опускается обратно в канал, закрыть короткую позицию.

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

Преимущества этой стратегии:

  1. Использование индикатора канала может эффективно отслеживать тенденции цен.

  2. В сочетании с ростом объема торговли, ложные прорывы хорошо фильтруются.

  3. Возвращение в канал служит механизмом остановки потерь и ограничивает потери на одну сделку.

  4. Характеристика колебаний соответствует среднесрочным тенденциям.

  5. Простая логика делает его легким для понимания и реализации.

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

Существуют также некоторые риски:

  1. Последовательная торговля в одном направлении, когда цена держится на одной стороне канала в течение длительного, увеличивающегося риска потери.

  2. Неправильное настройка параметров канала может вызвать чрезмерные ложные сигналы.

  3. Неправильные критерии для роста объема торговли могут упустить истинные сигналы прорыва.

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

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

Стратегия может быть оптимизирована в следующих аспектах:

  1. Оптимизировать параметры канала для соответствия различным характеристикам рынка.

  2. Улучшить критерии открытых позиций, например, рассмотреть кроссовер MA или шаблоны свечей, чтобы избежать ложных прорывов.

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

  4. Добавление правил размещения позиций для корректировки размеров позиций и использования капитала на основе рыночных условий.

  5. Включите больше индикаторов для определения общего направления тренда, избегая торговли против основного тренда.

Резюме

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


/*backtest
start: 2022-11-08 00:00:00
end: 2023-11-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Copyright, 2022, Cache_that_pass.  You are free to use this script however you see fit and reproduce it in any manner.

//@version=5

            //////  Name the strategy between the 2 quotation marks.  Consider setting commission type and value in strategy header to match exchanges rates. //////

strategy("Oscillating SSL Channel Strategy", "O-SSL Strat", overlay=true, pyramiding=1, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 100, calc_on_order_fills=true)



            //////  Inputs and calculations used by script  //////

period = input(title='Period', defval=25)
len = input(title='Period', defval=25)
smaHigh = ta.sma(high, len)
smaLow = ta.sma(low, len)
Hlv = int(na)
Hlv := close > smaHigh ? 1 : close < smaLow ? -1 : Hlv[1]
sslDown = Hlv < 0 ? smaHigh : smaLow
sslUp = Hlv < 0 ? smaLow : smaHigh

            //////  Show me the money  //////

plot(sslDown, linewidth=2, color=color.new(color.red, 0))
plot(sslUp, linewidth=2, color=color.new(color.lime, 0))


            //////  Trade execution logic  //////  
            
//pseudo-code//
        //Go long when high (or maybe close) breaks above the sslUp and volume is 2x or > Volume[1] and sslUp > sslDown
        //Close the above longs when sslUp crosses under sslDown (or set takeprofit and stop loss exits)
        //
        //Go short when low is lower than the sslUp and volume is 2x or > Volume[1] and sslDown > sslUp
        //Close shorts when sslDown crosses under sslUp

longCondition1 = (sslUp > sslDown)
longCondition2 = ta.crossover(high, sslUp)
//longCondition3 = (volume >= (volume[1]*1.89))
longCondition = ((longCondition1) and (longCondition2))// and (longCondition3))

longExit = ta.crossunder(sslUp, sslDown)

            //////  Bring It  //////
if (longCondition)
    strategy.entry("Bring It", strategy.long)

            //////  Sling It  //////
if (longExit)
    strategy.close("Bring It", comment="Sling It")


shortCondition1 = (sslDown) > (sslUp)
shortCondition2 = ta.crossunder(low, sslUp)
//shortCondition3 = (volume >= (volume[1]*1.89))
shortCondition = ((shortCondition1) and (shortCondition2))// and (shortCondition3))

shortExit = ta.crossunder(sslDown, sslUp)

            //////  Bring It  //////
if (shortCondition)
    strategy.entry("Bring It", strategy.long)

            //////  Sling It  //////
if (shortExit)
    strategy.close("Bring It", comment="Sling It")

            //////  Sling It  //////
if (shortCondition)
    strategy.entry("Sling It", strategy.short)

            //////  Bling It  //////
if (shortExit)
    strategy.close("Sling It", comment="Bring It")



Больше