
이 전략은 무작위적인 흔들림 지표 (Stochastic Oscillator) 와 이동 평균 (Moving Average) 을 결합하여 무작위적인 지표의 과매매와 이동 평균의 추세를 관찰하여 거래 신호를 생성한다. 무작위적인 지표가 과매 지역과 이동 평균 선 아래에서 공백 신호를 생성하고, 과매 지역과 이동 평균 선 위쪽에서 더 많은 신호를 생성한다. 이 전략은 또한 무작위적인 지표 필터를 도입하고, 무작위적인 지표 K 선이 50 이하의 일정 수의 K 선을 유지하면 D 선과 교차하면 그에 따른 거래 신호를 생성할 수 있다. 이 전략은 또한 위험을 제어하기 위해 스톱 로스를 설정한다.
무작위적인 진동 지표를 계산하여 K선과 D선을 얻는다. K선과 D선의 변수들은 무작위적인 지표 주기, K값 평형, D값 평형, 과매구역과 과판구역 등으로 조정할 수 있다.
이동 평균을 계산합니다.
계산 무작위 지표 필터. K 라인이 50 이하의 일정 K 라인을 유지하면 필터 신호가 발생한다. 주기 조정할 수 있다.
다중 헤드 신호를 생성하는 조건: 무작위 지표가 오버 셀드 영역에서 상향으로 교차하거나 무작위 지표 필터 신호와 이동 평균 상향.
공백 신호를 생성하는 조건: 무작위 지표가 초상권에서 가로 아래로 또는 무작위 지표 필터 신호와 이동 평균이 아래로.
다중 평점 조건: 무작위 K 선에서 이동 평균을 가로질러 평균이 아래로 이동한다.
공평한 조건: 무작위 K 선 아래의 이동 평균을 가로질러 평균이 상향으로 이동한다.
포지션 관리는 고정자금 비율을 사용하며, 기본은 10%이며, 동시에 스톱로스를 설정하여, 기본은 2%입니다.
오버 바이 오버 세일과 트렌드 특성을 결합하면, 트렌드 속의 하락을 막아낼 수 있다.
무작위 지표 필터는 변동 시 자주 거래되는 것을 방지한다.
손해 방지 설정은 회수 제어에 도움이 됩니다.
코드 구조는 명확하고, 변수는 조정할 수 있으며, 추가적인 최적화에 적합하다.
무작위 지표는 다소 지연되어 가장 좋은 시가점을 놓칠 수 있습니다.
트렌드 전환점에서의 스크래치 정확도가 떨어지고, 스톱 로즈 빈도가 높을 수 있다.
고정 비율 자금 관리는 연속적인 손실의 경우 철회가 크다.
더 많은 필터링 조건, 예를 들어 가격 행동, 다른 보조 지표와 같은 것을 도입하여 신호의 정확성을 향상시킵니다.
신호를 강하고 약하게 나누고, 강한 신호가 발생했을 때 포지션을 증가시킨다.
트렌드 전환점 판단을 최적화하여 더 많은 상황을 파악할 수 있습니다.
포지션 관리를 최적화하기 위해, 부동의 적자 대비 포지션 조정 등을 고려할 수 있다.
다양한 변수 조합을 시도해 최적의 변수를 찾아보세요.
이 전략은 무작위 변동 지표의 기초에 따라 이동 평균과 결합하여 트렌드를 판단하고, 동시에 무작위 지표 자체의 필터 기능을 사용하며, 비교적 신뢰할 수 있는 거래 신호를 생성한다. 전략의 전체적인 생각은 명확하고, 트렌드 상황에서 사용하기에 적합하다. 그러나 무작위 지표의 지연성이 존재하기 때문에, 흐름의 전환점에서의 성능은 좋지 않을 수 있으며, 전체적인 적응성과 거친성은 추가 검토 후에 이루어질 것이다. 필터링 조건, 포지션 관리 파라미터, 수적 최적화 등의 측면에서 전략에 대한 개선을 계속할 수 있다.
/*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")