Эта стратегия является стратегией отслеживания тренда, разработанной на основе теории прорыва канала. Она строит канал с использованием самой высокой цены и самой низкой цены за определенный период и генерирует торговые сигналы, когда цена выходит из канала. Эта стратегия подходит для трендовых рынков и может захватить направление тренда цены для отслеживания тренда.
Стратегия сначала рассчитывает самую высокую цену и самую низкую цену за длительный период, чтобы построить верхнюю и нижнюю полосы канала. Когда цена закрытия проходит через верхнюю полосу, открывается длинная позиция. Когда цена закрытия проходит через нижнюю полосу, открывается короткая позиция.
При переходе цены через верхнюю полосу, если EMA находится в восходящей тенденции, длинное решение укрепляется.
В общем, это простая стратегия отслеживания трендов, основанная на прорывах канала для улавливания тенденций. Она имеет сильную способность отслеживания трендов и может достигать хорошей доходности на трендовых рынках. Но она также имеет некоторые риски и нуждается в дальнейшей оптимизации для улучшения стабильности.
/*backtest start: 2023-11-15 00:00:00 end: 2023-11-22 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 initial_capital = 1000, default_qty_value = 90, default_qty_type = strategy.percent_of_equity, pyramiding = 0, commission_value = 0.002, commission_type = strategy.commission.percent, calc_on_every_tick = true length_val = 2 max_bars_back = 1440 risk_max_drawdown = 9 strategy("Channel Break",max_bars_back=max_bars_back,initial_capital = initial_capital,default_qty_value = default_qty_value,default_qty_type = default_qty_type,pyramiding = pyramiding,commission_value = commission_value,commission_type = commission_type,calc_on_every_tick = calc_on_every_tick) // strategy.risk.max_drawdown(risk_max_drawdown, strategy.percent_of_equity) length = input(title="Length", minval=1, maxval=1000, defval=length_val) upBound = highest(high, length) downBound = lowest(low, length) //plot (upBound) //plot (downBound) //plot (close, color=red) //plot (ema(close,length * 2), color=green) // if (not na(close[length]) and time>timestamp(2018, 02, 24, 0, 00) ) strategy.entry("Buy", strategy.long, stop=upBound + syminfo.mintick, comment="Buy") strategy.entry("Short", strategy.short, stop=downBound - syminfo.mintick, comment="Short") position = strategy.position_size //plot(position , title="equity", color=red,style=cross,linewidth=4) plot(variance(position,2)>0?1:0,style=circles,linewidth=4) message = "" if (position > 0) message = "BTCUSD L: " + tostring(strategy.position_size) na(position) if (position < 0) message = "BTCUSD S: " + tostring(strategy.position_size) na(position) alertcondition(variance(strategy.position_size,2) > 0, "test", message )