ALMA 이동평균 교차 전략


생성 날짜: 2023-09-23 15:11:02 마지막으로 수정됨: 2023-09-23 15:11:02
복사: 0 클릭수: 1078
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

개요

이 전략은 Arnaud Legoux 이동 평균 ((ALMA) 을 사용하여 거래 신호를 판단합니다. ALMA는 전통적인 이동 평균에 대한 개선으로, 지연을 줄이고 곡선을 평평하게합니다. 전략은 빠른 ALMA 상의 느린 ALMA를 통과하여 구매 신호를 생성하고, 빠른 ALMA 아래의 느린 ALMA를 통과하여 판매 신호를 생성하며, 동시에 합성 교류 필터를 결합하여 안정적인 교차 신호를 형성합니다.

전략 원칙

이 전략의 핵심 지표와 거래 규칙은 다음과 같습니다.

  1. 빠른 ALMA: 개선을 잡기 위한 짧은 기간

  2. 느린 ALMA: 큰 추세를 판단하는 데 사용되는 긴 기간.

  3. 거래량 필터: 단기 평균량 위에 장기 평균량을 착용할 때 유효하다.

  4. 다중 신호: 빠른 ALMA에 느린 ALMA를 통과하고 교차량 필터링이 유효하다.

  5. 평도 신호: 빠른 ALMA 아래로 천천히 ALMA .

  6. 공백 신호: 빠른 ALMA 아래에서 느린 ALMA를 통과하고 교차량 필터링이 유효하다.

  7. 평평한 신호: 빠른 ALMA 위에 느린 ALMA .

이 전략은 간단하고 직관적이면서도 트렌드 판단, 브레이크 캡처 및 거래량 검증과 같은 여러 가지 기술 지표를 통합하여 비교적 안정적인 거래 시스템을 형성한다. 급속한 평행선의 조합은 트렌드 방향을 효과적으로 판단할 수 있다. ALMA 알고리즘의 사용은 거래에 대한 지연의 영향을 줄이고, 거래량 추가는 많은 불확실한 가짜 브레이크를 피한다.

우위 분석

전통적인 평행선 교차 전략에 비해 이 전략은 다음과 같은 장점이 있다.

  1. ALMA 알고리즘은 지연을 줄이고 신호 품질을 향상시킵니다.

  2. 수량 필터링은 가짜 돌파구를 방지하여 손실을 방지합니다.

  3. 그 다음에는 동향을 판단하고 반전 거래를 피하는 것입니다.

  4. 규칙은 간단하고 직관적이며, 쉽게 이해할 수 있습니다.

  5. 유연하게 조정할 수 있는 평균선 변수, 다른 시장에 적용된다.

  6. 자금 관리 설치는 합리적이고, 단독 손실을 제어할 수 있다.

  7. 평균선 변수를 최적화하여 전략 효과를 더욱 높일 수 있다.

  8. 전체적으로, 이 전략은 기존의 평균 교환 전략에 비해 안정성과 신호 품질을 향상시켰다.

위험 분석

이 전략은 장점이 많지만, 다음과 같은 위험도 있습니다.

  1. 평행선 전략은 본질적으로 흔들리는 시장의 오류에 취약하며, 여러 번의 손실을 초래한다.

  2. ALMA 알고리즘의 파라미터 설정은 정책 효과에 영향을 미칩니다.

  3. 거래량 증폭 효과는 거래 신호 판단을 오해할 수 있다.

  4. 하지만, 이 모든 것은 손실을 완전히 피할 수 없는 지연의 일부분이다.

  5. 파라메트릭스 (Parametrics) 최적화에는 과도한 적합성의 위험이 있습니다.

  6. 수요량이 이상하면 신호가 무효화된다.

  7. 기계 학습과 같은 알고리즘이 더 나은 결과를 얻을 수 있습니다.

  8. 수익 회수비 지표에 주의를 기울여 곡선이 너무 커지지 않도록하십시오.

최적화 방향

위와 같은 위험 요소를 고려하여, 이 전략은 다음과 같은 측면에서 최적화될 수 있습니다.

  1. ALMA 평균선 변수를 최적화하여 반응 감수성을 높인다.

  2. 다른 거래량 계산 방법을 시도해보세요.

  3. 단독 손실을 엄격하게 통제하는 손실 차단 전략을 도입하십시오.

  4. 다른 지표 구성과 결합하여 체화 거래 신호 시스템을 구축한다.

  5. 기계 학습 모듈을 추가하여 더 지능적인 신호 조정을 가능하게 한다.

  6. 다종족 배포, 전략적 분산.

  7. 자본관리 전략을 최적화하고, 시장에 맞는 포지션을 조정한다.

  8. “기능이 뛰어나서 잘 어울리지 않는” 전략 연구

요약하다

이 전략은 전체적으로 전통적인 평행선 교차 전략에 비해 ALMA 알고리즘과 거래량 검증을 통해 신호 품질과 안정성을 향상 시켰습니다. 그러나 거래 전략 최적화는 지속적인 과정이며, 위험에 대한 관심이 여전히 필요하며, 다차원적으로 전략을 강화하여 더 복잡한 시장 환경에 적응 할 수 있도록합니다.

전략 소스 코드
/*backtest
start: 2022-09-16 00:00:00
end: 2023-09-22 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/
// © Sarahann999
// Calculations for TP/SL based off: https://kodify.net/tradingview/orders/percentage-profit/
//@version=5
strategy("ALMA Cross", overlay=true)

//User Inputs
src= (close)
long_entry = input(true, title='Long Entry')
short_entry = input(true, title='Short Entry')

//Fast Settings
ALMA1 = input(100, "ALMA Lenghth 1", group= "ALMA Fast Length Settings")
alma_offset = input.float(defval=0.85, title='Arnaud Legoux (ALMA) - Offset Value', minval=0, step=0.01)
alma_sigma = input.int(defval=6, title='Arnaud Legoux (ALMA) - Sigma Value', minval=0)
Alma1 = ta.alma(src, ALMA1, alma_offset, alma_sigma)

//Slow Settings
ALMA2 = input(120, "ALMA Length 2", group = "ALMA Slow Length Settings")
alma_offset2 = input.float(defval=0.85, title='Arnaud Legoux (ALMA) - Offset Value', minval=0, step=0.01)
alma_sigma2 = input.int(defval=6, title='Arnaud Legoux (ALMA) - Sigma Value', minval=0)
Alma2 = ta.alma(src, ALMA2, alma_offset2, alma_sigma2)

//Volume
var cumVol = 0.
cumVol += nz(volume)
if barstate.islast and cumVol == 0
    runtime.error("No volume is provided by the data vendor.")
shortlen = input.int(5, minval=1, title = "Short Length", group= "Volume Settings")
longlen = input.int(10, minval=1, title = "Long Length")
short = ta.ema(volume, shortlen)
long = ta.ema(volume, longlen)
osc = 100 * (short - long) / long

//Define Cross Conditions
buy = ta.crossover(Alma1, Alma2)
sell = ta.crossunder(Alma1, Alma2)

//Calculate Take Profit Percentage
longProfitPerc = input.float(title="Long Take Profit", group='Take Profit Percentage',
     minval=0.0, step=0.1, defval=2) / 100
shortProfitPerc = input.float(title="Short Take Profit",
     minval=0.0, step=0.1, defval=2) / 100
     
// Figure out take profit price 1
longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)

// Make inputs that set the stop %  1
longStopPerc = input.float(title="Long Stop Loss", group='Stop Percentage',
     minval=0.0, step=0.1, defval=2.5) / 100
shortStopPerc = input.float(title="Short Stop Loss",
     minval=0.0, step=0.1, defval=2.5) / 100

// Figure Out Stop Price
longStopPrice  = strategy.position_avg_price * (1 - longStopPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortStopPerc)

//Define Conditions
buySignal = buy and osc > 0
     and strategy.position_size == 0

//sellSignal 
sellSignal = sell and osc > 0
     and strategy.position_size == 0

// Submit entry orders
if buySignal and long_entry
    strategy.entry(id="Long", direction=strategy.long, alert_message="Enter Long")
    alert(message="BUY Trade Entry Alert", freq=alert.freq_once_per_bar)
    
if sellSignal and short_entry
    strategy.entry(id="Short", direction=strategy.short, alert_message="Enter Short")
    alert(message="SELL Trade Entry Alert", freq=alert.freq_once_per_bar)
    
// Submit exit orders based on take profit price
if (strategy.position_size > 0)
    strategy.exit(id="Long TP/SL", limit=longExitPrice, stop=longStopPrice, alert_message="Long Exit 1 at {{close}}")
if (strategy.position_size < 0)
    strategy.exit(id="Short TP/SL", limit=shortExitPrice, stop=shortStopPrice, alert_message="Short Exit 1 at {{close}}")

//Draw
plot(Alma1,"Alma Fast", color=color.purple, style=plot.style_circles)
plot(Alma2,"Alma Slow", color=#acb5c2, style=plot.style_circles)