이중 취득 이동 평균 크로스오버 양적 전략

저자:차오장, 날짜: 2023-11-14 16:04:33
태그:

img

전반적인 설명

이 전략은 위험을 제어하고 수익성을 높이기 위해 간단한 이동 평균 크로스오버 및 이중 수익 기술을 사용합니다. 중장기 거래 및 트렌드 변화 중 기회를 포착하는 데 적합합니다.

전략 논리

이 전략은 시장 추세를 결정하기 위해 EMA와 WMA의 교차를 기반으로합니다. EMA가 WMA를 넘을 때 길고, EMA가 WMA를 넘을 때 짧습니다.

진입 시, 두 가지 취득 수준이 설정됩니다. 첫 번째 취득은 입시 가격 + 20 pips에 고정되며, 두 번째 취득은 입시 가격 + 40 pips에 고정됩니다. 한편, 스톱 로스는 입시 가격 - 20 pips에 배치됩니다.

가격이 첫 번째 수익을 얻으면 지점의 절반을 닫습니다. 나머지 지점은 두 번째 수익을 얻거나 중단 될 때까지 계속됩니다.

각 거래에 대해 세 가지 가능한 결과가 있습니다.

  1. 가격이 스톱 로즈를 타면 2%의 손실을 직접 받습니다.

  2. 먼저 가격 타격, 먼저 수익, 절반의 포지션을 닫고 1%의 수익을 얻습니다.

  3. 첫 번째 취득을 달성한 후, 가격은 계속 실행되고 두 번째 취득을 달성하여 1% + 2% = 3%의 총 이익으로 끝납니다.

이점 분석

이 이중 취득 전략의 가장 큰 장점은 위험을 제어하고 큰 단일 손실을 피한다는 것입니다. 시장이 반대 방향으로 움직일 때 최대 손실을 2% 내에 제한합니다. 두 가지 취득은 트렌드가 예상대로 갈 때 더 큰 이익을 허용합니다.

단일 취득/손실 중지와 비교하여, 이 전략은 손실, 승리 또는 손익분기점을 줄이는 세 가지 결과를 가지고 있습니다. 중지 손실의 확률을 줄여줍니다. 중단 된 경우에도 최대 손실은 2%로 제한됩니다. 전통적인 전략과 비교하면 이중 취득 메커니즘은 DD를 크게 줄이고 승리율을 향상시킵니다.

또 다른 장점은 단순성입니다. EMA와 WMA는 이해하기 쉬운 잘 알려진 지표입니다. 이윤 / 손실 중지 논리는 모니터링하기가 간단합니다. 이 전략은 초보자가 쉽게 채택 할 수 있습니다.

위험 분석

이 전략의 장점에도 불구하고 위험성도 있습니다.

첫째, 이동 평균 지표로서, EMA와 WMA는 시장 범위 식별에 상대적으로 약한 능력을 가지고 있습니다. 추세가 불분명하면 너무 많은 잘못된 신호가 발생할 수 있으며, 과도한 거래로 이어질 수 있습니다.

둘째, 고정된 취득/손실 중지 수준은 시장 변동에 적응하지 못할 수 있습니다. 그들은 높은 변동 기간 동안 쉽게 침투 할 수 있으며, 그들을 비효율화 할 수 있습니다.

마지막으로, 전략은 예상치 못한 사건에 대응할 수 없으며, 함락 될 위험이 있습니다. 주요 뉴스 이벤트는 수익/손실 수준을 직접적으로 위반하여 엄청난 손실을 초래하는 거대한 가격 격차를 만들 수 있습니다.

최적화 방향

전략의 더 많은 최적화를 위해 몇 가지 측면이 있습니다:

  1. 입시 신호를 개선하십시오. 더 높은 품질의 신호를 생성하기 위해 EMA와 WMA보다 더 나은 이동 평균 또는 트렌드 지표를 테스트하십시오.

  2. 동적으로 취득/손실 중지 조정 ATR, 후속 중지 손실 등과 같은 방법을 사용하여 수익/손실 수준을 시장에 적응합니다.

  3. 필터를 추가합니다. 트래프를 피하기 위해 크로스오버 전에 볼륨 또는 2차 지표 확인을 요구합니다. 또한 주요 이벤트 주변에서 거래하는지 고려하십시오.

  4. 포지션 크기를 최적화하고 자본 관리 규칙에 따라 포지션 크기를 조정합니다.

결론

