이중 이동 평균 크로스오버 거래 전략

저자:차오장, 날짜: 2023-10-07 16:39:01
태그:

전반적인 설명

이 전략은 트렌드를 결정하고 구매 및 판매 신호를 생성하기 위해 이중 이동 평균의 황금 십자가와 죽음의 십자가를 사용합니다. 빠른 이동 평균이 아래에서 느린 이동 평균보다 높을 때 황금 십자가가 발생하고 구매 신호가 생성됩니다. 빠른 이동 평균이 위에서 느린 이동 평균보다 낮을 때 죽음의 십자가가 발생하고 판매 신호가 생성됩니다.

전략 논리

이 전략은 다음의 구성 요소로 구성됩니다.

  1. 가격의 오시일레이터 값을 비율로 계산한다. 오시일레이터 값은 가격의 비율을 미제한 중위값으로 계산한다. 중위값은 20일 최고와 최저 가격의 평균으로 계산된다.

  2. 20일 Hull 이동 평균과 같은 오시레이터 값의 이동 평균을 계산합니다.

  3. 이동 평균의 지연값을 계산합니다. 예를 들어 12일 지연값.

  4. 이동평균이 지연 이동평균보다 높거나 낮을 때 황금색 십자 또는 죽음의 십자 신호를 발생시키는지를 결정합니다.

  5. 구매 및 판매 신호를 발행합니다.

구체적으로, 전략은 먼저 가격의 오시레이터 값을 계산하고, 그 다음 오시레이터의 이동 평균을 계산하고, 그 다음 이동 평균의 뒤떨어진 값을 계산합니다.

오시일레이터 이동 평균이 뒤떨어진 이동 평균을 넘을 때, 긴 이동을 위한 황금 십자 신호가 생성됩니다. 오시일레이터 이동 평균이 뒤떨어진 이동 평균을 넘을 때, 짧은 이동을 위한 죽음의 십자 신호가 생성됩니다.

이중 이동 평균의 교차를 판단함으로써 거래 방향이 결정됩니다.

이점 분석

이 전략의 장점은 다음과 같습니다.

  1. 이중 이동 평균을 사용하면 잘못된 신호를 필터링하고 신호 신뢰성을 향상시킵니다.

  2. 빠른 이동 평균과 느린 이동 평균을 결합하면 중장기 트렌드를 파악할 수 있습니다. 빠른 MA는 가격 변화에 민감하며 느린 MA는 품질이 뒤떨어집니다. 둘을 결합하면 중장기 트렌드 반전을 감지하면서 단기 잡음을 필터합니다.

  3. 오시레이터는 브레이크오프 포인트를 강조하고 더 명확한 거래 신호를 생성합니다.

  4. 사용자 정의 가능한 MA 알고리즘과 매개 변수는 다른 시장 환경에 적합합니다.

  5. 간단하고 명확한 전략 논리, 이해하기 쉽고 실행하기 쉬운, 초보자 친화적.

위험 분석

이 전략의 위험은 다음과 같습니다.

  1. 듀얼 MA 크로스오버는 신호가 뒤쳐져 있어 가장 좋은 입구점을 놓칠 수 있습니다.

  2. 범위를 제한하는 시장에서 잘못된 신호에 유연합니다.

  3. 트렌드 강도를 파악할 수 없으니, 황소 시장에서 조기 탈락할 위험이 있습니다.

  4. 너무 많은 조절 가능한 매개 변수, 최적화하기 어려운 최고의 매개 변수 조합

  5. 스톱 로스 메커니즘이 없으니 단일 거래 손실을 통제할 수 없습니다.

최적화 방향

이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.

  1. MA 유형과 매개 변수를 최적화하고 다른 시장에서 안정성을 테스트합니다.

  2. ADX와 같은 트렌드 결정 지표를 추가하여 잘못된 신호로 인해 불필요한 거래를 피합니다.

  3. 단 하나의 거래 손실을 제어하기 위해 후속 중지 또는 비율 중지와 같은 스톱 손실 메커니즘을 추가하십시오.

  4. 신호 품질을 향상시키기 위해 부피, RSI와 같은 다른 지표를 포함합니다.

  5. 더 강력한 설정을 위해 매개 변수를 자동으로 최적화하기 위해 기계 학습을 사용하세요.

  6. 유실된 거래를 줄이기 위해 입시 조건을 약간 완화하는 것을 고려하십시오.

