
지수평균선 교차전략은 가격 흐름을 추적하는 간단한 수량화 거래 전략이다. 그것은 두 개의 다른 변수 설정의 지수 이동 평균 사이의 교차를 구매 및 판매 신호로 사용합니다. 단기평균선 위에 장기평균선을 통과할 때 구매 신호를 생성하고, 단기평균선 아래에 장기평균선을 통과할 때 판매 신호를 생성한다.
이 전략의 핵심 논리는 평평선 이론에 기반한다. 지수 이동 평균은 가격 변동을 효과적으로 평형시켜 가격 트렌드 방향을 판단한다. 빠른 평평선은 가격 변화에 신속하게 반응한다. 느린 평평선은 가격 트렌드 방향을 참조한다. 빠른 평평선 상에서 느린 평평선을 통과하면 가격이 상승하기 시작하여 구매 신호를 발생시킨다. 빠른 평평선 아래로 통과하면 가격이 하락하기 시작하여 판매 신호를 발생시킨다.
구체적으로, 이 전략은 먼저 두 개의 지수 이동 평균을 정의한다: fib_level과 fib_price。 fib_level은 사용자 입력으로 설정되며, fib_price는 최근 100 바의 최고 가격과 최저 가격에 따라 계산된다。 클로즈 가격이 위를 넘거나 아래를 넘으면 각각 구매와 판매 신호를 발생시킨다。 또한 스톱스트로프를 10 바에 가까운 최고 가격과 최저 가격으로 설정한다。
평균선 변수를 최적화하여, 삼도선 시스템을 사용하거나, 다른 지표 판단과 결합하여 오차 신호를 줄일 수 있다. 또한, 적절한 휴식을 취하여, 너무 자주 휴식을 방지한다.
이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.
평균주기 파라미터 설정을 최적화한다. 다양한 길이의 주기 파라미터 조합을 테스트하여 최적의 파라미터를 찾는다.
볼륨과 같은 지표 필터를 추가하십시오. 볼륨이 상승하면 구매 신호가 발생하고, 볼륨이 떨어지면 판매 신호가 발생하여, 가격이 급격하게 변동 할 때 잘못된 신호가 발생하지 않도록하십시오.
기계 학습 알고리즘을 사용하여 자동으로 최적화 파라미터를 . 더 나은 파라미터 집합을 얻기 위해 모형을 훈련하기 위해 역사 데이터를 입력하십시오.
스톱 포지션에 이동 스톱 메커니즘을 추가하십시오. 스톱 라인이 이익이 증가함에 따라 올라갈 수 있도록 하여 너무 일찍 스톱을 방지하십시오.
지수 평행선 교차 전략은 전체적으로 더 간단하고 실용적인 양적 거래 전략이다. 그것은 평행선의 장점을 사용하여 가격 추세를 판단하고 위험을 제어하기 위해 스톱로스를 설정한다. 이 전략은 이해하기 쉽고, 파라미터를 설정하는 것은 유연하며, 다른 품종의 양적 거래에 적용된다. 파라미터 설정을 계속 최적화하고, 필터 조건을 증가시키고, 이동 스톱로스를 설정함으로써 더 나은 전략 효과를 얻을 수 있다.
/*backtest
start: 2023-12-08 00:00:00
end: 2024-01-07 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Fibonacci Strategy", overlay=true)
// Define Fibonacci 0.5 level
fib_level = input(0.5, title="Fibonacci Level")
// Calculate Fibonacci 0.5 level price
fib_price = ta.lowest(low, 100) + (ta.highest(high, 100) - ta.lowest(low, 100)) * fib_level
// Define entry and exit conditions
long_condition = ta.crossover(close, fib_price)
short_condition = ta.crossunder(close, fib_price)
// Set exit points (using previous high or low)
long_exit = ta.highest(high, 10)
short_exit = ta.lowest(low, 10)
// Plot Fibonacci 0.5 level
plot(fib_price, "Fib 0.5", color=color.blue, linewidth=1, style=plot.style_circles)
// Initialize variables
var inLong = false
var inShort = false
// Set trading signals
if (long_condition)
if not inLong
strategy.entry("Buy", strategy.long)
inLong := true
strategy.exit("Exit", "Buy", limit=long_exit)
if (short_condition)
if not inShort
strategy.entry("Sell", strategy.short)
inShort := true
strategy.exit("Exit", "Sell", limit=short_exit)
if (ta.crossover(close, long_exit) or ta.crossunder(close, short_exit))
inLong := false
inShort := false