달을 통과하는 구름 하나와 돈을 끌어들이는 별 두 개 전략


생성 날짜: 2023-11-28 16:12:09 마지막으로 수정됨: 2023-11-28 16:12:09
복사: 1 클릭수: 613
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

달을 통과하는 구름 하나와 돈을 끌어들이는 별 두 개 전략

개요

한 구름이 달을 통과하는 쌍성 흡수 전략은 시장 기술 분석 지표 한 구름과 범위를 필터링하는 양적 거래 전략이다. 이 전략은 한 구름 지표를 사용하여 시장 추세와 중요한 지원, 저항 지점, K선 형태를 판단하여 거래 신호를 생성한다. 동시에, 범위를 필터링하는 것은 거래 빈도와 위험을 제어한다.

전략 원칙

이 전략은 주로 한 구름 지표와 K 선 형태를 기반으로 시장 움직임을 판단한다. 한 구름 지표는 전방향, 기준선 및 구름선을 포함하며, 이들의 교차 관계를 통해 시장 추세를 판단할 수 있다. 동시에 구름선은 지원 및 저항 지점으로 사용될 수 있다. 이 전략은 다양한 파라미터 조합을 설정하여 한 구름 선의 민감도를 조정한다. 또한, 전략은 형태를 인식하여 전방향 선에서 기준선을 통과할 때 구매 신호를 발생시키고, 아래로 통과할 때 판매 신호를 발생시킨다.

또한, 전략은 날짜 범위 필터를 설정하여 지정된 날짜 범위 내에서만 거래를 할 수 있습니다. 이것은 전략의 거래 빈도를 제어 할 수 있습니다. 또한, 중지 손실 설정은 위험을 줄일 수 있습니다.

우위 분석

  • 한 클라우드 지표를 사용하여 시장 움직임을 판단하고, 지표 매개 변수는 민감도를 조정할 수 있습니다.
  • K선 형태 인식, 거래 신호 명확
  • 날짜 범위 필터를 설정하여 거래 빈도를 제어할 수 있습니다.
  • 손해 중지 설정, 적시에 손해를 중지하여 위험을 줄일 수 있습니다.

위험 분석

  • 한 구름 지표는 지연되어 있고, 급격한 변화의 추세를 놓칠 수 있습니다.
  • 날짜 범위 필터링으로 일부 거래 기회를 놓칠 수 있습니다.
  • 부적절한 중지 설정으로 손실이 커질 수 있습니다.

클라우드 지표 매개 변수 조정, 날짜 범위를 최적화, 스톱포인트 수정 등의 방법으로 위험을 개선하고 제어할 수 있다.

최적화 방향

  • 다양한 변수 조합을 테스트하여 최적의 1 클라우드 지표 구성을 선택할 수 있습니다.
  • 다른 지표와 함께 판단할 수 있고, 한 클라우드 지표가 뒤떨어지는 문제를 피할 수 있습니다.
  • 역추적 최적화 날짜 범위를 설정할 수
  • 조건부 동적 슬라이드 스톱을 설정할 수 있습니다.

요약하다

한 구름이 달을 통과하는 쌍성 금 흡수 전략은 한 구름 지표, K선 식별, 범위 필터 등의 방법을 종합적으로 사용하여 시장 움직임을 판단하여 트렌드 방향을 더 명확하게 파악할 수 있다. 매개 변수 조정, 위험 제어 등의 수단을 통해 더 나은 전략 효과를 얻을 수 있다. 그러나 여전히 한 구름 지표 지연 문제에 주의를 기울이고 지속적인 최적화 조정이 필요하다.

전략 소스 코드
/*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)