Это краткосрочная торговая стратегия, основанная на прорывах канала. Она использует прорывы верхнего и нижнего рельсов канала для определения начала и конца трендов и принятия соответствующих торговых решений.
Стратегия сначала рассчитывает самый высокий и самый низкий уровень за определенный период, чтобы построить верхнюю и нижнюю рельсы канала.
Если цена выходит выше верхнего рельса, выходите в длинный, если цена выходит ниже нижнего рельса, выходите в короткий.
Для контроля рисков используется движущаяся стоп-лосс. Стоп-лосс устанавливается на средней линии канала.
Существует два опциональных правила выхода: вернуться на среднюю линию или следовать движущейся стоп-лосс.
Период канала и другие параметры могут быть настроены для оптимизации стратегии для различных рыночных условий.
Просто следите за ценовым каналом и следуйте правилам торговли.
Торгуйте по тренду, без риска противодействия тренду.
Ясный и интуитивно понятный канал дает ясные сигналы входа.
Хорошая маржа прибыли, может достичь удовлетворительной прибыли в большинстве случаев.
Много регулируемых параметров для оптимизации на разных рынках.
Прорыв может провалиться, существует риск быть пойманным в ловушку.
Канал нуждается в периоде формирования, не подходит для рынков с ограниченным диапазоном.
Возвращение к среднему стоп-лосс может быть слишком консервативным, неспособным поддерживать тренд.
Для оптимизации параметров нужны исторические данные, возможно переподготовка в режиме реального времени.
Механическая торговля точками прорыва может увеличить частоту торговли и затраты на скольжение.
Оцените каналы разных периодов и выберите оптимальный.
Испытайте возвращение к середине и перемещение стоп-потери, чтобы найти лучший механизм выхода.
Оптимизируйте процент стоп-лосса, чтобы уменьшить вероятность остановки.
Добавьте трендовый фильтр, чтобы избежать неуместных сделок с прорывом.
Подумайте об увеличении размеров позиций, но контролируйте риски.
В целом это зрелая краткосрочная стратегия выхода. Она имеет четкие правила входа, надлежащий контроль рисков и в целом хорошо работает. Дальнейшее улучшение может быть достигнуто путем настройки параметров. Но следует отметить присущие ограничения, необходимые корректировки для разных рынков. Если использовать ее систематически, она должна приносить последовательную общую прибыль.
/*backtest start: 2022-10-18 00:00:00 end: 2023-10-24 00:00:00 period: 1d basePeriod: 1h 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/ // Strategy testing and optimisation for free Bitmex trading bot // © algotradingcc //@version=4 strategy("Channel Break [for free bot]", overlay=true, default_qty_type= strategy.percent_of_equity, initial_capital = 1000, default_qty_value = 20, commission_type=strategy.commission.percent, commission_value=0.075) //Options buyPeriod = input(13, "Channel Period for Long position") sellPeriod = input(18, "Channel Period for Short position") isMiddleExit = input(true, "Is exit on Base Line?") takeProfit = input(46, "Take Profit (%) for position") stopLoss = input(9, "Stop Loss (%) for position") // 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(buyPeriod) BuyExit = isMiddleExit ? (highest(buyPeriod) + lowest(buyPeriod)) / 2: lowest(buyPeriod) SellEnter = lowest(sellPeriod) SellExit = isMiddleExit ? (highest(sellPeriod) + lowest(sellPeriod)) / 2: highest(sellPeriod) // 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 & Stop Loss TP = 0.0 SL = 0.0 if strategy.position_size > 0 TP := strategy.position_avg_price*(1 + takeProfit/100) SL := strategy.position_avg_price*(1 - stopLoss/100) if strategy.position_size > 0 and SL > BuyExit BuyExit := SL if strategy.position_size < 0 TP := strategy.position_avg_price*(1 - takeProfit/100) SL := strategy.position_avg_price*(1 + stopLoss/100) if strategy.position_size < 0 and SL < SellExit SellExit := SL // Long Position if timeRange and strategy.position_size <= 0 strategy.entry("Long", strategy.long, stop = BuyEnter) strategy.exit("Long Exit", "Long", stop=BuyExit, limit = TP, when = strategy.position_size > 0) // Short Position if timeRange and strategy.position_size >= 0 strategy.entry("Short", strategy.short, stop = SellEnter) strategy.exit("Short Exit", "Short", stop=SellExit, limit = TP, when = strategy.position_size < 0) // Close & Cancel when over End of the Test if time > endTest strategy.close_all() strategy.cancel_all()