특히, 전략은 8일 지수 이동 평균을 빠른 라인으로 계산하고, 8일 동안의 가장 낮은 가격의 지수 이동 평균을 느린 라인으로 계산한다. 그 다음 가격과 빠른 라인의 차이를 계산한다. 이 차이가 긍정으로 변하기 시작하면 가격이 상승하기 시작했다는 것을 나타낸다. 차이가 부정적으로 변하기 시작하면 가격이 하락하기 시작했다는 것을 나타낸다. 차이가 0을 넘을 때 구매 신호가 생성된다. 차이가 0을 넘을 때 판매 신호가 생성된다.
또한, 전략에는 스톱 로스 메커니즘이 포함되어 있습니다. 가격이 20% 이상 상승하면 그 포지션의 엔트리 가격의 1.2 배로 스톱 로스가 설정됩니다. 이것은 대부분의 이익을 잠금하고 손실을 피합니다. 또한 전략에 대한 적당한 수익을 보장합니다.
이중 이동 평균 골든 크로스 알고리즘은 또한 몇 가지 위험을 초래합니다. 전략은 거래 입출구를 결정하기 위해 가격과 이동 평균 사이의 관계에 전적으로 의존합니다. 이동 평균이 이러한 움직임을 반영하지 못하는 동안 가격이 비정상적으로 변동하면 잘못된 거래 신호가 생성 될 수 있습니다. 이러한 경우 신호를 맹목적으로 따르고 손실을 입지 않도록 가격 움직임에 대한 수동 검사가 필요합니다.
또한, 1.2 배의 입상 가격 스톱 로스 설정은 전체 트렌드를 유지 할 수 없을 정도로 너무 보수적 일 수 있습니다. 상승 추세가 계속되면 촉발 된 스톱 로스 출구는 조기에 종료되고 추가 수익을 잃을 수 있습니다. 더 적절한 스톱 로스 포지셔닝을 찾기 위해 다른 매개 변수를 테스트해야합니다.
이 전략에 대한 추가 개선의 여지가 있습니다. 첫째, 가장 좋은 신호 품질을 위해 이동 평균 기간 매개 변수를 최적화하기 위해 다른 매개 변수를 테스트 할 수 있습니다. 둘째, 가격 통합 기간 동안 잘못된 신호를 생성하지 않도록 변동성 지표를 통합 할 수 있습니다. 셋째, 기계 학습 방법을 적용하여 자동으로 스톱 로스 포지셔닝을 최적화 할 수 있습니다. 넷째, 상관 자산의 정보는 신호 신뢰성을 향상시키기 위해 포트폴리오 거래 시스템을 구축하는 데 사용될 수 있습니다.
/*backtest start: 2023-01-16 00:00:00 end: 2024-01-22 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title = "Estratégia de Cruzamento das Linhas") // Configuração da Média Móvel emaPeriod = 8 ema= ema(close, emaPeriod) ema1= ema(close[1], emaPeriod) lowestEMA = lowest(ema, 8) // Calcula a diferença entre o preço e a média móvel diff = close - ema diff1 = close[1] - ema1 diffLow = ema - lowestEMA //Condições diffZero = diff < 0 diffUnder = diff < diffLow diffUm = diff > 0 Low0 = diffLow == 0 gain = strategy.position_avg_price*(1+0.2) // Sinais de entrada buy_signal = diffUnder and crossover(diff, diff1) and diffZero sell_signal = diffUm and diffUnder and crossunder(diff, diff1) // Executa as operações de compra/venda if buy_signal strategy.entry("Buy", strategy.long) if sell_signal strategy.exit("Buy", limit = gain) // Plota as linhas plot(0, title="Linha Zero", color=color.gray) plot(diff, title="Diferença", color=color.blue, linewidth=2) plot(diffLow, title="Diferença", color=color.red, linewidth=2)