이중 SMA 크로스오버 전략은 서로 다른 매개 변수 설정을 가진 두 개의 SMA 라인의 크로스오버를 계산하여 거래 신호를 생성합니다. 더 빠른 SMA 라인이 더 느린 SMA 라인의 위를 넘을 때 구매 신호가 생성됩니다. 더 느린 SMA 라인이 더 빠른 SMA 라인의 아래를 넘을 때 판매 신호가 생성됩니다. 전략은 두 개의 SMA 매개 변수를 동시에 사용합니다. 하나는 입구 지점을 결정하고 다른 하나는 출구 지점을 결정합니다.
이 전략은 두 개의 SMA 매개 변수를 사용합니다.smaB1
, smaB2
구매 신호를 위해, 그리고smaS1
, smaS2
판매 신호는 각각 느리고 빠른 이동 평균을 나타냅니다.smaB1
위쪽의 십자smaB2
, 구매 신호가 생성됩니다.smaS2
아래의 십자smaS1
, 판매 신호가 생성됩니다. 이것은 변화하는 시장 환경에 적응하기 위해 입출구 조건을 유연하게 조정 할 수 있습니다.
특히, 이 전략은 매매 시기를 결정하기 위해 두 개의 SMA 라인의 크로스오버 상황을 클로즈 가격에서 계산하여 모니터링합니다. 더 빠른 SMA 라인이 더 느린 SMA 라인의 위를 넘을 때, 가격 추세가 상승하는 것으로 판단됩니다. 따라서 이 시간에 길게 이동하십시오. 그리고 더 느린 SMA 라인이 더 빠른 SMA 라인의 아래를 넘을 때, 가격 추세는 하향으로 전환되므로 긴 포지션을 종료하십시오.
이 전략의 주요 장점은 다음과 같습니다.
이 전략과 관련된 위험도 있습니다.
위의 위험을 제어하기 위해 SMA 매개 변수 최적화, 수익을 차단하기 위한 동적 스톱 로스 등과 같은 방법이 전략을 개선하는 데 사용될 수 있습니다.
이 전략에 대한 최적화 방향:
SMA 크로스오버 전략은 두 개의 SMA 라인 사이의 크로스오버 상황을 계산하여 간단하고 효과적인 거래 신호를 생성합니다. 매개 변수를 조정할 수 있는 유연성은이 전략을 다른 제품에 적응 할 수있게 만들고 일반적으로 사용되는 트렌드 다음 전략입니다. 더 신뢰할 수있는 신호를 생성하기 위해 매개 변수 최적화, 신호 필터링 등을 통해이 전략을 추가적으로 개선 할 수 있습니다.
/*backtest start: 2023-11-15 00:00:00 end: 2023-11-22 00:00:00 period: 5m basePeriod: 1m 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/ // © melihtuna //@version=4 strategy("SMA Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=10000, currency=currency.USD, commission_value=0.1, commission_type=strategy.commission.percent) smaB1 = input(title="smaB1",defval=377) smaB2 = input(title="smaB2",defval=200) smaS1 = input(title="smaS1",defval=377) smaS2 = input(title="smaS2",defval=200) smawidth = 2 plot(sma(close, smaB1), color = #EFB819, linewidth=smawidth, title='smaB1') plot(sma(close, smaB2), color = #FF23FD, linewidth=smawidth, title='smaB2') plot(sma(close, smaS1), color = #000000, linewidth=smawidth, title='smaS1') plot(sma(close, smaS2), color = #c48dba, linewidth=smawidth, title='smaS2') // === INPUT BACKTEST RANGE === FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2020, title = "From Year", minval = 2017) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 2017) // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) window() => time >= start and time <= finish ? true : false longCondition = crossover(sma(close, smaB1),sma(close, smaB2)) if (window() and longCondition) strategy.entry("BUY", strategy.long) shortCondition = crossover(sma(close, smaS2),sma(close, smaS1)) if (window() and shortCondition) strategy.entry("SELL", strategy.short)