
이 전략은 두 개의 다른 변수 세트의 이동 평균의 교차에 기초하여 구매 및 판매 신호를 발송합니다. 더 짧은 주기 이동 평균이 아래쪽에서 더 긴 주기 이동 평균을 돌파 할 때 구매 신호를 발송합니다. 더 짧은 주기 이동 평균이 위쪽에서 더 긴 주기 이동 평균을 돌파 할 때 판매 신호를 발송합니다.
이 전략은 파인 스크립트 언어를 사용하여 작성되었다. 우선, 입력으로 두 개의 이동 평균의 유형, 길이 및 가격 출처를 정의하고, 각각 p1 및 p2로 명명했다. 이 중 p1은 짧은 기간의 평균을 나타내고, p2는 더 긴 기간의 평균을 나타냅니다.
크로스 오버와 크로스 언더 함수를 통해 두 평행선의 교차 상황을 판단한다. p1이 아래쪽에서 p2를 돌파하면 구매 신호를 발신한다. p1이 위쪽에서 p2를 돌파하면 판매 신호를 발신한다.
거래를 수행하기 위해, 전략은 strategy.entry 함수를 통해 신호를 발송할 때 다단계 또는 빈단계 포지션을 구축한다. shortOnly 파라미터가 활성화되면 거래만 신호를 판매한다.
이 전략은 다음과 같은 장점을 가지고 있습니다.
이 전략에는 몇 가지 위험도 있습니다.
평균선 길이를 조정하고 필터 조건을 도입하는 등의 방법으로 무효 신호를 줄일 수 있다. 또한 트렌드 지표와 결합하여 대장 움직임을 판단할 수 있다.
이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.
크로스 신호의 신뢰성을 높이기 위해 가격 원천으로 볼륨 가중 평균 또는 전형적인 가격을 도입
검증 기간을 늘려서 짧은 기간의 오류를 방지할 수 있습니다.
ATR을 포함해서 시장의 변동에 따라 최대 손실을 설정합니다.
곡선 적합 최적화 변수를 사용하여 최적의 변수 조합을 찾습니다.
대주기 트렌드가 일치할 때 거래 신호를 고려하십시오.
이 쌍평선 교차 전략은 전체적으로 이해하기 쉽고 구현할 수 있으며, 두 평선의 교차로 거래 신호를 형성하여 고도로 사용자 정의할 수 있다. 그러나 또한 충격적인 상황에서 더 많은 무효 신호를 생성할 수도 있다. 매개 변수 최적화와 규칙 최적화를 통해 위험을 줄일 수 있으며, 그 최적화 공간은 더 많은 연구 가치가 있다.
/*backtest
start: 2022-11-20 00:00:00
end: 2023-11-26 00:00:00
period: 1d
basePeriod: 1h
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/
// © RafaelPiccolo
//@version=4
strategy("Double MA Cross", overlay=true)
type1 = input("SMA", "MA Type 1", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "TEMA"])
len1 = input(10, minval=1, title="Length 1")
src1 = input(close, "Source 1", type=input.source)
type2 = input("SMA", "MA Type 2", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "TEMA"])
len2 = input(50, minval=2, title="Length 2")
src2 = input(close, "Source 2", type=input.source)
shortOnly = input(false, "Short only")
tema(src, len)=>
ema1 = ema(src, len)
ema2 = ema(ema1, len)
ema3 = ema(ema2, len)
return = 3 * (ema1 - ema2) + ema3
getPoint(type, len, src)=>
return = type == "SMA" ? sma(src, len) : type == "EMA" ? ema(src, len) : type == "WMA" ? wma(src, len) : type == "HMA" ? hma(src, len) : type == "VWMA" ? vwma(src, len) : type == "RMA" ? rma(src, len) : tema(src, len)
p1 = getPoint(type1, len1, src1)
p2 = getPoint(type2, len2, src2)
shortCondition = crossunder(p1, p2)
longCondition = crossover(p1, p2)
if (shortCondition)
strategy.entry("Short", strategy.short)
if (longCondition)
if (shortOnly)
strategy.close("Short")
else
strategy.entry("Long", strategy.long)
plot(p1, "MA 1", p1 < p2 ? color.red : color.green)
plot(p2, "MA 2", color.blue)