
동치안 변동 채널 거래 전략은 일정 주기 동안의 최고 가격과 최저 가격을 계산하여 채널의 현재 가격 추세를 판단하고, 브레이크 채널과 결합하여 장기 및 단기 거래를 수행합니다. 이 전략은 높은 변동성을 가진 주식 및 디지털 통화 거래에 적합합니다.
이 전략은 last (history) 주기의 최고 pcmax 및 최저 pcmin을 계산하여 통로를 구성한다. 통로의 상단 및 하단 통로 계산 방법은 다음과 같다.
상반기 h = pcmax - (pcmax - pcmin) * (100 - percentDev)/100
하도yl = pcmin + (pcmax - pcmin) * percentDev/100
%Dev 무어는 13%라고 생각합니다.
가격이 상행기를 돌파할 때, 긴 신호가 발생; 가격이 하행기를 돌파할 때, 짧은 신호가 발생.
특정 거래 신호의 발생을 판단하는 방법은 다음과 같습니다:
boundup = high > yh 경로를 돌파했는지 판단하기
bounddn = low < yl 경로를 돌파했는지 판단하기
upsign = sma(bounddn, 2) == 1bounddn의 평균선으로 판단하여 계속 하차
dnsign = sma(boundup, 2) == 1boundup의 평행선으로 판단하여 계속적으로 궤도를 돌파한다
exitup = dnsign 선로를 뚫고 평지 신호를 발생
exitdn = upsign 하차 궤도를 뚫고 평지 신호를 발생
if upsign 하향 궤도를 뚫고 복수 신호를 생성한다
if dnsign 경유 경계를 뚫고 공백 신호를 발생
이 전략은 동시에 거래 시작 시간을 설정하여 불필요한 야간 포지션을 피합니다.
동천 통로를 이용해서 추세를 판단하고, 재검토하는 것이 더 효과적입니다.
이중 거래가 가능하도록 장과 단 신호를 동시에 설정할 수 있습니다.
일률적인 필터링을 통해 신호를 판단하여 잘못된 거래를 피하십시오.
스톱로스를 설정할 수 있고, 위험을 조절할 수 있습니다.
거래 시작 및 종료 시간을 설정하여 야간 포지션 위험을 피하십시오.
동천 통로는 History 및 PercentDev에 민감하며, 다른 품종에 맞게 최적화해야 합니다.
지진이 발생했을 때 잘못된 신호가 발생할 수 있습니다.
주문 관리 요소를 고려하지 않고 실적에서 수익에 영향을 미칠 수 있습니다.
포지션 관리 요소를 고려하지 않고, 실장에 과도한 포지션 위험이 발생할 수 있습니다.
재무 관리 요소를 고려하지 않고, 실장에 거래 자금을 합리적으로 설정해야 합니다.
다양한 품종에 더 잘 적응할 수 있도록 history와 percentDev의 최적화
필터를 추가하여 진동시 잘못된 신호를 방지합니다.
포지션 관리 모듈을 추가하여 단일 포지션의 자본 점유율을 제어합니다.
자본 관리 모듈을 추가하여 총 포지션의 자본 비율을 제한합니다.
주문 관리 기능을 추가하여 주문 방식을 최적화합니다.
동치안 변동 채널 거래 전략은 통로 돌파를 통해 트렌드 및 거래 신호를 판단하고, 재측량 효과가 뛰어나고, 양방향 거래 능력을 갖추고 있다. 그러나 이 전략에는 또한 몇 가지 위험이 있으며, 매개 변수, 필터, 포지션 관리, 자금 관리, 주문 관리 등의 측면에 대한 최적화가 필요하며, 실물에서 안정적인 수익을 올릴 수 있다.
/*backtest
start: 2023-10-31 00:00:00
end: 2023-11-07 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
////////////////////////////////////////////////////////////
// Copyright by AlexInc v1.0 02/07/2018 @aav_1980
// PriceChannel strategy
// If you find this script helpful, you can also help me by sending donation to
// BTC 16d9vgFvCmXpLf8FiKY6zsy6pauaCyFnzS
// LTC LQ5emyqNRjdRMqHPHEqREgryUJqmvYhffM
////////////////////////////////////////////////////////////
//@version=3
strategy("AlexInc PriceChannel Str", overlay=false)
history = input(20)
percentDev = input(13)
capital = input(100)
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usestoploss = input(true, defval = true, title = "Stop Loss")
stoplossmult = input(3.8, defval = 3.8, minval = 1, maxval = 10, title = "Stop loss multiplicator")
fromyear = input(2018, defval = 2018, 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")
bodymin = min( open, close)
bodymax = max(open, close)
pcmax = highest(bodymax, history)
pcmin = lowest(bodymin, history)
yh = ((pcmax - pcmin) / 100 * (100 - percentDev)) + pcmin
yl = ((pcmax - pcmin) / 100 * percentDev) + pcmin
plot(pcmax)
plot(pcmin)
plot(yh)
plot(yl)
//1
bounddn = low < yl ? 1 : 0
boundup = high > yh ? 1 : 0
upsign = sma(bounddn, 2) == 1
dnsign = sma(boundup, 2) == 1
//2
//upsign = crossover(bodymin, yl)
//dnsign = crossunder(bodymax , yh)
exitup = dnsign
exitdn = upsign
lot = strategy.equity / close * capital / 100
xATR = atr(history)
nLoss = usestoploss ? stoplossmult * xATR : na
stop_level_long = 0.0
stop_level_long := nz(stop_level_long[1])
stop_level_short = 0.0
stop_level_short := nz(stop_level_short[1])
pos = strategy.position_size
if pos >0 and pos[1] <= 0 //crossover(pos, 0.5)
stop_level_long = strategy.position_avg_price - nLoss
if pos < 0 and pos[1] >= 0 //crossunder(pos, -0.5)
stop_level_short = strategy.position_avg_price + nLoss
if pos == 0
stop_level_long = bodymin - nLoss
stop_level_short = bodymax + nLoss
//plot(bodymax + nLoss, color=red)
//plot(bodymin - nLoss, color=red)
plot(stop_level_long, color=red)
plot(stop_level_short, color=red)
if upsign
strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)
if dnsign
strategy.entry("Short", strategy.short, needshort == false ? 0 : na)
if true
strategy.close_all()
//if strategy.position_size != 0
// strategy.exit("Exit Long", from_entry = "Long", stop = stop_level_long)
// strategy.exit("Exit Short", from_entry = "Short", stop = stop_level_short)