크로스오버 이동 평균 골든 크로스와 데스 크로스 전략


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

크로스오버 이동 평균 골든 크로스와 데스 크로스 전략

이것은 매우 고전적인 이동 평균 금叉死叉 전략이다. 이 전략은 TENKAN과 KIJUN의 두 개의 다른 주기의 이동 평균을 이용하여 금叉 및死叉 신호를 형성하고, 장단한 조작을 한다.

전략 원칙

이 전략은 주로 ‘一目均衡表’ (一目均衡表) 이라고 불리는 일본 주식 기술 분석 방법에 기반하여, TENKAN 선과 KIJUN 선과 같은 여러 이동 평균을 사용하여 시장 추세 방향을 판단한다.

첫째, TENKAN 선은 9일선으로 단기 트렌드를 나타내고; KIJUN 선은 26일선으로 중기 트렌드를 나타낸다. 단기 상에서 중기를 통과하면 구매 신호를 발생시키고, 단기 상에서 중기를 통과하면 판매 신호를 발생시킨다. 이렇게, 클래식한 이동 평균 선의 사각지대가 된다.

다음으로, 이 전략은 공중선과 광운선도 도입한다. 공중선은 단기 및 중기 이동 평균의 평균이고, 광운선 B는 52일 이동 평균이다. 이들은 구름 대조선을 구성하며, 장기적인 경향 방향을 판단한다. 가격의 광운 위의 공간은 다목적 시장이며, 가격의 광운 아래의 공간은 공중 시장이다.

