파동 추세를 기반으로 한 양적 거래 전략


생성 날짜: 2023-11-28 16:17:31 마지막으로 수정됨: 2023-11-28 16:17:31
복사: 1 클릭수: 715
avatar of ChaoZhang ChaoZhang
1
집중하다
1619
수행원

파동 추세를 기반으로 한 양적 거래 전략

개요

이 전략은 파동 트렌드 지표에 기초하여 설계되었다. 파동 트렌드 지표는 가격 채널과 평균을 결합하여 시장 트렌드를 효과적으로 식별하여 구매 및 판매 신호를 발송할 수 있다. 이 전략은 파동 트렌드의 오버 구매 오버 판매 라인을 설정하여 지표 라인이 핵심 라인을 뚫었을 때 구매 또는 판매 작업을 수행한다.

전략 원칙

  1. 가격의 삼각형 이동 평균 ap, 그리고 ap의 지수 이동 평균 esa 을 계산한다.
  2. ap와 esa의 절대적 차이의 지수 이동 평균을 계산한다.
  3. 변동 지표가 주어집니다.
  4. c의 n2주기 평균을 계산하여, 파동 경향 지표 wt1을 얻는다.
  5. 오버 바이 라인과 오버 세일 라인을 설정하십시오.
  6. wt1에 오버세일 라인을 통과하면 더 많이 하고, wt1 아래에서 오버 바이 라인을 통과하면 더 적게 한다.

우위 분석

  1. 파동 트렌드 지표는 오버 바이 오버 셀 라인을 돌파하여 시장의 트렌드의 전환점을 효과적으로 포착하여 구매 및 판매 결정을 정확하게 내릴 수 있습니다.
  2. 가격 통로와 평평선 이론과 결합하여 지표는 빈번한 신호를 생성하지 않는다.
  3. 선택 가능한 시간 주기를 사용하며, 여러 거래 품종에 적합하다.
  4. 지표의 매개 변수를 조정할 수 있고, 사용자 경험도 좋았습니다.

위험과 해결

  1. 큰 흔들림 시장에서, 지표는 잘못된 신호를 생성할 수 있으며, 위험은 크다. 포지션 보유 기간을 적절히 단축하거나, 다른 지표 필터링 신호와 결합할 수 있다.
  2. 포지션 관리 및 중지 메커니즘을 고려하지 않고 손실 위험이 있습니다. 포지션 크기와 이동 중지를 설정하여 위험을 제어 할 수 있습니다.

최적화 방향

  1. KDJ, MACD 등의 다른 지표 포트폴리오와 함께 사용하는 것을 고려하여 거래 포트폴리오를 형성하여 전략의 안정성을 향상시킬 수 있습니다.
  2. 자동 손실 제도를 설계할 수 있다. 예를 들어, 추적 손실, 변속 라인 손실 등이 단편 손실을 제어한다.
  3. 딥러닝 알고리즘과 결합하여 데이터 트레이닝을 통해 자동으로 매개 변수를 최적화하여 전략 승률을 높일 수 있습니다.

요약하다

이 전략은 파동 트렌드 지표에 기반하여 과매매 과매매 상황을 판단하는 트렌드를 식별하는 효과적인 트렌드 추적 전략이다. 단기 지표에 비해 파동 트렌드 지표는 잘못된 신호를 줄이고 안정성을 향상시킵니다. 포지션 관리와 스톱과 결합하면 이 전략은 안정적인 수익을 얻을 수 있습니다. 매개 변수 및 모델 조정으로 전략 효과를 더욱 향상시킬 수 있습니다.

전략 소스 코드
/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-27 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@author SoftKill21
//@version=4

strategy(title="WaveTrend strat", shorttitle="WaveTrend strategy")
n1 = input(10, "Channel Length")
n2 = input(21, "Average Length")
Overbought = input(70, "Over Bought")
Oversold = input(-30, "Over Sold ")

// BACKTESTING RANGE
 
// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2001, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2020, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
DST = 1 //day light saving for usa
//--- Europe
London = iff(DST==0,"0000-0900","0100-1000")
//--- America
NewYork = iff(DST==0,"0400-1500","0500-1600")
//--- Pacific
Sydney = iff(DST==0,"1300-2200","1400-2300")
//--- Asia
Tokyo = iff(DST==0,"1500-2400","1600-0100")

//-- Time In Range
timeinrange(res, sess) => time(res, sess) != 0

london = timeinrange(timeframe.period, London)
newyork = timeinrange(timeframe.period, NewYork)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true //and (london or newyork)

ap = hlc3 
esa = ema(ap, n1)
d = ema(abs(ap - esa), n1)
ci = (ap - esa) / (0.015 * d)
tci = ema(ci, n2)
 
wt1 = tci
wt2 = sma(wt1,4)

plot(0, color=color.gray)
plot(Overbought, color=color.red)
plot(Oversold, color=color.green)

plot(wt1, color=color.green)
longButton = input(title="Long", type=input.bool, defval=true)
shortButton = input(title="Short", type=input.bool, defval=true)

if(longButton==true)
    strategy.entry("long",1,when=crossover(wt1,Oversold) and time_cond)
    strategy.close("long",when=crossunder(wt1, Overbought))
    
if(shortButton==true)
    strategy.entry("short",0,when=crossunder(wt1, Overbought) and time_cond)
    strategy.close("short",when=crossover(wt1,Oversold))

//strategy.close_all(when= not (london or newyork),comment="time")
if(dayofweek == dayofweek.friday)
    strategy.close_all(when= timeinrange(timeframe.period, "1300-1400"), comment="friday")