краткосрочная стратегия торговли

Автор:Чао Чжан, Дата: 2023-10-25 14:40:21
Тэги:

img

Обзор

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

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

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

  2. Если цена выходит выше верхнего рельса, выходите в длинный, если цена выходит ниже нижнего рельса, выходите в короткий.

  3. Для контроля рисков используется движущаяся стоп-лосс. Стоп-лосс устанавливается на средней линии канала.

  4. Существует два опциональных правила выхода: вернуться на среднюю линию или следовать движущейся стоп-лосс.

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

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

  1. Просто следите за ценовым каналом и следуйте правилам торговли.

  2. Торгуйте по тренду, без риска противодействия тренду.

  3. Ясный и интуитивно понятный канал дает ясные сигналы входа.

  4. Хорошая маржа прибыли, может достичь удовлетворительной прибыли в большинстве случаев.

  5. Много регулируемых параметров для оптимизации на разных рынках.

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

  1. Прорыв может провалиться, существует риск быть пойманным в ловушку.

  2. Канал нуждается в периоде формирования, не подходит для рынков с ограниченным диапазоном.

  3. Возвращение к среднему стоп-лосс может быть слишком консервативным, неспособным поддерживать тренд.

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

  5. Механическая торговля точками прорыва может увеличить частоту торговли и затраты на скольжение.

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

  1. Оцените каналы разных периодов и выберите оптимальный.

  2. Испытайте возвращение к середине и перемещение стоп-потери, чтобы найти лучший механизм выхода.

  3. Оптимизируйте процент стоп-лосса, чтобы уменьшить вероятность остановки.

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

  5. Подумайте об увеличении размеров позиций, но контролируйте риски.

Резюме

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


/*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()


Больше