빠르게 움직이는 평균과 느리게 움직이는 평균을 기반으로 한 양적 거래 전략


생성 날짜: 2024-01-24 14:49:29 마지막으로 수정됨: 2024-01-24 14:49:29
복사: 0 클릭수: 484
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

빠르게 움직이는 평균과 느리게 움직이는 평균을 기반으로 한 양적 거래 전략

개요

이중 이동 평균 브레이크아웃 전략 (Dual Moving Average Breakout Strategy) 은 빠른 이동 평균과 느린 이동 평균을 기반으로 한 양적 거래 전략이다. 그것은 두 개의 다른 주기의 지수 이동 평균 (EMA) 을 거래 신호로 사용한다. 빠른 이동 평균 상에서 느린 이동 평균을 통과하면 구매 신호가 발생하고 빠른 이동 평균 아래에서 느린 이동 평균을 통과하면 판매 신호가 발생한다.

전략 원칙

이 전략의 핵심 논리는 빠른 이동 평균선과 느린 이동 평균선을 사용하여 거래 신호를 형성하는 것이다. 전략은 빠른 이동 평균선 주기 12일, 느린 이동 평균선 주기 26일로 정의한다. 계산 방법은 다음과 같다:

  1. 2 일 주기의 가격 배열의 지수 이동 평균 AP를 계산합니다
  2. AP를 기반으로 빠른 이동 평균을 계산합니다.
  3. AP를 기반으로 느린 이동 평균을 계산 Slow, 주기 26일
  4. 더 빠른 이동 평균선과 느린 이동 평균선을 비교:
    1. 패스트에 슬로우를 착용하면 다중 헤드 신호
    2. 패스트 아래 슬로우를 통과할 때 공중 신호
  5. 가격과 이동 평균의 관계를 결합하여 특정 거래 신호를 판단합니다.
    1. 멀티 헤드 신호:Fast>Slow && AP>Fast
    2. 공허 헤드 신호:Fast

빠른 이동 평균선과 느린 이동 평균선의 교차로 시장의 추세를 판단하고 거래 신호를 생성하는 전형적인 쌍 이동 평균선 전략이다.

우위 분석

이중 이동 평균선 돌파 전략은 다음과 같은 장점이 있다:

  1. 전략의 논리는 간단하고 명확하며 이해하기 쉽고 구현하기 쉽습니다.
  2. 이동 평균 회기를 조정하여 다양한 시장 환경에 적응할 수 있습니다.
  3. 동시에 더 많은 코카이드를 하고 더 많은 수익을 얻을 수 있습니다.
  4. 가격과 이동평균관계를 결합하여 보다 정확한 거래 신호를 발송할 수 있다.
  5. 이동평균선은 약간의 지연성을 가지고 있으며, 시장의 소음을 효과적으로 제거할 수 있다.

위험 분석

이중 이동평균선 돌파전략에는 위험도 있습니다.

  1. 시장이 불안정할 때, 더 많은 잘못된 신호가 나타납니다.
  2. 이중 이동평균형 전략은 곡선 적합성을 형성하기 쉽고 시장 구조적 변화를 무시합니다.
  3. 기술 지표에만 의존하는 것은 가짜 돌파구에 취약하며 손실 위험이 있습니다.

해결책:

  1. 이동 평균의 주기를 최적화하여 현재 시장 상황에 더 적합하게 만듭니다.
  2. 거래량 확인 신호와 같은 다른 지표와 결합하여 가짜 돌파구를 피하십시오.
  3. 트렌드 추적 전략을 적용하여 수익률을 조절하고 위험을 줄이십시오.

최적화 방향

이중 이동 평행선 돌파 전략은 다음과 같은 측면에서 최적화될 수 있다:

  1. 시장의 변화에 적응하기 위해 더 적합한 이동평균 주기적 조합을 찾아내기
  2. 거래량 증가와 같은 지표에 대한 신호 필터링, 거래 신호의 유효성을 보장
  3. 시장 구조 지표와 결합하여 트렌드를 식별하고 평균 주기 변수를 조정합니다.
  4. 동적 이동 평균을 사용하면 시장 변화에 따라 주기적으로 자동으로 조정할 수 있습니다.
  5. 손해배상 전략과 함께 위험을 효과적으로 통제하고 자금을 보호합니다.

요약하다

쌍용 이동평균선 돌파 전략은 간단하고 실용적인 정량화 거래 전략이다. 전략 논리가 간단하고 구현하기 쉬운 장점이 있지만, 시장 적응성 문제도 있다. 우리는 파라미터 최적화, 신호 필터링, 위험 제어 등의 방법을 통해 안정적으로 수익을 창출하는 거래 시스템으로 만들 수 있다.

전략 소스 코드
/*backtest
start: 2023-01-17 00:00:00
end: 2024-01-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("CDC Action Zone V.2", overlay=true)

// CDC ActionZone V2 29 Sep 2016
// CDC ActionZone is based on a simple 2MA and is most suitable for use with medium volatility market
// 11 Nov 2016 : Ported to Trading View with minor UI enhancement
LSB = input(title="Long/Short", defval="Long only", options=["Long only", "Short only" , "Both"])
src = input(title="Data Array",type=input.source,defval=ohlc4)
prd1=input(title="Short MA period", type=input.integer,defval=12)
prd2=input(title="Long MA period",type=input.integer,defval=26)
AP = ema(src,2)
Fast = ema(AP,prd1)
Slow = ema(AP,prd2)


Bullish = Fast>Slow
Bearish = Fast<Slow

Green = Bullish and AP>Fast
Red = Bearish and AP<Fast
Yellow = Bullish and AP<Fast
Blue = Bearish and AP>Fast

Buy = Bullish and Bearish[1]
Sell = Bearish and Bullish[1]


alertcondition(Buy,"Buy Signal","Buy")
alertcondition(Sell,"Sell Signal","Sell")


//Plot

l1=plot(Fast,"Fast", linewidth=1,color=color.red)
l2=plot(Slow,"Slow", linewidth=2,color=color.blue)
bcolor = Green ? color.lime : Red ? color.red : Yellow ? color.yellow : Blue ? color.blue : na
barcolor(color=bcolor)
fill(l1,l2,bcolor)

// === INPUT BACKTEST RANGE ===
FromYear  = input(defval = 2000, title = "From Year", minval = 1920)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 1921)
ToMonth   = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 31, title = "To Day", minval = 1, maxval = 31)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"


if LSB == "Long only" and Buy and window()
    strategy.entry("L",true)
if LSB == "Long only" and Sell and window()
    strategy.close("L",qty_percent=100,comment="TP Long")
if LSB == "Both" and Buy and window()
    strategy.entry("L",true)
if LSB == "Both" and Sell and window()
    strategy.entry("S",false)
if LSB == "Short only" and Sell and window()
    strategy.entry("S",false)
if LSB == "Short only" and Buy and window()
    strategy.close("S",qty_percent=100,comment="TP Short")