더블 스톱프로핏과 더블 스톱로스 무빙스톱로스 양적전략


생성 날짜: 2024-01-19 15:07:04 마지막으로 수정됨: 2024-01-19 15:07:04
복사: 3 클릭수: 598
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

더블 스톱프로핏과 더블 스톱로스 무빙스톱로스 양적전략

개요

이 전략은 두 개의 스톱, 두 개의 스톱, 그리고 이동 스톱을 기반으로 한 비트코인 양적 거래 전략이다. 이 전략은 EMA와 WMA의 교차로 입문 신호로, 두 개의 스톱, 두 개의 스톱의 위험 관리 방법을 채택하고, 첫 번째 스톱이 도달한 후, 이동 스톱을 사용하여 수익을 부분적으로 보장하고, 더 많은 돈을 추구하는 것을 계속한다.

전략 원칙

EMA가 위쪽에서 WMA를 입으면 더 많은 진입을 하고, EMA가 위쪽에서 아래쪽에서 WMA를 입으면 공백 진입을 한다.

정지면, 두 개의 정지점을 설정합니다. 첫 번째 정지점은 입구점보다 20점, 두 번째 정지점은 입구점보다 40점으로 설정합니다.

스톱피스 측면에서는, 마찬가지로 두 개의 스톱포트를 설정합니다. 첫 번째 스톱포트는 엔트리 포인트 아래 20개의 포인트로 설정하고, 두 번째 스톱포트는 엔트리 포인트 자체로 설정합니다.

가격이 첫 번째 스톱포인트에 도달했을 때, 50%의 지위를 평정하고, 스톱포인트를 입점으로 이동하여 두 번째 스톱포인트의 더 많은 수익을 추구하십시오.

이 전략은 세 가지 결과를 낳을 수 있습니다.

  1. 가격의 2% 손실이 발생하고, 그 다음에는 가격의 2% 손실이 발생한다.
  2. 첫 번째 스톱포인트에 도달하여 1%의 수익을 얻었고, 두 번째 스톱포인트에 도달하여 1%의 수익을 얻었습니다.
  3. 가격이 첫 번째 정지점을 만져 1%의 수익을 얻었고, 두 번째 정지점을 만져 3%의 수익을 얻었습니다.

우위 분석

이 전략의 가장 큰 장점은 리스크 관리 시스템이다. 이중 스톱 또는 이중 스톱을 설정함으로써, 일부 수익을 얻은 후, 이동 스톱을 사용하여 수익을 잠금하여 더 많은 수익을 추구할 수 있다. 이것은 수익성을 크게 향상시킬 수 있다.

또 다른 장점은, 이 전략은 단일 거래의 결과를 세 가지로 분할하여 단일 손실의 확률을 낮추고 전체 수익을 더 평평하게 만든다. 일반적인 전략은 두 가지 결과만 있고, 2%를 잃거나 2%보다 큰 수익을 얻는다. 이 전략은 각각 손실 2%를 얻고, 1%를 얻고, 3%를 얻는다. 이것은 또한 꼬리 위험을 더 잘 통제한다.

위험 분석

이 전략의 위험은 주로 스톱포인트의 설정에서 비롯된다. 스톱포인트의 거리는 너무 느리고, 단일 손실이 너무 커질 수 있다. 스톱포인트의 거리는 너무 좁아서, 시장 소음에 의해 타격될 수 있다. 이것은 다양한 품종의 특성과 변동률에 따라 적절한 스톱포인트를 설정할 필요가 있다.

또 다른 위험은 첫 번째 정지점 이후에도 지분을 보유한 부분에서 손실 위험이 있습니다. 손실이 첫 번째 정지점의 이익을 초과하면 일부 또는 모든 이익을 상쇄합니다. 이윤을 잠금하기 위해 이동 정지를 엄격하게 수행해야합니다.

최적화 방향

