이치모쿠 쿠모 트위스트 전략

저자:차오장, 날짜: 2023-10-27 16:36:59
태그:

img

전반적인 설명

이치모쿠 쿠모 트위스트 전략은 이치모쿠 지표의 전환선, 기본선 및 선도 스펜 라인을 활용하여 트렌드를 따르는 전략으로 거래 신호를 구성합니다. 이치모쿠 클라우드에서 낮은 위험 브레이크아웃 포인트와 과잉 구매 / 과잉 판매 기회를 찾기 위해 트위스트를 관찰하여 단기 및 중장기 트렌드 역전 지점을 식별합니다. 이 전략은 내일 거래뿐만 아니라 여러 주 중장기 거래에 사용할 수 있습니다.

전략 논리

이 전략은 주로 세 개의 이치모쿠 라인을 사용한다. 변환 라인, 기본 라인, 그리고 선도 스펜 1, 그리고 촛불의 높은 가격과 낮은 가격과 함께 구름의 상부와 하부 경계를 계산한다. 변환 라인은 지난 9개의 촛불의 높고 낮은 가격의 중간점을 계산하여 단기 평균을 나타낸다. 기본 라인은 지난 26개의 촛불의 높고 낮은 가격의 중간점을 장기 평균으로 계산한다. 선도 스펜 1은 변환 및 기본 라인의 평균이다. 선도 스펜 2는 지난 52개의 촛불의 중간 가격이다.

구매 신호는 선도 스펜 1이 선도 스펜 2를 넘을 때 생성되며 판매 신호는 선도 스펜 1이 선도 스펜 2를 넘을 때 생성됩니다. 거래 전략은 단순히 트렌드 변화를 포착하기 위해 단기 및 중장기 수단의 상승 및 하락 교차를 추적합니다.

이점 분석

  • 이치모쿠 클라우드 트위스트 전략은 단기 및 중기 트렌드를 결합하여 트렌드 반전 지점을 효과적으로 식별 할 수 있습니다.

  • 평균 회귀 기반 전략은 소음을 필터링하기 위해 약간의 지연을 내장하고 있습니다.

  • 트렌드 강도를 측정하기 위해 클라우드를 사용하는 것은 더 나은 입문과 출구를 가능하게 합니다.

  • 매개 변수 최적화가 필요하지 않습니다. 표준 이치모쿠 매개 변수가 잘 작동합니다.

위험 분석

  • 이치모쿠는 상당히 복잡한 내부를 가지고 있으며, 과도한 최적화를 어렵게 만드는 매개 변수 조정에 민감하지 않습니다.

  • 범위를 제한하는 시장에서는 여러 가지 잘못된 신호가 있을 수 있습니다.

  • 단기 및 중장기 트렌드 간의 격차는 전략 장애를 유발할 수 있습니다.

  • 스톱 손실은 위험을 통제하는 데 필수적입니다. 그렇지 않으면 큰 인출이 가능합니다.

개선 할 기회

  • 최적의 균형을 찾기 위해 변환 기간과 기준 기간의 다양한 조합을 테스트합니다.

  • 다른 표시기와 함께 필터를 추가하여 불리한 형식으로 신호를 받아들이지 않도록하십시오.

  • 동적 또는 트레일링 스톱과 같은 스톱 로스 전략을 포함합니다.

  • 시장 조건에 따라 포지션 크기를 최적화합니다.

  • 더 현실적인 결과를 얻기 위해 백테스트에 거래 수수료를 추가합니다.

요약

전체적으로, 이치모쿠 클라우드 트위스트 전략은 추세에 따른 전략으로 온건하다. 트렌드 전환을 효과적으로 식별하고 트렌드 방향에 맞춰 포지션을 취할 수 있다. 그러나 모니터링이 필요하고 장기적인 사용에 엄격한 위험 통제가 필요하다. 매개 변수 조정, 엔트리 필터, 스톱 로스 메커니즘 등의 지속적인 개선은 이 전략의 안정성과 수익성을 더욱 향상시킬 수 있다.


