라지 베어 기반의 웨이브 트렌드 트레이딩 전략

저자:차오장, 날짜: 2023-12-19 12:07:14
태그:

img

전반적인 설명

이것은 LazyBear의 웨이브 트렌드 지표에 기반한 거래 전략입니다. 이 전략은 가격 변동의 웨이브 트렌드를 계산하여 시장 정서를 파악하고 그에 따라 장기 및 단기 결정을 내립니다.

전략 논리

이 전략의 핵심은 라지 베어의 웨이브 트렌드 지표이다. 먼저 평균 가격 (AP), 그 다음 AP (ESA) 의 기하급수적인 이동 평균 및 절대 가격 움직임 (D) 을 계산한다. ESA와 D를 기반으로 전략은 변동 지수 (CI) 를 계산하고, 그 다음 기하급수적인 이동 평균으로 유입하여 웨이브 트렌드 라인 (WT) 을 생성한다. WT는 간단한 이동 평균을 사용하여 WT1과 WT2로 처리된다. WT1이 WT2를 넘을 때 황금 십자가를 트리거하고 길게 간다. WT1이 WT2를 넘을 때 죽음의 십자가를 트리거하고 짧게 간다.

이점 분석

이것은 매우 간단하지만 실용적인 추세에 따른 전략입니다. 주요 장점은 다음과 같습니다.

  1. 물가 트렌드 지표에 근거하여 가격 추세와 시장 정서를 명확하게 파악합니다.
  2. WT 라인의 황금/죽음 십자가에 기초한 긴/단순으로 가는 간단한 거래 논리
  3. 다른 사이클에 대한 WT의 감도를 조정할 수 있는 커스터마이징 가능한 매개 변수
  4. 거래 시간 창과 같은 추가 필터를 추가할 수 있는 유연성

위험 분석

이 전략에는 몇 가지 위험이 있습니다.

  1. 트렌드를 따르는 전략으로서, 범위를 제한하는 시장에서 많은 잘못된 신호를 생성할 수 있습니다.
  2. WT 의 지연 특성 은 회전 을 놓칠 수 있다
  3. 기본 매개 변수는 모든 제품과 주기에 적합하지 않을 수 있습니다.
  4. 스톱 로스 메커니즘이 없는데, 보유 기간은 매우 길 수 있습니다.

주요 해결책은 다음과 같습니다.

  1. WT의 감수성을 조정하기 위해 매개 변수를 최적화
  2. 거짓 신호를 피하기 위해 확인을 위한 다른 지표를 추가합니다.
  3. 스톱 로스를 사용 하 여 수익을 취
  4. 일일 거래 또는 포지션 제한

최적화 방향

더 많은 최적화를 할 수 있습니다.

  1. 더 나은 민감성 또는 안정성을 위해 WT 매개 변수를 최적화
  2. 사이클에 따라 다른 매개 변수 집합을 사용
  3. 부피, 변동성 같은 지표를 추가하여 확인합니다
  4. 스톱 로스를 추가하고 이윤을 취합니다.
  5. 피라미드, 그리드 트레이딩과 같은 거래 논리를 풍부하게
  6. 기계 학습을 사용하여 더 나은 기능과 규칙을 탐구하십시오.

요약

요약하자면, 이것은 매우 간단하고 실용적인 파동 추종 전략이다. 가격 변동의 파동 추세를 모델링함으로써, WT의 황금 십자가와 죽음의 십자가를 사용하여 무역 신호를 생성하기 위해 과반 구매 및 과반 판매 시장 조건을 식별합니다. 전략은 구현하기가 쉽지만 민감성과 안정성을 위해 추가 최적화가 필요할 수 있습니다. 추세를 따르는 전략으로서, 잘못된 신호를 피하기 위해 추가 필터와 논리가 필요합니다. 전반적으로 이것은 개선의 여지가 많은 유용한 전략 템플릿으로 사용됩니다.


/*backtest
start: 2023-11-18 00:00:00
end: 2023-12-18 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//
// @author LazyBear
//
// If you use this code in its original/modified form, do drop me a note. 
//
//@version=4
     
// === INPUT BACKTEST RANGE ===
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2021, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

// === INPUT SHOW PLOT ===
showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

// === FUNCTION EXAMPLE ===
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true       // create function "within window of time"

n1 = input(10, "Channel Length")
n2 = input(21, "Average Length")
obLevel1 = input(60, "Over Bought Level 1")
obLevel2 = input(53, "Over Bought Level 2")
osLevel1 = input(-60, "Over Sold Level 1")
osLevel2 = input(-53, "Over Sold Level 2")
 
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(obLevel1, color=color.red)
plot(osLevel1, color=color.green)
plot(obLevel2, color=color.red, style=3)
plot(osLevel2, color=color.green, style=3)

plot(wt1, color=color.white)
plot(wt2, color=color.fuchsia)
plot(wt1-wt2, color=color.new(color.blue, 80), style=plot.style_area)

//Strategy
strategy(title="T!M - Wave Trend Strategy", overlay = false, precision = 8, max_bars_back = 200, pyramiding = 0, initial_capital = 1000, currency = currency.NONE, default_qty_type = strategy.cash, default_qty_value = 1000, commission_type = "percent", commission_value = 0.1, calc_on_every_tick=false, process_orders_on_close=true)
    
longCondition  = crossover(wt1, wt2)
shortCondition = crossunder(wt1, wt2)

strategy.entry(id="Long Entry", comment="buy", long=true, when=longCondition and window())
strategy.close("Long Entry", comment="sell", when=shortCondition and window())      

//strategy.entry(id="Short Entry", long=false, when=shortCondition)

더 많은