이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.

  1. 다양한 변수 조합을 테스트하여 최적의 변수 설정을 찾습니다. 예를 들어, 15 점, 25 점의 스톱 스톱 손실 거리를 테스트 할 수 있습니다.

  2. KDJ, MACD 등과 같은 다른 지표 조합의 지표 신호를 시도하여 진출을 결정하십시오.

  3. 첫 번째 정지점 평점 포지션 비율을 최적화하여 50%가 적합하거나 30% 또는 70%가 더 좋습니다.

  4. 이동 상쇄 손실의 추적 속도 설정을 테스트하여 수익을 보장하면서 손실 공간을 최대한 줄이는 것을 보장합니다.

요약하다

이 전략은 전체적으로 매우 안정적입니다. 이중 스톱, 이중 스톱 및 이동 스톱을 통해 수익 수준을 크게 향상시키고 꼬리 위험을 줄일 수 있습니다. 최적화 할 수있는 공간도 넓고, 파라미터 조정 및 지표 조합을 통해 더 나은 효과를 얻을 수 있습니다.

전략 소스 코드
/*backtest
start: 2024-01-11 00:00:00
end: 2024-01-18 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("SL1 Pips after TP1 (MA)", commission_type=strategy.commission.cash_per_order, overlay=true)

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

// Date Range
start_year    = input(title='Start year'   ,defval=2020)
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
buy =
 crossover(ema,wma) and
 nz(strategy.position_size) == 0 and Buy
 
sell =
 crossunder(ema,wma) and
 nz(strategy.position_size) == 0 and Sell

// Pips
pip = input(20)*10*syminfo.mintick

// Trading parameters //
var bool  LS  = na
var bool  SS  = na
var float EP  = na
var float TVL = na
var float TVS = na
var float TSL = na
var float TSS = na
var float TP1 = na
var float TP2 = na
var float SL1 = na
var float SL2 = na

if buy or sell and strategy.position_size == 0
    EP  := close
    SL1 := EP - pip     * (sell?-1:1)
    SL2 := EP - pip     * (sell?-1:1)
    TP1 := EP + pip     * (sell?-1:1)
    TP2 := EP + pip * 2 * (sell?-1:1) 
   
// current trade direction    
LS := buy  or strategy.position_size > 0
SS := sell or strategy.position_size < 0

// adjust trade parameters and trailing stop calculations
TVL := max(TP1,open) - pip[1]
TVS := min(TP1,open) + pip[1]
TSL := open[1] > TSL[1] ? max(TVL,TSL[1]):TVL 
TSS := open[1] < TSS[1] ? min(TVS,TSS[1]):TVS

if LS and high > TP1
    if open <= TP1
        SL2:=min(EP,TSL)
    
if SS and low < TP1
    if open >= TP1
        SL2:=max(EP,TSS)

// Closing conditions
close_long  = LS and open < SL2
close_short = SS and open > SL2

// Buy
strategy.entry("buy"  , strategy.long, when=buy and not SS)
strategy.exit ("exit1", from_entry="buy", stop=SL1, limit=TP1, qty_percent=1)
strategy.exit ("exit2", from_entry="buy", stop=SL2, limit=TP2)

// Sell
strategy.entry("sell" , strategy.short, when=sell and not LS)
strategy.exit ("exit3", from_entry="sell", stop=SL1, limit=TP1, qty_percent=1)
strategy.exit ("exit4", from_entry="sell", stop=SL2, limit=TP2)

// Plots
a=plot(strategy.position_size >  0 ? SL1 : na, color=#dc143c, style=plot.style_linebr)
b=plot(strategy.position_size <  0 ? SL1 : na, color=#dc143c, style=plot.style_linebr) 
c=plot(strategy.position_size >  0 ? TP1 : na, color=#00ced1, style=plot.style_linebr) 
d=plot(strategy.position_size <  0 ? TP1 : na, color=#00ced1, style=plot.style_linebr) 
e=plot(strategy.position_size >  0 ? TP2 : na, color=#00ced1, style=plot.style_linebr) 
f=plot(strategy.position_size <  0 ? TP2 : na, color=#00ced1, style=plot.style_linebr) 
g=plot(strategy.position_size >= 0 ? na  : EP, color=#ffffff, style=plot.style_linebr) 
h=plot(strategy.position_size <= 0 ? na  : EP, color=#ffffff, style=plot.style_linebr) 

plot(ema,title="ema",color=#fff176)
plot(wma,title="wma",color=#00ced1)