이동평균 확증과 함께 나선형 십자 전략

저자:차오장, 날짜: 2024-02-02 14:50:08
태그:

img

전반적인 설명

이 전략은 회전 지표와 이동 평균 라인을 결합하여 잠재적 인 긴 및 짧은 신호를 생성하기 위해 가격 트렌드의 방향과 강도를 식별합니다. 회전 긍정적 라인 (VI +) 이 회전 부정적인 라인 (VI-) 이상으로 넘을 때 각 크로스오버가 차트에서 강조됩니다. 닫기 가격이 이동 평균 라인 이상이라면 긴 신호가 생성됩니다. VI + 이상으로 넘을 때, 닫기 가격이 이동 평균 라인 아래에 있다면 짧은 신호가 생성됩니다.

전략 논리

  1. 소용돌이 지표: 두 개의 라인 - 소용돌이 긍정적 (VI+) 및 소용돌이 부정적 (VI-) 으로 구성됩니다. 가격 트렌드의 방향과 강도를 식별하는 데 사용됩니다.

  2. 이동 평균 (MA): 선택된 이동 평균 방법 (SMA, EMA, SMMA, WMA 또는 VWMA) 을 사용하여 가격 데이터를 매끄럽게합니다. 매끄러운 선은 매끄러운 선으로 불립니다.

  3. 긴 신호와 짧은 신호를 결정한다: VI+가 VI-를 넘을 때 각 크로스오버가 강조된다. 클로즈가 매끄러운 선 위에 있다면 긴 신호가 생성된다. VI-가 VI+를 넘을 때, 매끄러운 선 아래에 있다면 짧은 신호가 생성된다.

장점

  1. 트렌드 식별과 평형화를 결합하여 트렌드 시장의 트렌드를 포착하고 불안한 시장에서 잘못된 신호를 피합니다.

  2. 소용돌이 지표는 트렌드 방향과 강도를 효과적으로 식별합니다. 이동 평균은 약간의 소음을 필터합니다.

  3. 간단하고 명확한 전략 논리, 이해하기 쉽고 실행하기 쉽습니다.

  4. 사용자 정의 가능한 매개 변수, 다른 시장 환경에 적응합니다.

위험성

  1. 범위를 제한하거나 트렌드 없는 시장에서 잘못된 신호와 윙사 (whipsaws) 를 생성할 수 있습니다.

  2. 부적절한 매개 변수 설정은 전략 성능에 영향을 줄 수 있습니다. 예를 들어, 너무 짧은 이동 평균은 평평화 능력이 떨어지고 트렌드 변화를 인식하는 데 더 오래 걸립니다.

  3. 예상치 못한 주요 사건으로 인한 극심한 가격 변동에 대한 보호가 불가능합니다.

개선

  1. 트렌드 신뢰성을 결정하기 위해 볼륨과 같은 다른 지표를 포함합니다.

  2. 트렌드 추종과 이동 평균의 노이즈 필터링을 균형 잡기 위해 매개 변수를 최적화하십시오.

  3. 스톱 손실을 제어 손실에 추가합니다.

  4. 자동화된 매개 변수 최적화를 위해 기계 학습을 활용합니다.

  5. 리스크 관리 모듈을 포함해서 포지션 크기를 조정합니다.

결론

이 전략은 트렌드를 포착하기 위해 요동 지표와 이동 평균을 효과적으로 결합합니다. 이는 잘못된 신호를 줄이기 위해 약간의 노이즈 필터링 기능을 가지고있는 동시에 트렌드 방향을 식별합니다. 논리는 간단하고 유연하며 트렌딩 시장에서 잘 수행합니다. 더 많은 필터, 최적화 매개 변수 및 스톱 손실을 추가함으로써 위험 통제에 대한 추가 개선이 가능합니다.


/*backtest
start: 2023-02-01 00:00:00
end: 2024-02-01 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/
// © DraftVenture

//@version=5
strategy("Vortex + Moving Average Strategy", overlay=true)

//Vortex settings
period_ = input.int(14, title="Vortex Length", minval=2)
VMP = math.sum( math.abs( high - low[1]), period_ )
VMM = math.sum( math.abs( low - high[1]), period_ )
STR = math.sum( ta.atr(1), period_ )
VIP = VMP / STR
VIM = VMM / STR
plot(VIP, title="VI +", color=color.white)
plot(VIM, title="VI -", color=color.white)

len = input.int(9, minval=1, title="MA Length")
src = input(close, title="Source")
offset = input.int(title="Offset", defval=0, minval=-500, maxval=500)
out = ta.sma(src, len)
plot(out, color=color.blue, title="MA", offset=offset)

ma(source, length, type) =>
    switch type
        "SMA" => 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)

typeMA = input.string(title = "Method", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Smoothing")
smoothingLength = input.int(title = "Length", defval = 5, minval = 1, maxval = 100, group="Smoothing")

smoothingLine = ma(out, smoothingLength, typeMA)
plot(smoothingLine, title="Smoothing Line", color=#f37f20, offset=offset, display=display.none)

// Determine long and short conditions
longCondition = ta.crossover(VIP, VIM) and close > smoothingLine
shortCondition = ta.crossunder(VIP, VIM) and close < smoothingLine
crossCondition = ta.crossunder(VIP, VIM) or ta.crossunder(VIM, VIP)

// Strategy entry and exit logic
if longCondition
    strategy.entry("Long", strategy.long)

if shortCondition
    strategy.entry("Short", strategy.short)

bgcolor(crossCondition ? color.new(color.white, 80) : na)

// Strategy by KP

더 많은