이 전략의 핵심 아이디어는 돈치안 채널의 가격 브레이크에 기반하여 거래 결정을 내리는 것입니다. 양적 전략의 다음 유형의 트렌드에 속합니다. 자동으로 가격 채널을 식별 할 수 있습니다. 가격이 채널의 상부 레일을 통과하면 긴 포지션이 열립니다. 가격이 채널의 하부 레일 또는 스톱 로스 포인트 근처로 떨어지면 포지션이 닫습니다. 이 전략은 중장기 가격 추세를 파악하는 것을 목표로하며 인덱스 선물과 같은 금융 파생 상품의 알고리즘 거래에 적합합니다.
이 전략은 돈치안 채널 지표에 기초한다. 돈치안 채널은 일정 기간 동안 가장 높고 가장 낮은 가격에 의해 뽑히는 채널이다. 계산 방법은:
상부 레일 = 지난 n 기간 동안 가장 높은 가격 로저 레일 = 지난 n 기간 동안 가장 낮은 가격
가격이 상부 레일을 뚫고 갈 때, 긴 트렌드가 시작되었다고 간주됩니다. 가격이 하부 레일을 뚫고 갈 때, 짧은 트렌드가 시작되었다고 간주됩니다. 이 전략은 상부 레일을 깨는 경우에만 고려됩니다.
구체적인 거래 논리는 다음과 같습니다.
이 전략의 장점은 다음과 같습니다.
또한 몇 가지 위험이 있습니다.
해결책:
이 전략은 다음 영역에서 더 이상 최적화 될 수 있습니다.
이 전략의 전반적인 아이디어는 명확하고 이해하기 쉽고 구현하기 쉽습니다. 트렌드 방향을 자동으로 식별하기 위해 성숙한 돈치안 채널을 활용합니다. 또한 구성은 다양한 요구를 충족시키기 위해 매우 유연합니다. 적절한 스톱 로스 및 매개 변수 최적화로 좋은 결과를 얻을 수 있습니다. 결론적으로, 이 전략은 낮은 학습 곡선을 가지고 있지만 합리적인 효율성을 가지고 있습니다. 시작량 거래 전략으로 적합합니다.
/*backtest start: 2022-12-07 00:00:00 end: 2023-12-07 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/ // © Giovanni_Trombetta // Strategy to capture price channel breakouts //@version=4 strategy("ChannelsBreakout", max_bars_back=50, overlay=true) instrument = input(1, title = "Select 1: Stock/Forex, 2: Future") money = input(10000, title = "Money for each trade") backtest_start = input(2000, "Insert first year to backtest") period = input(50, title = "Period in bars of Donchian Channel") monetary_stoploss = input(1000, title = "Monetary Stop Loss") quantity = if instrument != 1 1 else int(money / close) upBarrier = highest(high,period) downBarrier = lowest(low,period) up = highest(high,period / 4) down = lowest(low,period / 4) plot(upBarrier, color=color.green, linewidth=2) plot(downBarrier, color=color.red, linewidth=2) plot(up, color=color.lime, linewidth=1) plot(down, color=color.orange, linewidth=2) longCondition = crossover(close, upBarrier[1]) and year >= backtest_start if (longCondition) strategy.entry("Long", strategy.long, quantity, when = strategy.position_size == 0) closeCondition = crossunder(close, down[1]) or down < down[1] if (closeCondition) strategy.close("Long", comment = "Trailing") stop_level = strategy.position_avg_price - monetary_stoploss / strategy.position_size strategy.exit("StopLoss", from_entry = "Long", stop = stop_level) plot(stop_level, color=color.yellow, linewidth=2) // l = label.new(bar_index, na, // text="PineScript Code", color= color.lime, textcolor = color.white, // style=label.style_labelup, yloc=yloc.belowbar, size=size.normal) // label.delete(l[1])