리소스 로딩... 로딩...

스토카스틱 오시레이터 및 스토카스틱 필터와 함께 이동 평균 크로스오버 전략

저자:차오장, 날짜: 2024-04-26 16:10:11
태그:MASMA

img

전반적인 설명

이 전략은 스토카스틱 오시레일러와 이동 평균을 결합하여 스토카스틱 지표의 과반 구매 및 과반 판매 조건과 이동 평균의 트렌드를 관찰하여 거래 신호를 생성합니다. 스토카스틱 지표가 과반 구매 구역에 있고 이동 평균이 하향으로 이동할 때 짧은 신호를 생성하고 과반 판매 구역에 있고 이동 평균이 상향으로 이동할 때 긴 신호를 생성합니다. 또한, 전략은 스토카스틱 지표 필터를 도입하여, 특정 수의 K 라인을 유지한 후 스토카스틱 K 라인이 D 무역선을 통과 할 때 해당 신호를 생성 할 수 있습니다. 전략은 또한 위험을 제어하기 위해 스톱 로스를 설정합니다.

전략 원칙

  1. K선과 D선을 얻기 위해 스토카스틱 오시레이터를 계산합니다. 스토카스틱 기간, K 평형, D 평형, 과잉 구매 구역 및 과잉 판매 구역을 포함한 매개 변수는 조정 가능합니다.

  2. 이동평균을 계산합니다. 정 default로 종료값을 사용하여, 조정 가능한 기간을 사용하세요.

  3. 스토카스틱 지표 필터를 계산합니다. K 선이 일정 수의 K 선에서 50 이하로 유지되면 필터 신호를 생성합니다.

  4. 긴 신호를 생성하는 조건: 스토카스틱 지표가 과판된 영역에서 상향을 가로질러 OR 스토카스틱 지표 필터 신호 AND 이동 평균이 상향입니다.

  5. 짧은 신호를 생성하는 조건: 스토카스틱 지표가 과잉 매수 구역에서 하향을 가로질러 OR 스토카스틱 지표 필터 신호 AND 이동 평균이 하향입니다.

  6. 긴 포지션 폐쇄 조건: 스토카스틱 K 라인은 이동 평균 위에 넘어가고 평균은 하향으로 회전합니다.

  7. 짧은 포지션 폐쇄 조건: 스토카스틱 K 라인은 이동 평균 아래를 가로지르며 평균은 상승합니다.

  8. 포지션 매니지먼트는 고정된 기금 비율을 사용 합니다. 기본적으로 10%입니다. 또한 스톱 로스를 설정합니다. 기본적으로 2%.

이점 분석

  1. 과잉 구매/ 과잉 판매와 트렌드 특성을 결합함으로써 트렌드를 추격하고 죽일 수 있습니다.

  2. 스토카스틱 지표 필터는 오스실레이션 시장에서 빈번한 거래를 피합니다.

  3. 스톱 로스 설정은 드라운드를 제어하는 데 도움이 됩니다.

  4. 코드 구조는 명확하고 매개 변수는 조정 가능하며 추가 최적화에 적합합니다.

위험 분석

  1. 스토카스틱 오시레이터는 특정 지연을 가지고 있으며 가장 좋은 구매 및 판매 지점을 놓칠 수 있습니다.

  2. 트렌드 전환점에 주문을 포착하는 정확도는 낮고 스톱 로스의 빈도는 높을 수 있습니다.

  3. 일정한 비율의 펀드 관리는 연속 손실의 경우 큰 마감률을 가지고 있습니다.

최적화 방향

  1. 신호 정확성을 향상시키기 위해 가격 행동, 다른 보조 지표 등과 같은 더 많은 필터링 조건을 도입하십시오.

  2. 강한 신호와 약한 신호로 세분화하고 강한 신호가 나타나면 위치를 높여

  3. 더 많은 시장 움직임을 포착하기 위해 트렌드 전환점에 대한 판단을 최적화하십시오.

  4. 포지션 관리를 최적화하고, 변동적인 이익과 손실 비율을 기반으로 포지션을 조정하는 것을 고려하십시오.

  5. 최적의 매개 변수를 찾기 위해 다른 매개 변수 조합을 시도해보세요.

요약

이 전략은 스토카스틱 오시일레이터 (Stochastic Oscillator) 를 기반으로 트렌드를 판단하기 위해 이동평균을 결합하고, 스토카스틱 지표 자체의 필터링 기능을 활용하여 비교적 신뢰할 수있는 거래 신호를 생성합니다. 전략의 전반적인 아이디어는 명확하고 트렌딩 시장에서 사용하기에 적합합니다. 그러나 스토카스틱 오시일레이터의 지연으로 인해 시장 전환점에서의 성능이 좋지 않을 수 있으며 전반적인 적응력과 안정성은 추가 검사가 필요합니다. 미래에 전략은 필터링 조건, 위치 관리 및 매개 변수 최적화와 같은 측면에서 개선 될 수 있습니다.


/*backtest
start: 2024-03-01 00:00:00
end: 2024-03-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Pablo_2uc

//@version=5
strategy("Estrategia Estocástico + MA con Stop Loss y Filtro Estocástico", overlay=true)

// Parámetros del Estocástico
length = input.int(14, title="Longitud Estocástico")
smoothK = input.int(3, title="Suavizado K")
smoothD = input.int(3, title="Suavizado D")
oversold = input.int(20, title="Sobreventa")
overbought = input.int(80, title="Sobrecompra")

// Parámetros de la Media Móvil
maLength = input.int(9, title="Longitud MA")
maSource = input(close, title="Fuente MA")

// Capital inicial
capital = 5000

// Tamaño de posición (10% del capital)
positionSize = capital * 0.10

// Stop Loss (2% del precio de entrada)
stopLossPercent = input.int(2, title="Stop Loss (%)") / 100

// Número de ruedas para el filtro estocástico
filterPeriods = input.int(12, title="Ruedas de Filtro Estocástico")

// Cálculo del Estocástico
k = ta.sma(ta.stoch(close, high, low, length), smoothK)
d = ta.sma(k, smoothD)

// Cálculo de la Media Móvil
ma = ta.sma(maSource, maLength)

// Filtro estocástico
stochasticFilter = ta.sma(k > 50 ? 1 : 0, filterPeriods)

// Condiciones de entrada en largo y corto
longCondition = (ta.crossunder(k, oversold) or ta.crossover(stochasticFilter, 1)) and ma > ma[1]
shortCondition = (ta.crossover(k, overbought) or ta.crossover(stochasticFilter, 1)) and ma < ma[1]

// Condiciones de salida
exitLongCondition = ta.crossover(k, ma) and ma < ma[1]
exitShortCondition = ta.crossunder(k, ma) and ma > ma[1]

// Estrategia
if (longCondition)
    strategy.entry("Long", strategy.long, qty=positionSize)
    strategy.exit("Exit Long", "Long", stop=close * (1 - stopLossPercent))
if (shortCondition)
    strategy.entry("Short", strategy.short, qty=positionSize)
    strategy.exit("Exit Short", "Short", stop=close * (1 + stopLossPercent))

// Cierre de posiciones
if (exitLongCondition)
    strategy.close("Long")
if (exitShortCondition)
    strategy.close("Short")

관련

더 많은