다중 지표에 기초한 양적 거래 전략

저자:차오장, 날짜: 2023-10-25 18:06:44
태그:

img

전반적인 설명

이 전략은 장기 및 단기 거래 결정을 내리기 위해 여러 기술적 지표를 결합합니다. 주로 볼링거 밴드, RSI, ADX 및 다른 지표를 사용하여 트렌드 방향을 결정하기 위해 이동 평균과 함께 사용합니다.

전략 논리

이 전략은 주로 가격 변동성을 판단하기 위해 볼링거 밴드를 사용합니다. 좁히는 밴드는 파업으로 이어질 수 있는 변동성을 감소시키는 것을 나타냅니다. RSI는 과반 구매 및 과반 판매 조건을 식별하는 데 사용됩니다. RSI 70 이상은 과반 구매이며 30 이하는 과반 판매입니다. 밴드가 좁아지고 RSI가 한계에 접근하면 역 거래가 고려됩니다.

또한 ADX는 트렌드 강도를 평가하는 데 사용됩니다. 높은 ADX는 트렌드 거래를 선호하는 강한 트렌드를 나타냅니다. 낮은 ADX는 평균 반전을 고려하여 명확한 트렌드를 나타내지 않습니다. 마지막으로 이동 평균은 장기적인 트렌드 방향을 정의합니다. 상승 트렌드는 긴 것을 선호하며 하락 트렌드는 짧은 것을 선호합니다.

특히, 밴드가 압축되면, RSI는 한계에 가까워지고, 가격이 하위 밴드 아래로 떨어지면, 반등이 예상되며, 길게 간다. 밴드가 압축되면, RSI는 한계에 가까워지고, 가격이 상위 밴드 위에 떨어지면, 하락이 예상된다. 또한, 높은 ADX로, 상승 추세에 장을 추가하십시오. 낮은 ADX로, 하락 추세에 단장을 추가하십시오. 지표를 결합하면 시스템 안정성이 향상됩니다.

이점 분석

다중 지표 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 지표를 결합하면 정확성과 안정성이 향상됩니다. 단일 지표는 잘못된 신호에 취약하며 여러 지표는 신호를 확인하고 나쁜 거래를 피합니다.

  2. 트렌드 및 범위 거래 모두 고려, 다른 시장 조건에 적응. 트렌드 거래는 큰 움직임을 목표로합니다. 범위 거래는 작은 이익을 목표로합니다.

  3. 롱과 쇼트는 방향적인 위험을 줄이고 극단적인 움직임을 피합니다.

  4. 손해를 멈추고 수익을 가져가며 수익을 차단하고 거래가 잘못되면 손실을 제한합니다.

  5. 매개 변수 최적화는 변화하는 시장에 적응함으로써 전략을 지속적으로 개선합니다.

위험 분석

이 전략은 또한 몇 가지 위험을 안고 있습니다.

  1. 더 많은 지표는 복잡성을 증가시킵니다. 부적절한 설정은 성능을 저하시킬 수 있습니다. 광범위한 테스트와 최적화가 필요합니다.

  2. 기본 요소를 무시하면서 기술 요소에 지나치게 의존하는 것은 부정확한 신호를 일으킬 수 있습니다. 지표의 잘못된 신호는 조심스럽게 처리해야합니다.

  3. 시그널이 나오면 시장이 이미 움직였을 수도 있고, 추격 위험성을 야기할 수도 있습니다.

  4. 쌍방향 거래는 빈도를 증가시키고 비용과 압력을 증가시킵니다. 포지션 크기는 통제가 필요합니다.

  5. 곡선 적응 위험은 존재합니다. 다양한 시장에서 견고성을 테스트해야합니다.

위험은 엄격한 스톱 로스, 신중한 포지션 사이즈, 합리적인 레버리지 등을 통해 관리 될 수 있습니다. 전반적으로 전략은 강력한 실용적 가치를 가지고 있습니다.

더 나은 기회

전략을 최적화하는 몇 가지 방법:

  1. 단계별, 무작위 또는 유전 알고리즘을 사용하여 최적의 값을 찾기 위해 다른 매개 변수 집합을 테스트합니다.

  2. KDJ, 윌리엄스 같은 더 많은 지표를 추가하면 강력한 지표 집합을 만듭니다.

  3. 역동적으로 위험을 관리하기 위해 포지션 사이즈 모델을 최적화하십시오.

  4. 가격 추세와 움직임을 예측하기 위해 기계 학습 모델을 포함합니다.

  5. 다양한 제품, 기간 및 시장을 통해 테스트하여 적응력을 향상시킵니다.

  6. 진입 및 출구 시기를 정비하여 트렌드를 일찍 파악하고 반전 전에 출구하십시오.

  7. 이윤을 취득하고, 수익을 확보하고 손실을 제한하기 위해 후속 중지.

  8. 기술적 신호를 필터링하기 위해 근본적인 요소와 시장 구조 분석을 추가하십시오.

요약

이 전략은 여러 지표를 해석하여 거래를 자동화합니다. 지표의 크로스 검증, 이중 방향 거래, 스톱 로스 / 취리 수익 등에서 이익을 얻습니다. 과잉 조정 및 잘못된 신호는 주의가 필요합니다. 지속적인 최적화 및 테스트는 양자 거래 전략의 미래를 대표하는 견고한 실용적인 시스템으로 변환 할 수 있습니다.


/*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)


    
    


더 많은