Стратегия прорыва на Дончианском канале.

Автор:Чао Чжан, Дата: 2024-01-29 11:51:08
Тэги:

img

Обзор

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

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

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

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

Кроме того, стратегия также устанавливает точку получения прибыли. Цена получения прибыли для длинных позиций - это цена входа, умноженная на (1 + процент получения прибыли), и наоборот для коротких позиций.

В целом, при оценке тренда, эта стратегия обеспечивает достаточно места для установки остановок и получения прибыли.

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

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

  1. Ясная логика сигнала и простая/надежная генерация сигнала.
  2. Индикатор Donchian Channel не чувствителен к колебаниям цен, что помогает определить тенденцию.
  3. Настраиваемые параметры канала для различных активов и временных рамок.
  4. Встроенные функции стоп-лосса/приобретения прибыли эффективно контролируют риск.
  5. Высокий потенциал прибыли для волатильных активов, таких как криптовалюты.

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

Риски этой стратегии включают:

  1. Невозможно полностью избежать рисков от огромных колебаний цен, несмотря на стоп-лосс.
  2. Неправильное настройка параметров может привести к чрезмерной торговле, увеличению затрат.
  3. Нечувствительны к колебаниям цен, могут упустить некоторые торговые возможности.

Для смягчения вышеуказанных рисков:

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

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

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

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

Заключение

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


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 4h
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/
// © algotradingcc
// Strategy testing and optimisation for free trading bot 

//@version=4
strategy("Donchian Channel Strategy [for free bot]", overlay=true )

//Long optopns
buyPeriodEnter = input(10, "Channel Period for Long enter position")
buyPeriodExit = input(10, "Channel Period for Long exit position")
isMiddleBuy = input(true, "Is exit on Base Line? If 'no' - exit on bottom line")
takeProfitBuy = input(2.5, "Take Profit (%) for Long position")
isBuy = input(true, "Allow Long?")

//Short Options
sellPeriodEnter = input(20, "Channel Period for Short enter position")
sellPeriodExit = input(20, "Channel Period for Short exit position")
isMiddleSell = input(true, "Is exit on Base Line? If 'no' - exit on upper line")
takeProfitSell = input(2.5, "Take Profit (%) for Short position")
isSell = input(true, "Allow Short?")

// Test Start
startYear = input(2005, "Test Start Year")
startMonth = input(1, "Test Start Month")
startDay = input(1, "Test Start Day")
startTest = timestamp(startYear,startMonth,startDay,0,0)

//Test End
endYear = input(2050, "Test End Year")
endMonth = input(12, "Test End Month")
endDay = input(30, "Test End Day")
endTest = timestamp(endYear,endMonth,endDay,23,59)

timeRange = time > startTest and time < endTest ? true : false

// Long&Short Levels
BuyEnter = highest(buyPeriodEnter)
BuyExit = isMiddleBuy ? ((highest(buyPeriodExit) + lowest(buyPeriodExit)) / 2): lowest(buyPeriodExit)

SellEnter = lowest(sellPeriodEnter)
SellExit = isMiddleSell ? ((highest(sellPeriodExit) + lowest(sellPeriodExit)) / 2): highest(sellPeriodExit)

// Plot Data
plot(BuyEnter, style=plot.style_line, linewidth=2, color=color.blue, title="Buy Enter")
plot(BuyExit, style=plot.style_line, linewidth=1, color=color.blue, title="Buy Exit", transp=50)
plot(SellEnter, style=plot.style_line, linewidth=2, color=color.red, title="Sell Enter")
plot(SellExit, style=plot.style_line, linewidth=1, color=color.red, title="Sell Exit", transp=50)

// Calc Take Profits
TakeProfitBuy = 0.0
TakeProfitSell = 0.0
if strategy.position_size > 0
    TakeProfitBuy := strategy.position_avg_price*(1 + takeProfitBuy/100)
    
if strategy.position_size < 0
    TakeProfitSell := strategy.position_avg_price*(1 - takeProfitSell/100)

// Long Position    
if isBuy and timeRange
    strategy.entry("Long", strategy.long, stop = BuyEnter, when = strategy.position_size == 0) 
    
strategy.exit("Long Exit", "Long", stop=BuyExit, limit = TakeProfitBuy, when = strategy.position_size > 0)

// Short Position
if isSell and timeRange
    strategy.entry("Short", strategy.short, stop = SellEnter, when = strategy.position_size == 0) 
    
strategy.exit("Short Exit", "Short", stop=SellExit, limit = TakeProfitSell, when = strategy.position_size < 0)

// Close & Cancel when over End of the Test
if time > endTest
    strategy.close_all()
    strategy.cancel_all()


Больше