이 전략은 주릭 이동 평균 ((JMA) 과 RSI 지표의 교차로 매매 신호를 생성한다. JMA 상위 RSI를 통과할 때 더하고, JMA 하위 RSI를 통과할 때 비어있다. 이 전략은 두 지표의 조합을 사용하여 가짜 신호를 필터링하고, 트렌드가 더 분명할 때 거래를 시도한다.
이 전략은 크게 두 가지의 지표들을 이용한 조합입니다.
JMA 지표: 을 곱하는 평평한 이동 평균, 낮은 지연성을 가지고 가격 변화를 더 빨리 포착할 수 있다.
RSI 지표: 시장의 구매와 매매력을 반영하는, 더 흔한 강약 지표이다.
JMA 상위 RSI를 넘으면, 단기 가격 상승 동력이 장기적인 경향보다 강하다는 것을 나타내며, 구매 신호를 생성합니다. JMA 하위 RSI를 넘으면, 빈 신호를提示합니다.
교차 신호가 발신된 후, 거래는 상대방 방향으로 포지션을 열었다. 평소 포지션 조건은 가격이 지정된 목표 비율을 초과하거나 지표가 다시 교차 역전되었다.
JMA 지표의 매개 변수는 조정 가능하며, 다른 주기들에 대해 최적화할 수 있다.
RSI 지표는 가짜 브레이크를 필터링 할 수 있습니다.
이중 지표 조합을 사용하면 잘못된 신호를 줄일 수 있다.
내장된 손해 방지 장치로 손실을 제한할 수 있습니다.
수익률을 조정하여 수익 목표를 달성합니다.
이중 지표 조합 inating, 신호 생성 주파수가 너무 낮을 수 있다. 지표를 더 민감하게 만들기 위해 매개 변수를 조정할 수 있다.
JMA 지표는 뒤떨어지고 있으며, 가격 전환점을 놓칠 수 있다. 다른 선도 지표와 결합하여 최적화할 수 있다.
부적절한 스톱포인트 설정은 파격되어 손실이 확대될 수 있다. 적절한 스톱포인트는 역사 데이터 테스트에 따라 결정되어야 한다.
지표에만 의존하면 가짜 신호가 발생한다. 거래량이나 변동률 지표에 필터링을 추가할 수 있다.
JMA 변수를 테스트하여 최적의 변수 조합을 찾습니다.
다른 RSI 변수 설정을 시도하여 지표 효과를 최적화하십시오.
이동식 손해배상 장치가 추가되어 손해배상 장치가 더 적응할 수 있습니다.
창고 창고 관리 논리를 최적화합니다. 예를 들어, 추가 창고 및 배치 창고 조건을 추가합니다.
KD, MACD 등과 같은 다른 지표 필터 신호를 연구한다.
이 전략은 JMA와 RSI 두 지표의 교차 구현 트렌드 추적을 기반으로 하고, 위험을 제한하기 위해 스톱을 구성할 수 있다. 그러나 여전히 약간의 가짜 신호 가능성이 있으며, 실수 거래를 줄이기 위해 지표 파라미터와 필터 조건을 계속 최적화 할 필요가 있다. 스톱 전략은 또한 피드백 데이터를 기반으로 최적화 테스트를 필요로 한다. 이 전략은 쌍 지표의 교차 거래에 대한 기본 프레임 워크를 제공하며, 확장 할 여지가 있다.
/*backtest
start: 2023-01-01 00:00:00
end: 2023-03-15 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
// Stratégie marche le mieux sur du 2 jours
strategy("JMA(7,50,RSI) crossing RSI(14,close)", overlay=false, currency=currency.EUR, default_qty_type=strategy.cash, default_qty_value=5000)
// Strategy Tester Start Time
sYear = input(2019, title = "Start Year")
sMonth = input(06, title = "Start Month", minval = 01, maxval = 12)
sDay = input(01, title = "Start Day", minval = 01, maxval = 31)
sHour = input(00, title = "Start Hour", minval = 00, maxval = 23)
sMinute = input(00, title = "Start Minute", minval = 00, maxval = 59)
startTime = true
// Strategy Tester End Time
eYear = input(2019, title = "End Year")
eMonth = input(12, title = "End Month", minval = 01, maxval = 12)
eDay = input(01, title = "End Day", minval = 01, maxval = 31)
eHour = input(00, title = "End Hour", minval = 00, maxval = 23)
eMinute = input(00, title = "End Minute", minval = 00, maxval = 59)
endTime = true
// === RSI ===
src = close, len = input(14, minval=1, title="Length")
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
plot(rsi, color=color.purple)
band1 = hline(70)
band0 = hline(30)
// === JMA ===
_length = input(7, title="Length")
_phase = input(50, title="Phase")
_power = input(2, title="Power")
highlightMovements = input(true, title="Highlight Movements ?")
// srcJMA = input(rsi, title="Source")
srcJMA = rsi
phaseRatio = _phase < -100 ? 0.5 : _phase > 100 ? 2.5 : _phase / 100 + 1.5
beta = 0.45 * (_length - 1) / (0.45 * (_length - 1) + 2)
alpha = pow(beta, _power)
jma = 0.0
e0 = 0.0
e0 := (1 - alpha) * srcJMA + alpha * nz(e0[1])
e1 = 0.0
e1 := (srcJMA - e0) * (1 - beta) + beta * nz(e1[1])
e2 = 0.0
e2 := (e0 + phaseRatio * e1 - nz(jma[1])) * pow(1 - alpha, 2) + pow(alpha, 2) * nz(e2[1])
jma := e2 + nz(jma[1])
// === End of JMA def ===
jmaColor = highlightMovements ? (jma > jma[1] ? color.green : color.red) : #6d1e7f
plot(jma, title="JMA switch", linewidth=2, color=jmaColor, transp=0)
// === Inputs ===
// risk management
useStop = input(true, title = "Use Initial Stop Loss?")
goLong() => crossover(rsi, jma)
killLong() => crossunder(rsi, jma)
// ======= DEBUGGGGGGGG ============
long_price = 0.0
short_price = 0.0
if(startTime and endTime)
if(goLong())
long_price := close
strategy.entry("Buy", strategy.long, when = goLong())
strategy.close("Buy", when = killLong() and close > long_price)
// Shorting if using
goShort() => killLong()
killShort() => goLong()
if(startTime and endTime)
if(goShort())
short_price := close
strategy.entry("Sell", strategy.short, when = goShort() and close < short_price)
strategy.close("Sell", when = killShort())
// =========================
if (useStop)
strategy.exit("XLS", from_entry ="Buy", stop = strategy.position_avg_price / 1.08)
strategy.exit("XSS", from_entry ="Sell", stop = strategy.position_avg_price * 1.08)