
이 전략은 여러 가지 다른 주기의 Aroon, MA, BB, Williams,% R, ADX 등과 같은 여러 가지 강도 지표의 조합을 통해 다차원적인 강도 개시 지표를 형성하여 추세가 분명할 때 효율적으로 개시 할 수 있습니다.
이 전략은 주로 다음과 같은 몇 가지 지표의 조합을 통해 강력한 포지션 개시 신호를 실현합니다.
아론 지표: 일정 주기 동안의 최고 가격과 최저 가격을 계산하여, 여러 주기 길이의 아론 지표 조합을 통해 트렌드를 판단하는 흔들림 지표를 형성한다.
MA 평균선: 짧은 주기와 긴 주기의 MA 평균선을 교차하여 트렌드 전환점을 판단한다.
B B린: 가격이 B B린을 뚫고 궤도에 올랐을 때 판매하는 신호이다.
윌리엄스 %R 지표: 이 지표는 오버 바이 오버 셀 영역에서 기각을 형성하여 포지션 개시 신호로 사용한다.
ADX 평균 방향 운동 지수: 트렌드의 강도를 판단하기 위해, ADX는 특정 위치보다 높을 때 포지션 개시 신호를 발생시킨다.
위의 여러 지표들은 서로 다른 주기 길이 변수를 통해 다차원 판단 체계를 구성하며, 추세가 뚜렷할 때 여러 지표들은 강력한 포지션 개시 신호를 형성할 수 있다.
구매 조건은 다음과 같습니다:
5가지 중 3가지 조건이 충족되면 강력한 구매 신호가 발생한다.
판매 조건도 비슷합니다. 5개의 판매 조건이 있는데, 그 중 3개가 충족되면 판매 신호가 발생한다.
따라서, 이 전략은 여러 가지 다른 지표들을 조합하여, 트렌드가 뚜렷할 때, 매우 확실한 강력한 포지션 개시 신호를 생성할 수 있다.
이 전략의 가장 큰 장점은 지표 신호의 다차원 조합에 있습니다. 이것은 단일 지표로 인한 잘못된 신호의 확률을 크게 줄여주고, 트렌드가 분명할 때 고품질의 포지션 개시 신호를 생성할 수 있습니다. 이것은 이 전략의 가장 큰 장점입니다.
다른 장점들은 다음과 같습니다:
매개 변수를 조정하여 다른 시장의 특성에 적응할 수 있습니다.
지표 변수 설정 과학적으로 합리적이고, 변수 융통성이 높다
여러 시간 주기의 조합을 구현하여 판단의 정확도를 향상시킵니다.
코드 구조가 명확하고, 이해하기 쉽고, 재개발이 가능합니다.
이 전략에는 몇 가지 위험도 있습니다.
다중 지표 조합은 판단의 질을 향상시킬 수 있지만 전략의 복잡성을 증가시키고 과대 최적화의 위험을 확대합니다.
매개 변수 설정이 100% 완벽하지 않아 특정 시장에서 작동하지 않을 수 있습니다.
지표 조합 방식에는 최적화 할 여지가 있으며, 조합 논리는 더 정제 할 수 있습니다.
단기 조정 기회는 놓칠 수 있습니다.
대응방법:
샘플 회수, 테스트 파라미터의 거친성
일부 변수를 조정하여 더 많은 시장에 적용할 수 있도록
지표 통합 방식을 최적화하여 판단의 질을 향상시킵니다.
단기 조정에 대한 캡처를 증가시키기 위해 일부 지표 파라미터를 적절히 줄입니다.
이 전략의 주요 최적화 방향은 지표 통합 방식을 최적화하는 것입니다.
더 많은 다양한 유형의 지표를 추가하여 지표 숲을 형성하여 판단의 정확성을 더욱 높여줍니다.
시장 변화에 자동으로 적응할 수 있도록 지표 매개 변수 설정을 최적화합니다.
기계 학습과 같은 방법을 사용하여 최적의 지표 통합 방법을 자동으로 검색합니다.
위험을 통제하기 위해 손실을 막는 전략을 늘리십시오.
감정 지표와 결합하여 시장의 열기와 동적 조정 파라미터를 판단합니다.
더 많은 지표, 자동 최적화 매개 변수 및 통합 프로그램을 통합하여 이 전략의 판단 품질과 융합성을 크게 향상시킬 수 있습니다.
이 전략의 가장 큰 특징은 여러 지표의 과학적인 통합으로 강력한 포지션 개시 신호를 형성하고, 추세가 분명할 때 효과가 눈에 띄는 것이다. 이 전략의 통합 방식에는 더 많은 지표의 도입과 변수 및 통합 방식의 지능적인 최적화를 통해 많은 최적화 공간이 있으며, 이 전략은 매우 강력한 양적 거래 전략이 될 수 있다.
/*backtest
start: 2023-12-19 00:00:00
end: 2024-01-18 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy(title="Aroon+Williams+MA2+ADX+Aroon Str.", shorttitle="Aroon+Williams+MA2+ADX+Aroon Str.", overlay=true)
//https://cafe.naver.com/watchbot/1945
//<<빙썸 매각 기념>> 바이낸스 이오스 복합지표
//Aroon_1
length_1 = input(264, minval=1, title="Length Aroon_1")
upper_1 = 100 * (highestbars(high, length_1+1) + length_1)/length_1
lower_1 = 100 * (lowestbars(low, length_1+1) + length_1)/length_1
midp_1 = 0
oscillator_1 = upper_1 - lower_1
//osc_1 = plot(oscillator_1, color=red)
//Aroon_2
length_2 = input(72, minval=1, title="Length Aroon_2")
upper_2 = 100 * (highestbars(high, length_2+1) + length_2)/length_2
lower_2 = 100 * (lowestbars(low, length_2+1) + length_2)/length_2
midp_2 = 0
oscillator_2 = upper_2 - lower_2
//osc_2 = plot(oscillator_2, color=red)
//Aroon_3
length_3 = input(137, minval=1, title="Length Aroon_3")
upper_3 = 100 * (highestbars(high, length_3+1) + length_3)/length_3
lower_3 = 100 * (lowestbars(low, length_3+1) + length_3)/length_3
midp_3 = 0
oscillator_3 = upper_3 - lower_3
//osc_3 = plot(oscillator_3, color=red)
//Aroon_4
length_4 = input(62, minval=1, title="Length Aroon_4")
upper_4 = 100 * (highestbars(high, length_4+1) + length_4)/length_4
lower_4 = 100 * (lowestbars(low, length_4+1) + length_4)/length_4
midp_4 = 0
oscillator_4 = upper_4 - lower_4
//osc_4 = plot(oscillator_4, color=red)
//Ma double
short_ma_1 = sma(close, 9)
long_ma_1 = sma(close, 21)
// plot(short_ma_1, color = red)
// plot(long_ma_1, color = green)
// plot(cross(short_ma_1, long_ma_1) ? short_ma_1 : na, style = cross, linewidth = 4)
short_ma_2 = sma(close, 9)
long_ma_2 = sma(close, 21)
// plot(short_ma_2, color = red)
// plot(long_ma_2, color = green)
plot(cross(short_ma_2, long_ma_2) ? short_ma_2 : na, transp= 100, title = "ma cross_2", style = cross, linewidth = 4)
//BB
length_bb = input(270, minval=1, title="BB length")
src_bb = input(close, title="Source")
mult_bb = input(2.0, minval=0.001, maxval=50, title="BB mult")
basis_bb = sma(src_bb, length_bb)
dev_bb = mult_bb * stdev(src_bb, length_bb)
upper_bb = basis_bb + dev_bb
lower_bb = basis_bb - dev_bb
// plot(basis_bb, color=red)
// p1 = plot(upper_bb, color=blue)
// p2 = plot(lower_bb, color=blue)
// fill(p1, p2)
//Williams
length_wil = input(130, minval=1, title="Length Williams %R")
upper_wil = highest(length_wil)
lower_wil = lowest(length_wil)
out_wil = 100 * (close - upper_wil) / (upper_wil - lower_wil)
// plot(out_wil)
// band1 = hline(-20)
// band0 = hline(-80)
// fill(band1, band0)
//ADX
adxlen = input(14, title="ADX Smoothing")
dilen = input(145, title="DI Length")
dirmov(len) =>
up_adx = change(high)
down_adx = -change(low)
plusDM = na(up_adx) ? na : (up_adx > down_adx and up_adx > 0 ? up_adx : 0)
minusDM = na(down_adx) ? na : (down_adx > up_adx and down_adx > 0 ? down_adx : 0)
truerange = rma(tr, len)
plus_adx = fixnan(100 * rma(plusDM, len) / truerange)
minus_adx = fixnan(100 * rma(minusDM, len) / truerange)
[plus_adx, minus_adx]
adx(dilen, adxlen) =>
[plus_adx, minus_adx] = dirmov(dilen)
sum_adx = plus_adx + minus_adx
adx = 100 * rma(abs(plus_adx - minus_adx) / (sum_adx == 0 ? 1 : sum_adx), adxlen)
sig_adx = adx(dilen, adxlen)
// plot(sig_adx, color=red, title="ADX")
//ADX 2
adxlen_2 = input(14, title="ADX Smoothing")
dilen_2 = input(150, title="DI Length")
dirmov_2(len) =>
up_adx_2 = change(high)
down_adx_2 = -change(low)
plusDM_2 = na(up_adx_2) ? na : (up_adx_2 > down_adx_2 and up_adx_2 > 0 ? up_adx_2 : 0)
minusDM_2 = na(down_adx_2) ? na : (down_adx_2 > up_adx_2 and down_adx_2 > 0 ? down_adx_2 : 0)
truerange_2 = rma(tr, len)
plus_adx_2 = fixnan(100 * rma(plusDM_2, len) / truerange_2)
minus_adx_2 = fixnan(100 * rma(minusDM_2, len) / truerange_2)
[plus_adx_2, minus_adx_2]
adx_2(dilen_2, adxlen_2) =>
[plus_adx_2, minus_adx_2] = dirmov_2(dilen_2)
sum_adx_2 = plus_adx_2 + minus_adx_2
adx_2 = 100 * rma(abs(plus_adx_2 - minus_adx_2) / (sum_adx_2 == 0 ? 1 : sum_adx_2), adxlen_2)
sig_adx_2 = adx(dilen_2, adxlen_2)
// plot(sig_adx_2, color=red, title="ADX_2")
//Input Position
//buy position
pos_aroon1 = input(-85, title="Aroon_1 Position Index_Down")
pos_madouble1_short = input(117, title="ma double_1 wma_Short")
pos_madouble1_long = input(86, title="ma double_1 sma_Long")
pos_wil = input(-99, title="Williams Position Index_Down")
pos_adx= input(14, title="ADX Position Index_Up")
pos_aroon2 = input(-39, title="Aroon_2 Position Index_Up")
//sell position
pos_bb = input(120, title="BB Position Index_Up")
pos_aroon_3 = input(99, title="Aroon_3 Position Index_Up")
pos_madouble2_short= input(88, title="ma double_2 ema_Short")
pos_madouble2_long= input(96, title="ma double_2 sma_Long")
pos_adx_2= input(9, title="ADX_2 Position Index_Up")
pos_aroon_4 = input(35, title="Aroon_4 Position Index_Down")
//Condition
longCondition_aroon_1 = (oscillator_1 <= pos_aroon1)
longCondition_ma2 = (pos_madouble1_short > pos_madouble1_long)
longCondition_wil = (out_wil <= pos_wil)
longCondition_adx = (sig_adx >= pos_adx)
longCondition_aroon_2 = (oscillator_2 >= pos_aroon2)
shortCondition_bb = (close > basis_bb)
shortCondition_aroon_3 = (oscillator_3 >= pos_aroon_3)
shortCondition_ma2 = (pos_madouble2_short < pos_madouble2_long)
shortCondition_adx = (sig_adx_2 >= pos_adx_2)
shortCondition_aroon_4 = (oscillator_4 <= pos_aroon_4)
vl_aroon_1 = 0
vl_ma2 = 0
vl_wil = 0
vl_adx = 0
vl_aroon_2 = 0
if longCondition_aroon_1
vl_aroon_1 := 1
if longCondition_ma2
vl_ma2 := 3
if longCondition_wil
vl_wil := 1
if longCondition_adx
vl_adx := -1
if longCondition_aroon_2
vl_aroon_2 := -1
vs_bb = 0
vs_aroon_3 = 0
vs_ma2 = 0
vs_adx = 0
vs_aroon_4 = 0
if shortCondition_bb
vs_bb := 1
if shortCondition_aroon_3
vs_aroon_3 := 1
if shortCondition_ma2
vs_ma2 := 3
if shortCondition_adx
vs_adx := -2
if shortCondition_aroon_4
vs_aroon_4 := -1
// plotshape(vl_aroon_1, title= "vl_aroon_1", location=location.belowbar, color=green, text="vl_aroon_1")
// plotshape(vl_ma2, title= "vl_ma2", location=location.belowbar, color=green, text="\nvl_ma2")
// plotshape(vl_wil, title= "vl_wil", location=location.belowbar, color=green, text="\n\nvl_wil")
// plotshape(vl_adx, title= "vl_adx", location=location.belowbar, color=green, text="\n\n\nvl_adx")
// plotshape(vl_aroon_2, title= "vl_aroon_2", location=location.belowbar, color=green, text="\n\n\n\nvl_aroon_2")
// plotshape(vs_bb, title= "vs_bb", location=location.abovebar, color=orange, text="vs_bb")
// plotshape(vs_aroon_3, title= "vs_aroon_3", location=location.abovebar, color=orange, text="vs_aroon_3\n")
// plotshape(vs_ma2, title= "vs_ma2", location=location.abovebar, color=orange, text="vs_ma2\n\n")
// plotshape(vs_adx, title= "vs_adx", location=location.abovebar, color=orange, text="vs_adx\n\n\n")
// plotshape(vs_aroon_4, title= "vs_aroon_4", location=location.abovebar, color=orange, text="vs_aroon_4\n\n\n\n")
longCondition = (vl_aroon_1 + vl_ma2 + vl_wil + vl_adx + vl_aroon_2) >= 3 ? true : na
shortCondition = (vs_bb + vs_aroon_3 + vs_ma2 + vs_adx + vs_aroon_4) >= 3 ? true : na
buy = longCondition == 1 ? longCondition : na
sell = shortCondition == 1? shortCondition : na
// plotshape(buy, title= "buy", location=location.bottom, color=green, text="buy")
// plotshape(sell, title= "sell", location=location.top, color=orange, text="sell")
// === BACKTEST RANGE ===
FromMonth = input(defval = 8, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear = input(defval = 2018, title = "From Year", minval = 2014)
ToMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
ToYear = input(defval = 2018, title = "To Year", minval = 2014)
strategy.entry("L", strategy.long, when=(buy))
strategy.close("L", when=(sell))
// strategy.entry("S", strategy.short, when=(sell and (time >= timestamp(FromYear, FromMonth, FromDay, 00, 00)) and (time <= timestamp(ToYear, ToMonth, ToDay, 23, 59))))
// strategy.close("S", when=(buy and (time <= timestamp(ToYear, ToMonth, ToDay, 23, 59))))