마지막으로, 가짜 신호를 필터링하기 위해, 이 전략은 가격과 OTO 라인 ((26일 가격의 지연선) 과의 관계가 있는지 검출한다. OTO 라인 아래의 가격이 구매 신호를 생성할 때만 구매 신호를 생성한다. OTO 라인 위의 가격이 판매 신호를 생성할 때만 판매 신호를 생성한다.

전략적 이점

이것은 매우 전형적인 이동 평균 전략으로, 이점은 크게 세 가지로 나타난다:

  1. 두 개의 다른 주기의 평균선을 사용하여, 단기 및 중기 두 시간 차원의 경향 방향을 효과적으로 판단할 수 있다.

  2. 빛의 구름선을 이용해 장기적인 추세를 판단하고, 장기적인 하락시장에서 여전히 더 많이 보는 것을 피한다.

  3. 가격과 지연 가격의 관계를 탐지하면 많은 가짜 신호를 필터링하고 불필요한 거래를 줄일 수 있습니다.

따라서, 이 전략은 평균선의 여러 기능을 종합적으로 활용하여, 짧은, 중, 긴 3차원의 트렌드 기회를 적시에 잡을 수 있습니다.

전략적 위험

이 전략의 주요 위험은 다음과 같습니다.

  1. 평행선 전략은 많은 양의 가짜 신호를 생성할 수 있다. 만약 파라미터를 잘 설정하지 못한다면, 자주 거래하기 때문에 감옥에 갇힐 수 있다.

  2. 이 전략은 근본적인 요소를 고려하지 않고 기술적인 측면을 중시한다. 회사의 성과나 시장 정책에 중대한 변화가 생기면 기술적인 신호도 무효가 될 수 있다.

  3. 이 전략은 구매와 판매의 결정을 고려하고 있으며, 스톱로스 메커니즘을 설정하지 않습니다. 잘못된 판단으로 손실이 커질 수 있습니다.

그래서 우리는 더 진보된 일직선 시스템을 찾아내야 합니다. 또는 합리적으로 스톱로스를 설정하거나, 또는 기본적 신호를 추가하여 이 전략을 더 개선하고 위험을 줄일 수 있습니다.

전략 최적화 방향

이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.

  1. 더 안정적이고 효율적인 변수 조합을 찾습니다. 우리는 더 많은 데이터 회신을 통해 전략의 성능을 향상시키는 변수 값을 찾을 수 있습니다.

  2. 스톱 로드 메커니즘을 높여라. 합리적인 스톱 로드는 전략의 최대 손실을 효과적으로 제어할 수 있다.

  3. 기본적 신호를 추가한다. 예를 들어, 성과 예상revision의 데이터는 회사의 전망을 판단하여 전략의 효과를 향상시킬 수 있다.

  4. 오토 라인 전략을 최적화한다. 기존의 구현은 간단하다. 우리는 가격과 역사 가격 관계를 더 안정적이고 정확하게 판단하는 방법을 찾을 수 있다.

  5. 선택 주식 신호와 결합하여 PE, ROE와 같은 요인에 대한 평가를 추가하여 질이 낮은 지표를 필터링 할 수 있습니다.

요약하다

이것은 매우 전형적이고 실용적인 이동 평균 전략이다. 그것은 동시에 짧은, 중간, 긴 3 차원의 추세에 주목하고, 평행선의 다른 기능을 사용하여 거래 신호를 설계하는 데 효과가 좋다. 우리는 이것의 기초를 가지고, 파라미터 최적화, 중지 손실, 주식 선택과 같은 방법을 통해 성능을 향상시킬 수 있습니다.

전략 소스 코드
/*backtest
start: 2022-11-28 00:00:00
end: 2023-12-04 00:00:00
period: 1d
basePeriod: 1h
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/
// © mdeous

//@version=4
strategy(
     title="Ichimoku Kinko Hyo Strategy", 
     shorttitle="Ichimoku Strategy", 
     overlay=true,
     pyramiding=0,
     default_qty_type=strategy.percent_of_equity,
     default_qty_value=100,
     initial_capital=1000,
     currency="USD",
     commission_type=strategy.commission.percent,
     commission_value=0.0
     )

//
// SETTINGS
//

// Ichimoku

int TENKAN_LEN = input(title="Tenkan-Sen Length", defval=9, minval=1, step=1)
int KIJUN_LEN = input(title="Kijun-Sen Length", defval=26, minval=1, step=1)
int SSB_LEN = input(title="Senkou Span B Length", defval=52, minval=1, step=1)
int OFFSET = input(title="Offset For Chikou Span / Kumo", defval=26, minval=1, step=1)

// Strategy

int COOLDOWN = input(title="Orders Cooldown Period", defval=5, minval=0, step=1)
bool USE_CHIKOU = input(title="Use Imperfect Chikou Position Detection", defval=false)

//
// HELPERS
//

color _red = color.red
color _blue = color.blue
color _lime = color.lime
color _fuchsia = color.fuchsia
color _silver = color.silver
color _aqua = color.aqua

f_donchian(_len) => avg(lowest(_len), highest(_len))

//
// ICHIMOKU INDICATOR
//

float tenkan = f_donchian(TENKAN_LEN)
float kijun = f_donchian(KIJUN_LEN)
float ssa = avg(tenkan, kijun)
float ssb = f_donchian(SSB_LEN)

plot(tenkan, title="Tenkan", color=_silver)
plot(close, title="Chikou", offset=-OFFSET+1, color=_aqua)
_ssa = plot(ssa, title="SSA", offset=OFFSET-1, color=_lime)
_ssb = plot(ssb, title="SSB", offset=OFFSET-1, color=_red)
fill(_ssa, _ssb, color=ssa > ssb ? _lime : _fuchsia, transp=90)

//
// STRATEGY
//

// Check if price is "above or below" Chikou (i.e. historic price line):
// This detection is highly imperfect, as it can only know what Chikou position
// was 2*offset candles in the past, therefore if Chikou crossed the price
// line in the last 2*offset periods it won't be detected.
// Use of this detection is disabled by default,

float _chikou_val = close[OFFSET*2+1]
float _last_val = close[OFFSET+1]
bool above_chikou = USE_CHIKOU ? _last_val > _chikou_val : true
bool below_chikou = USE_CHIKOU ? _last_val < _chikou_val : true

// Identify short-term trend with Tenkan

bool _above_tenkan = min(open, close) > tenkan
bool _below_tenkan = max(open, close) < tenkan

// Check price position compared to Kumo

bool _above_kumo = min(open, close) > ssa
bool _below_kumo = max(open, close) < ssb

// Check if Kumo is bullish or bearish

bool bullish_kumo = ssa > ssb
bool bearish_kumo = ssa < ssb

// Correlate indicators to confirm the trend

bool bullish_trend = _above_tenkan and _above_kumo and bullish_kumo
bool bearish_trend = _below_tenkan and _below_kumo and bearish_kumo

// Build signals

bool buy1 = (close > open) and ((close > ssa) and (open < ssa)) // green candle crossing over SSA
bool buy2 = bullish_kumo and bearish_kumo[1] // bullish Kumo twist

bool sell1 = (close < open) and ((close < ssb) and (open > ssb)) // red candle crossing under SSB
bool sell2 = bearish_kumo and bullish_kumo[1] // bearish Kumo twist

bool go_long = below_chikou and (bullish_trend and (buy1 or buy2))
bool exit_long = above_chikou and (bearish_trend and (sell1 or sell2))

//
// COOLDOWN
//

f_cooldown() =>
    _cd_needed = false
    for i = 1 to COOLDOWN by 1
        if go_long[i]
            _cd_needed := true
            break
    _cd_needed

go_long := f_cooldown() ? false : go_long

//
// ORDERS
//

strategy.entry("buy", strategy.long, when=go_long)
strategy.close_all(when=exit_long)

//
// ALERTS
//

alertcondition(
     condition=go_long,
     title="Buy Signal",
     message="{{exchange}}:{{ticker}}: A buy signal for {{strategy.market_position_size}} units has been detected (last close: {{close}})."
     )
alertcondition(
     condition=exit_long,
     title="Sell Signal",
     message="{{exchange}}:{{ticker}}: A sell signal for {{strategy.market_position_size}} units has been detected (last close: {{close}})."
     )