새로운 저회귀 이동 평균 전략의 돌파구


생성 날짜: 2023-11-02 15:34:22 마지막으로 수정됨: 2023-11-02 15:34:22
복사: 0 클릭수: 658
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

새로운 저회귀 이동 평균 전략의 돌파구

개요

이 전략의 주요 아이디어는 가격이 지정된 주기 내의 최저값을 뚫었는지 검출하고, 뚫었다면 더 많이 하고, 가격이 평행선으로 돌아가는 것을 기다리는 것이다. 이것은 트렌드 추적 전략에 속한다.

전략 원칙

이 전략은 파인 스크립트의 ta.lowest 방법을 호출하여 지정된 주기 내의 최저 가격을 lowestLow로 얻고, 이전 주기에서의 최저 가격 prevLow와 비교한다.

만약 최신 주기 최저값 (lowestLow) 이 이전 주기 최저값 (prevLow) 보다 낮다면, 더 많은 신호를 발산한다. 더 많은 신호를 발산한 후, 지정된 주기 내의 최고 가격 (highestHigh) 과 비교함으로써, 만약 최신 주기 최저값이 이전 주기 최저 가격보다 크다면, 평정한다.

이 전략은 트레이딩 주파수를 제어하기 위해 최소 가격이 1, 2, 3 또는 4 개의 이전 최저 가격을 연속으로 뚫어야하는 촉발 조건을 선택할 수 있습니다.

또한, 이 전략은 최저가 평균 (lowestLow) 과 최저가 평균 (highestHigh) 을 도표에 그려서 트렌드의 변화를 직관적으로 보여줍니다.

우위 분석

  • 이 전략은 새로운 하락을 돌파한 후 반전하는 경향을 포착하여 높은 승률을 나타냅니다.

  • 최소 가격을 넘을 수 있는 수를 선택하여 거래 빈도를 조절할 수 있다.

  • 평균선을 그리는 것은 직관적으로 트렌드 변화점을 판단하는 데 도움이 됩니다.

  • 전략의 논리는 간단하고 명확하며, 구현을 이해하기 쉽습니다.

  • 다양한 주식과 시간 주기에서 최적화 테스트를 구성할 수 있다.

위험 분석

  • 돌파구 가짜 돌파구 트렌드 반전 지점을 알 수 없으며 손실을 초래할 수 있습니다.

  • 다양한 변수 조합을 테스트하여 최적화 설정을 수행해야 합니다. 그렇지 않으면 거래 빈도가 너무 높거나 너무 낮을 수 있습니다.

  • 다른 주식들에 대해 파라미터를 조정할 필요가 있으며, 기계적 응용에는 적합하지 않다.

  • 미흡한 회귀 시간 주기 때문에 전략이 잘 맞지 않을 수 있다.

  • 파격 이후에는 가격이 다시 낮아질 수 있으며, 위험을 통제하기 위해 손실을 중지해야 합니다.

최적화 방향

  • 단독 손실을 통제하기 위해 이동 손실, 추적 손실과 같은 손실 제도를 추가하십시오.

  • 브레이크 횟수를 최적화하고, 거래 빈도와 신호 품질을 균형 잡는다.

  • 다른 주식과 시간 주기에서의 변수 최적화를 테스트한다.

  • 필터링 조건을 추가하여 불안한 시장에서 거래하는 것을 피하십시오.

  • 트렌드 지표를 추가하는 것을 고려하여 역전 거래를 피하십시오.

  • 다양한 출구 출구 신호를 테스트한다.

요약하다

이 전략은 최저 가격 돌파를 모니터링하여 반전 기회를 잡기 위해 전형적인 돌파 회귀 전략에 속한다. 장점은 간단하고 이해하기 쉽고 거래 빈도가 제어 가능하며, 여러 종류의 주식에서 적용할 수 있다. 그러나 또한 약간의 가짜 돌파 위험이 존재하며, 보조 조건을 추가하여 필터링 최적화를 수행해야하며, 위험을 제어하는 것은 매우 중요합니다.

전략 소스 코드
/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 00:00:00
period: 1h
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/
// © merovinh

//@version=5
strategy(title="Merovinh - Mean Reversion Lowest low",
     overlay = true,
     default_qty_type = strategy.percent_of_equity,
     initial_capital = 10000,
     default_qty_value = 10,
     commission_type = strategy.commission.percent,
     slippage = 1,
     commission_value = 0.04)

GR_TIME = 'Time Period'

bars = input(9, title = "Minimum number of bars", tooltip = "The minimum number of bars before updating lowest low / highest high")

numberOfLows  = input.string(defval='One', title='Number of broken lows', options=['One', 'Two', 'Three', 'Four'])

//Period

var prevLow = .0
var prevHigh = .0
var prevLow2 = .0
var prevLow3 = .0
var prevLow4 = .0

truetime = true


highestHigh = ta.highest(high, bars)
lowestLow = ta.lowest(low, bars)

if numberOfLows == 'One'
    if truetime and prevLow > 0 and lowestLow < prevLow
        strategy.entry('long', strategy.long)
if numberOfLows == 'Two'
    if truetime and prevLow > 0 and lowestLow < prevLow and prevLow < prevLow2
        strategy.entry('long', strategy.long)
if numberOfLows == 'Three'
    if truetime and prevLow > 0 and lowestLow < prevLow and prevLow < prevLow2 and prevLow2 < prevLow3
        strategy.entry('long', strategy.long)
if numberOfLows == 'Four'
    if truetime and prevLow > 0 and lowestLow < prevLow and prevLow < prevLow2 and prevLow2 < prevLow3 and prevLow3 < prevLow4
        strategy.entry('long', strategy.long)

if truetime and prevHigh > 0 and highestHigh > prevHigh
    strategy.close('long')


if prevLow != lowestLow
    prevLow4 := prevLow3
    prevLow3 := prevLow2
    prevLow2 := prevLow
    prevLow := lowestLow
prevHigh := highestHigh

plot(lowestLow, color=color.green, linewidth=1, title="Lowest Low Line")
plot(highestHigh, color=color.green, linewidth=1, title="Highest High Line")