이 전략은 시장 트렌드 방향을 파악하기 위해 다른 기간의 세 개의 이동 평균을 사용합니다. 세 개의 이동 평균이 같은 방향으로 움직일 때 위치로 진입합니다. 동시에 가장 최근의 N 촛불의 최고 또는 최저 가격과 결합하여 스톱 로스를 설정하고 이익을 취합니다.
장기, 중장기 및 단기 세 이동 평균을 계산합니다. 사용자는 기간을 스스로 설정할 수 있습니다. 기본 값은 20, 10 및 5입니다.
세 개의 이동 평균의 방향을 비교하십시오. 단기 이동 평균이 중기 평균보다 높고 중기 평균이 장기 평균보다 높을 때, 그것은 황소 시장으로 판단됩니다. 단기 평균보다 낮고 중기 평균이 장기 평균보다 낮을 때, 그것은 곰 시장으로 판단됩니다.
황소 시장에서 가격이 가장 최근의 N 촛불의 가장 높은 가격을 돌파하면, 긴 거; 곰 시장에서, 가격이 가장 최근의 N 촛불의 가장 낮은 가격을 돌파하면, 짧은 거. N 또한 사용자에 의해 사용자 지정 가능한 매개 변수입니다.
포지션에 들어가면 스톱 로스를 설정하고 이윤을 취합니다. 황소 시장에서 스톱 로스는 가장 최근의 N 촛불의 가장 낮은 가격으로 설정되고, 곰 시장에서는 가장 높은 가격으로 설정됩니다.
이 전략은 이동 평균 지표와 촛불 차트를 결합하여 시장 트렌드를 더 잘 결정할 수 있습니다. 동시에 스톱 로스 및 수익을 취하는 설정은 합리적이며 더 큰 손실을 피하는 데 도움이 됩니다.
단일 이동 평균 및 다른 지표와 비교하면 이 전략은 시장 트렌드를 보다 신뢰성 있게 판단하기 위해 세 개의 이동 평균을 사용합니다. 한편, 가장 최근의 N 촛불의 최고 또는 최저 가격을 뚫고 입상하는 것은 일반적인 브레이크아웃 전략입니다. 전반적으로 전략 아이디어는 명확하고 구현하기가 쉽습니다.
이 전략의 주요 잠재적 위험은 다음과 같습니다.
세 개의 이동 평균의 방향에 대한 잘못된 판단의 확률입니다. 중-단기 이동 평균이 잘못된 신호를 일으키면 불필요한 손실이 발생할 수 있습니다.
위치에 들어가는 타이밍의 잘못된 선택, 쉽게 함락됩니다. 입력의 타이밍은 적절히 최적화되어야합니다.
스톱 손실 거리는 너무 작게 설정되어 있습니다. 스톱 손실 거리를 확장하면 가격에 더 많은 실행 공간을 허용 할 수 있습니다.
이 전략을 최적화하는 방향은 다음과 같습니다.
이동 평균 신호의 신뢰성을 보장하기 위해 필터링을 위한 다른 지표를 추가합니다. 예를 들어 거래량의 긴/단어 판단을 추가하십시오.
이동 평균 기간을 최적화하여 다른 제품에 더 잘 적응합니다.
자동 매개 변수 최적화를 위해 기계 학습 알고리즘을 추가합니다.
이 전략의 효과를 고주파 데이터에서 테스트합니다.
이 전략은 비교적 간단하고 보편적입니다. 아이디어는 강력한 실현 가능성과 함께 명확합니다. 이동 평균 크로스오버 시스템의 예로서 초보자에게 일반적인 선택입니다. 적절한 최적화를 통해 시스템은 안정적인 수익을 얻기 위해 더 많은 제품과 시간 프레임에 적용 될 수 있습니다.
/*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")