추세 추종 이익 극대화 전략


생성 날짜: 2023-10-11 14:38:40 마지막으로 수정됨: 2023-10-11 14:38:40
복사: 2 클릭수: 657
avatar of ChaoZhang ChaoZhang
1
집중하다
1702
수행원

개요

이 전략은 가격의 이동 평균과 표준 차 CHANNEL을 계산하여 동적인 상하 궤도를 형성하고 최고 가격과 최저 가격의 평균을 결합하여 중하 궤도를 형성하여 현재의 트렌드 방향을 판단합니다. 가격이 상하 궤도를 돌파 할 때 부진하고, 가격이 하하 궤도를 돌파 할 때 부진하여, 트렌드 변화에 따라 거래하는 전략을 구현합니다.

전략 원칙

  1. 20일 간소 이동 평균을 중간 기준으로 계산합니다.
  2. 근의 20일 표준차 deviation을 계산하기 dev 위와 아래의 궤도 거리의 근의 궤도 거리의 기초로
  3. 중궤도basis±2*dev는 upper와 lower를 결정합니다.
  4. 최근 20일 동안의 최고 가격 (upper2) 과 최저 가격 (lower2) 의 평균값인 basis2를 두 번째 중간선으로 계산한다.
  5. 위의 두 개의 중간 궤도는 평균값 MB를 최종 중간 궤도로 취한다.
  6. 클로즈가 중궤도 MB보다 크면 상향 신호, MB가 클로즈보다 크면 하향 신호
  7. 신호에 따라 더 많은 하위 방향을 설정하여 트렌드를 추적하여 수익을 얻습니다.

우위 분석

  1. 동적 표준 차차 채널을 사용하여 가격 변화의 흐름을 빠르게 파악할 수 있습니다.
  2. 최고 가격과 최저 가격 정보를 결합하여, 중간 궤도는 더 많은 참조 의미를 갖는다.
  3. 이중중 궤도 설계로 신호가 더 정확하고 안정적으로 전달된다.
  4. 전략은 간단하고 명확하며, 실행에 옮기는 것은 쉽다.
  5. 다양한 시장 환경에 적합한 적은 구성 가능한 파라미터

위험 분석

  1. 상반기 또는 하반기 거래의 경우, 단편 손실을 제어하는 손실을 방지하는 전략을 고려해야합니다.
  2. 거래 빈도가 높을 수 있으며 수수료의 영향을 고려해야 합니다.
  3. 매개 변수 (Parameters) 와 같은 간격 변수는 신중한 최적화가 필요하며, 과도한 적합성을 피한다.
  4. 트렌드 변동에 따라 거래 신호에 오류가 발생할 수 있습니다.
  5. 자금 관리가 필요하고, 너무 높은 레버리지를 사용하지 마십시오.

최적화 방향

  1. 착륙과 착륙 시, 필터링 조건을 추가하여 가짜 돌파를 방지할 수 있습니다.
  2. ATR과 같은 지표에 따라 동적 스톱로스 엑시트를 설정할 수 있습니다.
  3. 거래량 정보를 결합하여 브레이크 신호의 신뢰성을 검증할 수 있습니다.
  4. 더 많은 시장 환경에 적응하기 위해 계산 주기와 같은 매개 변수에 대해 최적화 할 수 있습니다.
  5. 단위 손실 위험을 제어하기 위해 포지션 수를 설정하는 것을 고려할 수 있습니다.

요약하다

이 전략의 전체적인 아이디어는 명확하고 이해하기 쉽다. 동적 채널을 통해 트렌드를 포착하고, 다중 중도 설계와 결합하여 거래 신호를 생성하여, 트렌드 방향을 효과적으로 추적하여 거래를 할 수 있으며, 더 나은 거래 수익을 얻을 수 있다. 실제 적용에서, 손실을 막는 전략, 자금 관리에 주의를 기울이고, 파라미터에 대해 최적화하여 장기적으로 안정적인 수익을 얻을 수 있다.

전략 소스 코드
/*backtest
start: 2023-09-10 00:00:00
end: 2023-10-10 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ErdemDemir

//@version=4
strategy("Lawyers Trend Pro Strategy", shorttitle="Lawyers Trend Pro Strategy", overlay=true)

src = close
mult = 2.0
basis = sma(src, 20)
dev = mult * stdev(src, 20)
upper = basis + dev
lower = basis - dev
offset = 0


lower2 = lowest(20)
upper2 = highest(20)
basis2 = avg(upper2, lower2)


MB= (basis+basis2)/2





col1=close>MB
col3=MB>close
colorE = col1 ? color.blue : col3 ? color.red : color.yellow
p3=plot(MB, color=colorE, linewidth=3)

// Deternine if we are currently LONG
isLong = false
isLong := nz(isLong[1], false)

// Determine if we are currently SHORT
isShort = false
isShort := nz(isShort[1], false)

// Buy only if the buy signal is triggered and we are not already long
buySignal = not isLong and crossover(close,MB)

// Sell only if the sell signal is triggered and we are not already short
sellSignal= not isShort and crossover(MB,close)
if (buySignal)
    isLong := true
    isShort := false

if (sellSignal)
    isLong := false
    isShort := true







/// LONG
strategy.entry("long", true , when = buySignal, comment="Open Long")

strategy.close("long", when=sellSignal, comment = "Close Long")

/// SHORT
strategy.entry("short", false,  when = sellSignal, comment="Open Short")

strategy.close("short", when=buySignal, comment = "Close Short")