저자:차오장, 날짜: 2024-01-19 15:07:04
태그:

img

전반적인 설명

이것은 이중 취득, 이중 스톱 손실 및 후속 스톱 손실에 기반한 비트코인 양적 거래 전략이다. EMA와 WMA 크로스오버를 입구 신호로 사용하고, 이중 취득 및 이중 스톱 손실 위험 관리 방법론을 채택하고, 첫 번째 취득이 달성 된 후 후속 스톱 손실을 적용하여 더 큰 이익을 추구하면서 부분적 이익을 잠금합니다.

전략 논리

EMA가 WMA를 밑에서 넘어서면 긴 입문, WMA를 위로부터 넘어서면 짧은 입문

이윤 측면에서는 이윤을 취하는 두 가지 목표가 있습니다. 첫 번째 이윤은 입시 가격보다 20 pips 높고 두 번째 이윤은 입시 가격보다 40 pips 높습니다.

스톱 로스 측면에서는 두 개의 스톱 로스도 있습니다. 첫 번째 스톱 로스는 엔트리 가격보다 20 피프 아래로 설정되며 두 번째 스톱 로스는 엔트리 가격 자체로 설정됩니다.

첫 번째 영업이익이 발생하면, 지점의 50%가 닫히고, 영업이익을 확보하기 위해 엔트리 가격에 Stop Loss을 추적하고, 두 번째 영업이익 목표에서 더 큰 수익을 추구합니다.

따라서 각 거래에 대해 세 가지 가능한 결과가 있을 수 있습니다.

  1. 먼저 가격에 스톱 로스를 맞으면 자본의 2%를 잃게 됩니다.
  2. 먼저 가격 타격이 발생하면 1%의 이익이 발생하고, 그 다음 두 번째 스톱 손실이 발생하면 1%의 이익이 발생합니다.
  3. 먼저 가격 타격, 먼저 수익을 취하고 1%의 수익을 얻습니다. 계속 실행하고 두 번째 수익을 취하고 3%의 수익을 얻습니다.

이점 분석

이 전략의 가장 큰 장점은 위험 관리 방법론에 있다. 이중 취득 이익과 이중 중지 손실을 설정함으로써, 첫 번째 취득 이익이 달성 된 후 부분 수익을 잠금 할 수 있으며, 더 큰 이익을 계속 추구 할 수 있습니다. 이것은 수익성을 크게 향상시킬 수 있습니다.

또 다른 장점은 하나의 거래를 가능한 3가지 결과로 나누는 것으로 최대 손실의 확률을 낮추고 전체 수익을 더 일관되게 한다는 것입니다. 일반적인 전략은 두 가지 결과만을 가지고 있습니다. 또는 2%의 스톱 손실을 달성하거나 2% 이상의 이득을 얻습니다. 이 전략은 3 가지 결과를 가지고 있습니다.

위험 분석

이 전략의 주요 위험은 스톱 로스 설정에서 비롯된다. 스톱 로스 거리가 너무 넓다면, 그것은 과대 한 단일 거래 손실로 이어질 수 있다. 스톱 로스 거리가 너무 좁으면, 시장 소음으로 인해 조기에 중단 될 수 있다. 적절한 스톱 로스 거리는 다른 거래 도구의 특성 및 변동성에 따라 설정되어야 한다.

또 다른 위험은 첫 번째 취득 후 남은 위치가 여전히 손실 위험을 초래한다는 것입니다. 후속 손실이 첫 번째 취득을 초과하면 실현 된 이익의 일부 또는 전부를 상쇄합니다. 이것은 잠금 된 이익을 보호하기 위해 정지 손실을 엄격히 추적하여 해결해야합니다.

최적화 방향

다음 영역은 전략에 최적화 될 수 있습니다:

  1. 최적의 매개 변수를 찾기 위해 다른 매개 변수 조합을 테스트하십시오. 예를 들어 15 pips, 25 pips를 테스트하고 수익 / 스톱 손실 거리를 취하십시오.

  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)


더 많은