요약

이 이중 이동 평균 크로스오버 전략은 빠른 및 느린 이동 평균을 결합하여 단기 시장 소음을 필터링하여 중기 트렌드 역전 지점을 캡처합니다. 간단하고 이해하기 쉽고 초보자 친화적이라는 장점이 있습니다. 그러나 잘못된 신호를 생성하고 트렌드 강도를 결정하지 못하는 것과 같은 단점도 있습니다. 전략은 MA 매개 변수를 최적화하고 트렌드 필터를 추가하고 다른 시장 환경에 맞게 스톱 손실 조건을 설정하여 개선 할 수 있습니다. 전반적으로 이중 MA 전략은 최적화 및 라이브 테스트를 통해 검증 가치가있는 실용적인 기술 지표 기반 전략입니다.


/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 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/
// © EvoCrypto

//@version=4
strategy("Distance Oscillator Strategy- evo", shorttitle="Distance Oscillator Strategy")

// INPUTS {
na_1                =   input(false,    title="────────────{ Oscillator }──────────────")

// Osc_Src             =   input(close,    title="Oscillator Source                                ")

Example_Length      =   input(20,       title="Example Length", minval=1)
Osc_Src             =   (highest(Example_Length) + lowest(Example_Length)) / 2

// Strategy can not let you choose a Moving Average to connect with like the study version, so I use the MA above as example

Osc_Format          =   input("Percent",title="Oscillator Format",              options=["Percent", "Currency"]) 

na_2                =   input(false,    title="─────────────{ Average }──────────────")
Average_Type        =   input("Hull",   title="Average Type",                   options=["Hull", "Sma", "Ema", "Wma"])
Length              =   input(50,       title="Average Length", minval=1)
Lagg                =   input(12,       title="Average Lagg",   minval=1)
Display_MA          =   input(true,     title="Display Average")
// }

// SETTINGS {
Osc_Sum             =   
 Osc_Format == "Percent"  ? (close - Osc_Src) / close * 100 :
 Osc_Format == "Currency" ? (close - Osc_Src)               : na

Osc_MA              =   Display_MA == false ? na:
 Average_Type == "Hull"? hma(Osc_Sum, Length)   :
 Average_Type == "Sma" ? sma(Osc_Sum, Length)   :
 Average_Type == "Ema" ? ema(Osc_Sum, Length)   :
 Average_Type == "Wma" ? wma(Osc_Sum, Length)   : na
Osc_MA_1            =   Osc_MA[Lagg]

Cross_Up            =   crossover( Osc_MA, Osc_MA_1)
Cross_Down          =   crossunder(Osc_MA, Osc_MA_1)

Osc_Color           =   Osc_Sum > 0         ? color.new(#bbdefb, 70)  : Osc_Sum < 0          ? color.new(#000000, 70)  : na
Average_Color       =   Osc_MA  > Osc_MA_1  ? color.new(#311b92, 100) : Osc_MA  < Osc_MA_1   ? color.new(#b71c1c, 100) : na
// }

// PLOT {
plot(Osc_Sum,                           title="Oscillator", color=Osc_Color, style=plot.style_histogram, linewidth=2)

Plot_0              =   plot(Osc_MA,    title="Osc Average",color=#b71c1c, linewidth=2)
Plot_1              =   plot(Osc_MA_1,  title="Osc Average",color=#311b92, linewidth=2)
fill(Plot_0, Plot_1,                    title="Average",    color=Average_Color)

plotshape(Cross_Up   ? Osc_MA_1 : na,   title="Cross Up",   color=#bbdefb, location=location.absolute, size=size.tiny, style=shape.circle)
plotshape(Cross_Down ? Osc_MA_1 : na,   title="Cross Down", color=#000000, location=location.absolute, size=size.tiny, style=shape.circle)
// }

// STRATEGY {
if (Cross_Up)
    strategy.entry("Long", strategy.long)
if (Cross_Down)
    strategy.entry("Short", strategy.short)
// }

더 많은