리소스 로딩... 로딩...

크로싱 이동 평균 브레이크업 전략

저자:차오장, 날짜: 2024-02-06 15:02:33
태그:

img

전반적인 설명

이 전략은 시장 트렌드 방향을 파악하기 위해 다른 기간의 세 개의 이동 평균을 사용합니다. 세 개의 이동 평균이 같은 방향으로 움직일 때 위치로 진입합니다. 동시에 가장 최근의 N 촛불의 최고 또는 최저 가격과 결합하여 스톱 로스를 설정하고 이익을 취합니다.

전략 논리

  1. 장기, 중장기 및 단기 세 이동 평균을 계산합니다. 사용자는 기간을 스스로 설정할 수 있습니다. 기본 값은 20, 10 및 5입니다.

  2. 세 개의 이동 평균의 방향을 비교하십시오. 단기 이동 평균이 중기 평균보다 높고 중기 평균이 장기 평균보다 높을 때, 그것은 황소 시장으로 판단됩니다. 단기 평균보다 낮고 중기 평균이 장기 평균보다 낮을 때, 그것은 곰 시장으로 판단됩니다.

  3. 황소 시장에서 가격이 가장 최근의 N 촛불의 가장 높은 가격을 돌파하면, 긴 거; 곰 시장에서, 가격이 가장 최근의 N 촛불의 가장 낮은 가격을 돌파하면, 짧은 거. N 또한 사용자에 의해 사용자 지정 가능한 매개 변수입니다.

  4. 포지션에 들어가면 스톱 로스를 설정하고 이윤을 취합니다. 황소 시장에서 스톱 로스는 가장 최근의 N 촛불의 가장 낮은 가격으로 설정되고, 곰 시장에서는 가장 높은 가격으로 설정됩니다.

이점 분석

이 전략은 이동 평균 지표와 촛불 차트를 결합하여 시장 트렌드를 더 잘 결정할 수 있습니다. 동시에 스톱 로스 및 수익을 취하는 설정은 합리적이며 더 큰 손실을 피하는 데 도움이 됩니다.

단일 이동 평균 및 다른 지표와 비교하면 이 전략은 시장 트렌드를 보다 신뢰성 있게 판단하기 위해 세 개의 이동 평균을 사용합니다. 한편, 가장 최근의 N 촛불의 최고 또는 최저 가격을 뚫고 입상하는 것은 일반적인 브레이크아웃 전략입니다. 전반적으로 전략 아이디어는 명확하고 구현하기가 쉽습니다.

위험 분석

이 전략의 주요 잠재적 위험은 다음과 같습니다.

  1. 세 개의 이동 평균의 방향에 대한 잘못된 판단의 확률입니다. 중-단기 이동 평균이 잘못된 신호를 일으키면 불필요한 손실이 발생할 수 있습니다.

  2. 위치에 들어가는 타이밍의 잘못된 선택, 쉽게 함락됩니다. 입력의 타이밍은 적절히 최적화되어야합니다.

  3. 스톱 손실 거리는 너무 작게 설정되어 있습니다. 스톱 손실 거리를 확장하면 가격에 더 많은 실행 공간을 허용 할 수 있습니다.

최적화 방향

이 전략을 최적화하는 방향은 다음과 같습니다.

  1. 이동 평균 신호의 신뢰성을 보장하기 위해 필터링을 위한 다른 지표를 추가합니다. 예를 들어 거래량의 긴/단어 판단을 추가하십시오.

  2. 이동 평균 기간을 최적화하여 다른 제품에 더 잘 적응합니다.

  3. 자동 매개 변수 최적화를 위해 기계 학습 알고리즘을 추가합니다.

  4. 이 전략의 효과를 고주파 데이터에서 테스트합니다.

요약

이 전략은 비교적 간단하고 보편적입니다. 아이디어는 강력한 실현 가능성과 함께 명확합니다. 이동 평균 크로스오버 시스템의 예로서 초보자에게 일반적인 선택입니다. 적절한 최적화를 통해 시스템은 안정적인 수익을 얻기 위해 더 많은 제품과 시간 프레임에 적용 될 수 있습니다.


/*backtest
start: 2023-01-30 00:00:00
end: 2024-02-05 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © hobbiecode

//@version=5
strategy("Cross Breakout - Hobbiecode", shorttitle="Cross - HOBBIE", overlay=true)

// User-defined input for moving averages
long_period = input(20, title="Long Period")
medium_period =  input(10, title = "Medium Period")
short_period = input(5, title="Short Period")
type_ma = input.string("SMA", title = "MA type", options = ["SMA", "EMA"])
candles_back = input(10, title = "Candles Back")
bars_valid = input(3, title = "Bars to Exit")

// Calculating moving averages
long_ma = 0.0
medium_ma = 0.0
short_ma = 0.0

if type_ma == "SMA"
    long_ma := ta.sma(close, long_period)
    medium_ma := ta.sma(close, medium_period)
    short_ma := ta.sma(close, short_period)
else
    long_ma := ta.ema(close, long_period)
    medium_ma := ta.ema(close, medium_period)
    short_ma := ta.ema(close, short_period)

// Plot moving averages
plot(long_ma, title="Long Moving Average", color=color.red)
plot(medium_ma, title = "Medium Moving Average", color = color.yellow)
plot(short_ma, title="Short Moving Average", color=color.green)

// Check last min/max
last_min = ta.lowest(candles_back)
last_max = ta.highest(candles_back)

// Strategy logic for crossing of moving averages
longCondition = short_ma > medium_ma and medium_ma > long_ma and high == last_max
shortCondition = short_ma < medium_ma and medium_ma < long_ma and low == last_min

longCondition_entry = longCondition and strategy.position_size == 0
shortCondition_entry = shortCondition and strategy.position_size == 0

// Check last min/max for operation
last_min_op = ta.lowest(candles_back)[1]
last_max_op = ta.highest(candles_back)[1]

// Plot lines
var line r1Line = na

// Entry orders
// if (longCondition)
//     from_line = chart.point.now(high)
//     to_line = chart.point.from_index(bar_index + candles_back, high)
//     r1Line := line.new(from_line, to_line, color = color.green, width = 2)

if longCondition_entry and ta.crossover(close,last_max_op)
    strategy.entry("Long", strategy.long)
    strategy.exit("Exit Long", from_entry="Long", stop=low)

// if (shortCondition)
//     from_line = chart.point.now(low)
//     to_line = chart.point.from_index(bar_index + candles_back, low)
//     r1Line := line.new(from_line, to_line, color = color.red, width = 2)

if shortCondition_entry and ta.crossunder(close,last_min_op)
    strategy.entry("Short", strategy.short)
    strategy.exit("Exit Short", from_entry="Short", stop=high)

if ta.barssince(longCondition_entry) >= bars_valid
    strategy.close("Long")

if ta.barssince(shortCondition_entry) >= bars_valid
    strategy.close("Short")

더 많은