Пулинг-стратегия - это стратегия, основанная на каналах Дончиана. Она использует быстрые и медленные каналы Дончиана для определения направления тренда и входа в отступления. Преимущества этой стратегии заключаются в том, что она может автоматически отслеживать тенденции и сокращать потери вовремя, когда изменяется тренд.
Стратегия сначала определяет период быстрого канала как 20 бар, а период медленного канала как 50 бар. Быстрый канал используется для установки цены стоп-лосса, а медленный канал используется для определения направления тренда и времени входа.
Сначала вычисляются самый высокий и самый низкий уровень быстрого канала, а средняя точка принимается в качестве линии остановки.
Когда цена проходит через верхний конец медленного канала, выходите в длинный. Когда цена проходит через нижний конец медленного канала, выходите в короткий. После входа в позицию, установите стоп-лосс в середине быстрого канала.
Таким образом, медленный канал определяет направление основного тренда, в то время как быстрый канал отслеживает незначительные прорывы в небольшом диапазоне, чтобы определить точку остановки потери.
Автоматически отслеживать тенденции и сокращать потери во времени.
Только если цена проходит через границы канала, можно отфильтровать некоторые ложные прорывы без реального тренда.
Контролируемый риск.
Стратегии, следующие за трендом, могут иметь относительно большие выводы, что требует психологической подготовки.
Стоп-лосс слишком близко. Период быстрого канала короткий, поэтому стоп-лосс близко, склонный к остановке. Мы можем должным образом расслабить период быстрого канала.
Слишком много сделок. Двойная структура канала может генерировать чрезмерные входы, требующие разумного размещения позиций.
Мы можем добавить волатильность и т.д. в условиях входа, чтобы отфильтровать прорывы без достаточной силы тренда.
Мы можем найти оптимальные комбинации параметров канала систематически.
Определите основную тенденцию на более высоких сроках и торговлю на более низких сроках.
Динамическое расстояние остановки потери. Динамическое регулирование дистанции остановки на основе волатильности рынка.
Стратегия Пулинга - это стандартная стратегия, следующая за трендом в целом. Она использует ценовые каналы для определения направления тренда и устанавливает стоп-лосс для контроля рисков. Стратегия имеет некоторые преимущества, но также и проблемы снижения и стоп-лосса, которые слишком близки. Мы можем оптимизировать ее путем корректировки параметров канала, добавления фильтров и т. Д. Но следует отметить, что стратегии, следующие за трендом, требуют сильной психологии, чтобы выдержать снижение.
/*backtest start: 2023-09-30 00:00:00 end: 2023-10-30 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2020 //@version=4 strategy("Noro's RiskTurtle Strategy", shorttitle = "RiskTurtle str", overlay = true, default_qty_type = strategy.percent_of_equity, initial_capital = 100, default_qty_value = 100, commission_value = 0.1) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") risk = input(2, minval = 0.1, maxval = 99, title = "Risk size, %") fast = input(20, minval = 1, title = "Fast channel (for stop-loss)") slow = input(50, minval = 1, title = "Slow channel (for entries)") showof = input(true, defval = true, title = "Show offset") showll = input(true, defval = true, title = "Show lines") showdd = input(true, defval = true, title = "Show label (drawdown)") showbg = input(true, defval = true, title = "Show background") fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //Donchian price channel fast hf = highest(high, fast) lf = lowest(low, fast) center = (hf + lf) / 2 //Donchian price chennal slow hs = highest(high, slow) ls = lowest(low, slow) //Lines colorpc = showll ? color.blue : na colorsl = showll ? color.red : na offset = showof ? 1 : 0 plot(hs, offset = offset, color = colorpc, title = "Slow channel high") plot(ls, offset = offset, color = colorpc, title = "Slow channel low") plot(center, offset = offset, color = colorsl, title = "Fast channel stop-loss") //Background size = strategy.position_size colorbg = showbg == false ? na : size > 0 ? color.lime : size < 0 ? color.red : na bgcolor(colorbg, transp = 70) //Var loss = 0.0 maxloss = 0.0 equity = 0.0 truetime = true //Lot size risksize = -1 * risk risklong = ((center / hs) - 1) * 100 coeflong = abs(risksize / risklong) lotlong = (strategy.equity / close) * coeflong riskshort = ((center / ls) - 1) * 100 coefshort = abs(risksize / riskshort) lotshort = (strategy.equity / close) * coefshort //Orders strategy.entry("Long", strategy.long, lotlong, stop = hs, when = needlong and strategy.position_size == 0 and hs > 0 and truetime) strategy.entry("Short", strategy.short, lotshort, stop = ls, when = needshort and strategy.position_size == 0 and ls > 0 and truetime) strategy.exit("LongExit", "Long", stop = center, when = needlong and strategy.position_size > 0) strategy.exit("Short", stop = center, when = needshort and strategy.position_size < 0) if time > timestamp(toyear, tomonth, today, 23, 59) strategy.close_all() strategy.cancel("Long") strategy.cancel("Short") if showdd //Drawdown max = 0.0 max := max(strategy.equity, nz(max[1])) dd = (strategy.equity / max - 1) * 100 min = 100.0 min := min(dd, nz(min[1])) //Max loss size equity := strategy.position_size == 0 ? strategy.equity : equity[1] loss := equity < equity[1] ? ((equity / equity[1]) - 1) * 100 : 0 maxloss := min(nz(maxloss[1]), loss) //Label min := round(min * 100) / 100 maxloss := round(maxloss * 100) / 100 labeltext = "Drawdown: " + tostring(min) + "%" + "\nMax.loss " + tostring(maxloss) + "%" var label la = na label.delete(la) tc = min > -100 ? color.white : color.red osx = timenow + round(change(time)*10) osy = highest(100) // la := label.new(x = osx, y = osy, text = labeltext, xloc = xloc.bar_time, yloc = yloc.price, color = color.black, style = label.style_labelup, textcolor = tc)