/*backtest
start: 2022-10-20 00:00:00
end: 2023-10-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title="Ichimoku Kumo Twist Strategy (Presets)", shorttitle="Kumo Twist Strategy", overlay=true)

xlowest_(src, len) =>
    x = src
    for i = 1 to len - 1
        v = src[i]
        if (na(v))
            break
        x := min(x, v)
    x

xlowest(src, len) =>
    na(src[len]) ? xlowest_(src, len) : lowest(src, len)

xhighest_(src, len) =>
    x = src
    for i = 1 to len - 1
        v = src[i]
        if (na(v))
            break
        x := max(x, v)
    x

xhighest(src, len) =>
    na(src[len]) ? xhighest_(src, len) : highest(src, len)

dropn(src, n) =>
    na(src[n]) ? na : src

ichiConversionPeriods(presets) =>
    if presets == "Crypto Doubled"
        20
    else
        if presets == "Crypto Singled"
            10
        else
            if presets == "Standard Doubled"
                18
            else
                9

ichiBasePeriods(presets) =>
    if presets == "Crypto Doubled"
        60
    else
        if presets == "Crypto Singled"
            30
        else
            if presets == "Standard Doubled"
                52
            else
                26

ichiLaggingSpan2Periods(presets) =>
    if presets == "Crypto Doubled"
        120
    else
        if presets == "Crypto Singled"
            60
        else
            if presets == "Standard Doubled"
                104
            else
                52

ichiDisplacement(presets) =>
    if presets == "Crypto Doubled"
        30
    else
        if presets == "Crypto Singled"
            30
        else
            if presets == "Standard Doubled"
                26
            else
                26

scaling = input(title="Scaling", options=["Linear", "Log"], defval="Linear")
presets = input(title="Presets",  options=["Crypto Doubled", "Crypto Singled", "Standard Doubled", "Standard Singled"], defval="Crypto Doubled")
dropCandles = input(1, minval=0, title="Drop first N candles")
showClouds = input(false, "Show Clouds")
stoploss = input(true, title="Stop Loss")

conversionPeriods = ichiConversionPeriods(presets)
basePeriods = ichiBasePeriods(presets)
laggingSpan2Periods = ichiLaggingSpan2Periods(presets)
displacement = ichiDisplacement(presets)
logScaling = scaling == "Log"

lows = dropn(low, dropCandles)
highs = dropn(high, dropCandles)

lowsp = logScaling ? log(lows) : lows
highsp = logScaling ? log(highs) : highs

donchian(len) =>
    avg(xlowest(lowsp, len), xhighest(highsp, len))

conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = avg(conversionLine, baseLine)
leadLine2 = donchian(laggingSpan2Periods)

golong = crossover(leadLine1, leadLine2)
goshort = crossunder(leadLine1, leadLine2)

strategy.entry("Buy", strategy.long, when=golong, stop=(stoploss ? high+syminfo.mintick : na))
strategy.entry("Sell", strategy.short, when=goshort, stop=(stoploss ? low-syminfo.mintick : na))

conversionLinep = logScaling ? exp(conversionLine) : conversionLine
baseLinep = logScaling ? exp(baseLine) : baseLine
leadLine1p = logScaling ? exp(leadLine1) : leadLine1
leadLine2p = logScaling ? exp(leadLine2) : leadLine2

plot(showClouds ? conversionLinep : na, color=#0496ff, title="Conversion Line")
plot(showClouds ? baseLinep : na, color=#991515, title="Base Line")

p1 = plot(showClouds ? leadLine1p : na, offset = displacement, color=green, title="Lead 1")
p2 = plot(showClouds ? leadLine2p : na, offset = displacement, color=red, title="Lead 2")
fill(p1, p2, color = showClouds ? (leadLine1p > leadLine2p ? green : red) : na)


더 많은