요약하자면, 이것은 간단하고 실용적인 트렌드 다음 전략이다. 엔트리를 위해 EMA와 WMA 크로스오버를 활용하고 위험을 제어하기 위해 이중 수익을 취한다. 전통적인 전략에 비해 높은 승률과 낮은 위험을 가지고 있다. 물론, 지표와 이익/손실 설정의 한계도 주의해야 한다. 추가 최적화는 전략을 더욱 견고하게 할 수 있다.


/*backtest
start: 2023-11-06 00:00:00
end: 2023-11-13 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("FS ATR & PS (MA)", overlay=true)

// Strategy
Buy  = input(true)
Sell = input(true)

// Time Period
start_year   = input(title='Start year'   ,defval=2019)
start_month  = input(title='Start month'  ,defval=1)
start_day    = input(title='Start day'    ,defval=1)
start_hour   = input(title='Start hour '  ,defval=0)
start_minute = input(title='Start minute' ,defval=0)
end_time     = input(title='set end time?',defval=false)
end_year     = input(title='end year'     ,defval=2019)
end_month    = input(title='end month'    ,defval=12)
end_day      = input(title='end day'      ,defval=31)
end_hour     = input(title='end hour'     ,defval=23)
end_minute   = input(title='end minute'   ,defval=59)

// MA
ema_period   = input(title='EMA period',defval=10)
wma_period   = input(title='WMA period',defval=20)
ema = ema(close,ema_period)
wma = wma(close,wma_period)

// Entry Condition
longCondition  = 
 crossover(ema,wma) and Buy and
 nz(strategy.position_size) == 0 and
 time > timestamp(start_year, start_month, start_day, start_hour, start_minute) and
 (end_time?(time < timestamp(end_year, end_month, end_day, end_hour, end_minute)):true)
 
shortCondition = 
 crossunder(ema,wma) and Sell and
 nz(strategy.position_size) == 0 and
 time > timestamp(start_year, start_month, start_day, start_hour, start_minute) and
 (end_time?(time < timestamp(end_year, end_month, end_day, end_hour, end_minute)):true)

// Exit Condition
a = input(20)*10
b = input(40)*10
c = a*syminfo.mintick
d = b*syminfo.mintick

long_stop_level     = float(na)
long_profit_level1  = float(na)
long_profit_level2  = float(na)
long_even_level     = float(na)

short_stop_level    = float(na)
short_profit_level1 = float(na)
short_profit_level2 = float(na)
short_even_level    = float(na)

long_stop_level     := longCondition  ? close - c : long_stop_level     [1]
long_profit_level1  := longCondition  ? close + c : long_profit_level1  [1]
long_profit_level2  := longCondition  ? close + d : long_profit_level2  [1]
long_even_level     := longCondition  ? close + 0 : long_even_level     [1]

short_stop_level    := shortCondition ? close + c : short_stop_level    [1]
short_profit_level1 := shortCondition ? close - c : short_profit_level1 [1]
short_profit_level2 := shortCondition ? close - d : short_profit_level2 [1]
short_even_level    := shortCondition ? close + 0 : short_even_level    [1] 

// Position Sizing
Risk = input(defval=10, title="Risk per trade%", step=1, minval=0, maxval=100)/100
size  = 1

// Strategy
if longCondition
    strategy.entry("Buy"  , strategy.long, qty=size)
    strategy.exit ("Exit1", stop=long_stop_level, limit=long_profit_level1, qty=size/2)
    strategy.exit ("Exit2", stop=long_stop_level, limit=long_profit_level2)
    
if shortCondition
    strategy.entry("Sell" , strategy.short, qty=size)
    strategy.exit ("Exit3", stop=short_stop_level, limit=short_profit_level1, qty=size/2)
    strategy.exit ("Exit4", stop=short_stop_level, limit=short_profit_level2)
    
// Plot
plot(strategy.position_size <= 0 ? na : long_stop_level    , color=#dc143c, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size <= 0 ? na : long_profit_level1 , color=#00ced1, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size <= 0 ? na : long_profit_level2 , color=#00ced1, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size <= 0 ? na : long_even_level    , color=#ffffff, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size >= 0 ? na : short_stop_level   , color=#dc143c, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size >= 0 ? na : short_profit_level1, color=#00ced1, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size >= 0 ? na : short_profit_level2, color=#00ced1, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size >= 0 ? na : short_even_level   , color=#ffffff, style=plot.style_linebr, linewidth=1)
plot(ema,color=#00ced1)
plot(wma,color=#dc143c)






더 많은