이치모쿠 쿠모 트위스트 금 흡수 전략

저자:차오장, 날짜: 2023-11-28 16:12:09
태그:

img

전반적인 설명

이치모쿠 쿠모 트위스트 골드 흡수 전략 (Ichimoku Kumo Twist Gold-Absorbing Strategy) 은 이치모쿠 시장 기술 지표와 범위 필터링을 결합한 양적 거래 전략이다. 이치모쿠 지표를 사용하여 시장 추세와 중요한 지원 및 저항 수준을 결정하고, 촛불 패턴과 함께 거래 신호를 생성합니다. 한편, 범위 필터링은 거래 빈도와 위험을 제어하는 데 도움이됩니다.

전략 원칙

이 전략은 주로 이치모쿠 지표와 촛불 패턴을 기반으로 시장 트렌드를 판단합니다. 이치모쿠는 전환선, 기본선 및 클라우드 라인을 포함하고 있으며, 그 교차 관계는 시장 트렌드를 나타냅니다. 클라우드 라인은 또한 지원 및 저항 수준으로 작용합니다. 이 전략은 이치모쿠 라인의 민감도를 조정하기 위해 다양한 매개 변수 조합을 설정합니다. 또한, 전략은 전환선이 기본선을 넘어서면 패턴을 식별하고 구매 신호를 생성하며, 밑을 넘을 때 판매 신호를 생성합니다. 이치모쿠는 이치모쿠 라인의 민감도를 조정합니다. 이치모쿠는 이치모쿠 라인을 기준으로 전환하고, 이치모쿠 라인을 기준으로 전환하고, 이치모쿠 라인을 기준으로 전환하고, 이치모쿠 라인을 기준으로 전환하고, 이치모쿠 라인을 기준으로 전환하고, 이치모쿠 라인을 기준으로 전환하고, 이치모쿠 라인을 기준으로 전환합니다. 이치모쿠는 이치모쿠 라인을 기준으로 전환하고, 이치모쿠 라인을 기준으로 전환하고, 이치모쿠 라

또한, 전략은 날짜 범위 필터를 설정하여 지정된 날짜 범위 내에서만 거래합니다. 이것은 거래 주파수를 제어합니다. 또한, 스톱 로스 설정은 가격이 불리한 방향으로 움직일 때 손실을 중지함으로써 위험을 줄이는 데 도움이됩니다.

이점 분석

  • 시장 트렌드를 판단하기 위해 Ichimoku 지표를 사용, 민감도에 따라 조정 가능한 매개 변수
  • 촛불 패턴 인식으로부터 명확한 거래 신호
  • 날짜 범위 필터 거래 주파수를 제어합니다
  • 위험을 줄이기 위해 적시에 손실을 멈추는 설정

위험 분석

  • 이치모쿠가 뒤쳐져 있다면 빠르게 변화하는 트렌드를 놓칠 수도 있습니다.
  • 날짜 범위 필터는 일부 거래 기회를 놓칠 수 있습니다.
  • 잘못된 스톱 로스 설정은 손실을 증가시킬 수 있습니다.

이치모쿠 매개 변수를 조정하고, 날짜 범위를 최적화하고, 스톱 로스 포인트를 수정하는 방법들은 위험을 개선하고 통제할 수 있습니다.

최적화 방향

  • 최적의 Ichimoku 구성을 찾기 위해 다른 매개 변수 조합을 테스트
  • 다른 지표와 결합하여 이치모쿠 후속 문제를 피합니다.
  • 날짜 범위 설정을 최적화하는 백테스트
  • 조건적 동적 트레일링 스톱 손실을 설정

요약

이치모쿠 쿠모 트위스트 골드 흡수 전략은 이치모쿠 지표, 촛불 패턴 인식, 범위 필터링을 통합하여 시장 추세를 결정합니다. 트렌드 방향을 상당히 명확하게 파악 할 수 있습니다. 매개 변수 조정, 위험 통제 등과 같은 방법을 통해 좋은 전략 성능을 달성 할 수 있습니다. 그러나 이치모쿠 지체 문제가 주목되어야하며 지속적인 최적화 조정이 이루어집니다.


/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-27 00:00:00
period: 3m
basePeriod: 1m
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 == "Cpt 20 60 120 30"
        20
    else
        if presets == "Cpt 10 30 60 30"
            10
        else
            if presets == "Std 18 52 104 26"
                18
            else
                9

ichiBasePeriods(presets) =>
    if presets == "Cpt 20 60 120 30"
        60
    else
        if presets == "Cpt 10 30 60 30"
            30
        else
            if presets == "Std 18 52 104 26"
                52
            else
                26

ichiLaggingSpan2Periods(presets) =>
    if presets == "Cpt 20 60 120 30"
        120
    else
        if presets == "Cpt 10 30 60 30"
            60
        else
            if presets == "Std 18 52 104 26"
                104
            else
                52

ichiDisplacement(presets) =>
    if presets == "Cpt 20 60 120 30"
        30
    else
        if presets == "Cpt 10 30 60 30"
            30
        else
            if presets == "Std 18 52 104 26"
                26
            else
                26

scaling = input(title="Scaling", options=["Linear", "Log"], defval="Linear")
presets = input(title="Presets", options=["Cpt 20 60 120 30", "Cpt 10 30 60 30", "Std 18 52 104 26", "Std 9 26 52 26"], defval="Cpt 20 60 120 30")
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)

// === BACKTEST RANGE ===
FromMonth = input(defval = 10, title = "From Month", minval = 1)
FromDay   = input(defval = 3, title = "From Day", minval = 1)
FromYear  = input(defval = 2017, title = "From Year", minval = 2014)
ToMonth   = input(defval = 1, title = "To Month", minval = 1)
ToDay     = input(defval = 1, title = "To Day", minval = 1)
ToYear    = input(defval = 9999, title = "To Year", minval = 2014)

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

strategy.entry("Buy", strategy.long, when=(golong and (time > timestamp(FromYear, FromMonth, FromDay, 00, 00)) and (time < timestamp(ToYear, ToMonth, ToDay, 23, 59))))
strategy.entry("Sell", strategy.short, when=(goshort and (time > timestamp(FromYear, FromMonth, FromDay, 00, 00)) and (time < timestamp(ToYear, ToMonth, ToDay, 23, 59))))

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)


더 많은