
이 전략은 여러 가지 기술 지표들을 조합하여 장거리 쌍방향 거래 결정을 내립니다. 주로 부린 라인, RSI, ADX 등의 지표들을 포함하며, 평행선과 결합하여 추세 방향을 판단합니다.
이 전략은 주로 부린 라인을 통해 가격 변동 상황을 판단하는 것으로, 부린 라인이 좁아지면 가격 변동이 감소하고, 돌파가 발생할 수 있습니다. 동시에 RSI와 결합하여 과잉 구매 과잉 판매 현상을 판단하는 것으로, RSI 70 이상은 과잉 구매 지역이며, 30 이하는 과잉 판매 지역입니다. 부린 라인이 좁아지면 RSI 지표가 과잉 구매 과잉 판매 지역에 가까워지면 역전 거래합니다.
또한, 이 전략은 ADX를 사용하여 가격 움직임의 강도를 결정한다. ADX가 높을 때, 강한 추세를 나타냅니다, 이 때 진행 거래를 선택할 수 있습니다. ADX가 낮을 때, 명백한 추세가없는 경우, 이 때 반전 거래를 고려할 수 있습니다. 마지막으로, 평행선과 결합하여 장기적인 경향 방향을 판단하면, 가격이 상승 추세에 있다면 구매를 고려할 수 있으며, 가격이 하락 추세에 있다면 판매를 고려할 수 있습니다.
구체적으로, 부린띠가 좁아지면 RSI 지표가 오버 바이 오버 셀 지역에 가까워서 가격이 하락할 때, 거래가 반발할 수 있다고 생각하면, 이 때 더 많이 고려한다. 부린띠가 좁아지면 RSI 지표가 오버 셀 지역에 가까워서 가격이 하락할 수 있다고 생각하면, 이 때 공백을 고려한다. 또한, ADX가 높으면, 가격이 상승 추세에 있어, 더 많은 포지션을 할 수 있고, ADX가 낮으면, 가격이 하락 추세에 있어, 포지션을 공백할 수 있다. 여러 가지 지표를 조합하여 거래 시스템의 안정성을 높일 수 있다.
이 다중 지표 조합 전략은 다음과 같은 장점이 있습니다.
여러 가지 기술 지표를 종합적으로 고려하여 거래 신호의 정확성과 안정성을 향상시킵니다. 단일 지표는 가짜 돌파구와 같은 오해에 취약하며, 여러 지표 조합은 신호를 검증하여 잘못된 거래를 방지 할 수 있습니다.
트렌드를 고려하고, 흔들림을 고려하며, 다양한 시장 상황에 적응할 수 있고, 유연한 층이 변한다. 트렌드 거래는 큰 추세를 추구하며, 흔들림 거래는 작은 이익을 목표로 한다.
동시에 더 많은 코스피를 취하는 것은 일방적인 시장의 포지션 위험을 줄이고 극단적인 상황을 예방할 수 있다.
포지션이 틀렸을 때 약간의 수익과 손실을 제한하는 스톱로스를 설정합니다.
매개 변수 최적화를 통해 전략 효과를 지속적으로 향상시키고 시장 변화에 적응할 수 있다.
이 전략에는 몇 가지 위험도 있습니다.
다중 지표 조합은 전략의 복잡성을 증가시키고, 잘못된 매개 변수 설정은 효과를 떨어뜨릴 수 있다. 충분한 테스트와 최적화가 필요하다.
기술적 지표에 너무 의존하여 기본적인 정보를 무시하면 거래 신호가 정확하지 않을 수 있습니다. 지표가 잘못된 신호를 냈을 때 신중하게 처리해야합니다.
지표가 신호를 생성할 때, 시장상황이 어느 정도 변한 상태일 수 있으며, 추격 하락의 위험이 있다. 적절한 반향을 기다려야 한다.
다중공간 쌍방향은 거래 빈도를 높이고, 수수료 비용과 재무 압박을 높인다. 포지션 규모를 통제해야 한다.
특정 곡선 적합의 위험이 존재하기 때문에 여러 시장에서 전략의 강도를 테스트하는 것이 좋습니다.
엄격한 스톱, 신중한 포지션, 합리적인 포지션 제어 등의 방법으로 위험을 제어 할 수 있습니다. 전체적으로,이 전략은 강력한 실용성을 가지고 있습니다.
이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.
다양한 변수 조합을 테스트하여 최적의 변수를 찾습니다. 단계적 방법, 무작위 검색, 유전 알고리즘 등의 방법을 사용하여 변수 최적화를 할 수 있습니다.
KDJ, William 등과 같은 더 많은 지표를 추가하여 지표 그룹을 형성하고 전략의 안정성을 향상시킵니다.
포지션 관리를 최적화하고, 포지션을 동적으로 조정하여 위험을 통제한다.
기계 학습 알고리즘과 결합하여, 가격 추세와 미래의 움직임을 판단하기 위해 양적 모델을 사용합니다.
다양한 품종, 시간, 시장에서 전략의 적응성을 높이기 위해 테스트합니다.
진입 타이밍과 출전 타이밍을 최적화하여 초기 단계에서 트렌드를 캡처하고 반전 전에 출구합니다.
이윤을 고정하고 위험을 통제하기 위해 스톱 트래킹, 이동 스톱 등의 방법을 사용한다.
기본적 요소와 시장 구조 판단을 첨부하여 기술 지표에서 나오는 신호를 필터링하십시오.
이 전략은 다양한 지표를 사용하여 가격 추세를 판단하여 자동화 거래를 구현한다. 전략은 지표 그룹 검증, 양방향 거래, 손실 차단 등의 장점을 가지고 있으며 거래 효율성을 향상시킬 수 있다. 그러나 최적화, 가짜 신호 등의 문제에 주의를 기울여야 한다. 지속적인 최적화 테스트를 통해 이 전략은 안정적이고 실용적인 정량화 거래 시스템으로 될 수 있다.
/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-24 00:00:00
period: 2h
basePeriod: 15m
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/
// © The_Bigger_Bull
//@version=5
strategy("Best TradingView Strategy", overlay=true, margin_long=0, margin_short=0)
//Bollinger Bands
source1 = close
length1 = input.int(15, minval=1)
mult1 = input.float(2.0, minval=0.001, maxval=50)
basis1 = ta.sma(source1, length1)
dev1 = mult1 * ta.stdev(source1, length1)
upper1 = basis1 + dev1
lower1 = basis1 - dev1
//buyEntry = ta.crossover(source1, lower1)
//sellEntry = ta.crossunder(source1, upper1)
//RSI
ma(source, length, type) =>
switch type
"SMA" => ta.sma(source, length)
"Bollinger Bands" => ta.sma(source, length)
"EMA" => ta.ema(source, length)
"SMMA (RMA)" => ta.rma(source, length)
"WMA" => ta.wma(source, length)
"VWMA" => ta.vwma(source, length)
rsiLengthInput = input.int(14, minval=1, title="RSI Length", group="RSI Settings")
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
maTypeInput = input.string("SMA", title="MA Type", options=["SMA", "Bollinger Bands", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA Settings")
maLengthInput = input.int(14, title="MA Length", group="MA Settings")
bbMultInput = input.float(2.0, minval=0.001, maxval=50, title="BB StdDev", group="MA Settings")
up = ta.rma(math.max(ta.change(rsiSourceInput), 0), rsiLengthInput)
down = ta.rma(-math.min(ta.change(rsiSourceInput), 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
rsiMA = ma(rsi, maLengthInput, maTypeInput)
isBB = maTypeInput == "Bollinger Bands"
//plot(rsi, "RSI", color=#7E57C2)
//plot(rsiMA, "RSI-based MA", color=color.yellow)
rsiUpperBand = hline(70, "RSI Upper Band", color=#787B86)
hline(50, "RSI Middle Band", color=color.new(#787B86, 50))
rsiLowerBand = hline(30, "RSI Lower Band", color=#787B86)
fill(rsiUpperBand, rsiLowerBand, color=color.rgb(126, 87, 194, 90), title="RSI Background Fill")
bbUpperBand = plot(isBB ? rsiMA + ta.stdev(rsi, maLengthInput) * bbMultInput : na, title = "Upper Bollinger Band", color=color.green)
bbLowerBand = plot(isBB ? rsiMA - ta.stdev(rsi, maLengthInput) * bbMultInput : na, title = "Lower Bollinger Band", color=color.green)
fill(bbUpperBand, bbLowerBand, color= isBB ? color.new(color.green, 90) : na, title="Bollinger Bands Background Fill")
//ADX
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
dirmov(len) =>
up1 = ta.change(high)
down1 = -ta.change(low)
plusDM = na(up1) ? na : (up1 > down1 and up1 > 0 ? up1 : 0)
minusDM = na(down1) ? na : (down1 > up1 and down1 > 0 ? down1 : 0)
truerange = ta.rma(ta.tr, len)
plus = fixnan(100 * ta.rma(plusDM, len) / truerange)
minus = fixnan(100 * ta.rma(minusDM, len) / truerange)
[plus, minus]
adx(dilen, adxlen) =>
[plus, minus] = dirmov(dilen)
sum = plus + minus
adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
out = ta.sma(close, 14)
sma1=ta.sma(close,55)
ema200=ta.ema(close,200)
longCondition = (out>sma1) and ta.crossover(source1, lower1)
if (longCondition )
strategy.entry("long", strategy.long)
shortCondition = (out<sma1) and ta.crossunder(source1, lower1)
if (shortCondition )
strategy.entry("short", strategy.short)
stopl=strategy.position_avg_price-50
tptgt=strategy.position_avg_price+100
stopshort=strategy.position_avg_price+50
tptgtshort=strategy.position_avg_price-100
strategy.exit("longclose","long",trail_offset=5,trail_points=45,when=ta.crossover(sma1,out))
strategy.exit("shortclose","short",trail_offset=5,trail_points=45,when=ta.crossover(out,sma1))
//if strategy.position_avg_price<0
plot(sma1 , color=color.blue)
plot(out, color=color.green)
//plot(ema200,color=color.red)