
이 전략은 간단한 이동 평균 크로스 및 이중 정지 기법을 사용하여 위험을 제어하고 수익 가능성을 높이는 것입니다. 이 전략은 중장기 거래에 적합하며 추세가 바뀌면 기회를 잡을 수 있습니다.
이 전략은 EMA와 WMA의 교차를 바탕으로 시장의 움직임을 판단한다. EMA가 WMA를 통과할 때, 더 많은 것을 하고, EMA가 WMA를 통과할 때, 더 많은 것을 하지 않는다.
매번 포지션을 개시할 때, 전략은 두 개의 중지 레벨을 설정한다. 첫 번째 중지 레벨은 포지션 개시 가격 + 20 포인트로 고정되며, 두 번째 중지 레벨은 포지션 개시 가격 + 40 포인트로 고정된다. 동시에 중지 레벨은 포지션 개시 가격 - 20 포인트로 고정된다.
가격이 첫 번째 정지 레벨을 만지면, 반의 지점을 평정한다. 나머지 지점은 계속 유지되고, 두 번째 정지 레벨을 추구하거나 상쇄된다.
모든 거래에는 세 가지 결과가 있습니다.
가격으로 인해 2%의 손실이 발생한다.
가격이 먼저 첫 번째 정지를 촉발하고, 반을 평행하고, 1%의 이익을 잠금하고, 그 다음 손실이 중단될 때까지 계속 작동하고, 최종적으로 매출 균형을 이루고, 0의 이익을 얻습니다.
가격이 첫 번째 스톱을 쏘아 올린 후 계속 움직이고, 두 번째 스톱을 쏘아 올리고, 결국 1% + 2% = 3%의 수익을 얻습니다.
이 두 개의 스톱 손실 전략의 가장 큰 장점은 위험을 제어 할 수 있으며, 큰 손실을 피할 수 있습니다. 시장 상황이 좋지 않을 때, 스톱 손실은 손실을 2% 이내에 제어 할 수 있습니다. 시장 상황이 좋으면 두 개의 스톱 레벨이 더 많은 돈을 얻을 수 있습니다.
단일 스톱 스톱 손실에 비해 이 전략은 세 가지 결과: 손실, 이익, 그리고 손실이 없는, 스톱 손실의 확률을 낮추었다. 스톱 손실에도 불구하고 최대 손실은 2%로 통제했다. 전통적인 스톱 스톱 손실 전략에 비해 이 쌍 스톱 스톱 손실 전략은 DD를 현저하게 낮추고 승률을 높였다.
또 다른 장점은 작동이 간단하다는 것입니다. EMA와 WMA는 널리 알려진 지표이며 이해하기 쉽습니다.
이 전략은 장점이 있지만, 위험도 있습니다.
우선, EMA와 WMA는 평균선 지표로서, 흔들리는 상황을 인식하는 능력이 약하다. 추세가 명확하지 않을 때, 잘못된 신호가 더 많이 발생하여 너무 자주 거래가 될 수 있다.
둘째, 고정된 스톱 스톱 손실 지점은 시장의 변동과 일치하지 않을 수 있습니다. 큰 변동이있을 때 스톱 스톱 손실이 뚫려 보호 기능을 수행 할 수 없습니다.
마지막으로, 이 전략은 갑작스러운 사건에 대응할 수 없으며, 중도 거래의 위험이 있습니다. 중요한 뉴스 사건이 발생하면, 시장은 급격히 상승하여, 막대기 스톱 라인을 직접 뚫고 큰 손실을 초래할 수 있습니다.
이 전략은 다음의 몇 가지 측면에서 더 개선될 수 있습니다.
입력 신호를 개선한다. EMA와 WMA보다 우수한 평균선 지표 또는 트렌드 지표를 시도하여 신호 품질을 향상시킬 수 있다.
동적으로 스톱스톱스피드를 조정한다. ATR, 모바일 스톱스피드 등에 따라 스톱스톱스피드를 실시간으로 조정할 수 있어 시장에 동적으로 따라갈 수 있다.
필터링 조건을 추가한다. 금강전에 거래량이나 부지표의 확인이 추가되어, 을 피한다. 또한 주요 이벤트 캘린더에 따라 거래 여부를 선택할 수 있다.
포지션 관리를 최적화한다. 재원 관리 원칙에 따라 거래 당 특정 포지션 크기를 최적화할 수 있다.
이 전략은 전반적으로 간단하고 실용적인 트렌드 추적 전략이다. 이 전략은 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)