
이 전략은 이동 평균에 기반한 간격 돌파 전략이다. 이는 일정 주기 이동 평균과 설정된 상하 궤도를 기준으로 가격 돌파를 판단하여 거래한다.
이 전략의 핵심 원칙은 다음과 같습니다.
특정 주기 이동 평균을 설정하여 중축으로
중앙축 위아래 구간 범위는 중앙축을 곱하여 일정 비율로 얻는다. 상단선은 중앙축을 곱하여 ((100% + %를 설정), 하단선은 중앙축을 곱하여 ((100% - %를 설정) 한다.
가격이 상승하면 상선을 돌파할 때, 하락하면 하락할 때, 하락하면 하락할 때, 하락하면 하락할 때.
주문 가격은 상하의 상하의 선형 가격으로 설정된다.
가격이 중축으로 돌아왔을 때, 평행은 출발한다.
따라서, 이동 평균과 그 간격의 범위를 통해 가격의 돌파구를 포착하여 거래 전략을 구현합니다.
이 전략은 다음과 같은 장점을 가지고 있습니다.
개념은 간단하고 명확하며, 이해하기 쉽고 구현하기 쉽습니다.
다른 시장 환경에 적응하기 위해 매개 변수를 조정할 수 있습니다.
중축과 간격 범위는 시장 소음을 효과적으로 필터링하여 트렌드를 잡을 수 있습니다.
제한 가격 주문을 통해 위험을 조절할 수 있습니다.
중축으로 돌아가는 동안 손실을 막고 과도한 손실을 피하십시오.
이 전략에는 몇 가지 위험도 있습니다.
부적절한 간격 변수 설정은 거래의 빈도나 부족으로 이어질 수 있다.
돌파는 가짜 돌파가 발생할 가능성이 높으며, 정지 손실이 발생할 수 있다.
상황이 급격하게 변동할 때, 중축선과 구간 범위는 유효하지 않습니다.
중축으로 돌아가는 동안 강제 중단으로 인해 조기 퇴출이 발생할 수 있습니다.
대응방법:
최적화 매개 변수, 적절한 이동 평균 주기 및 간격 비율을 선택하십시오.
다른 지표와 함께 가능한 한 가짜 돌파구를 피하십시오.
인간의 개입을 늘리세요.
이동 평균의 주기가 더 길게 설정되어 있고, 간격 범위는 적절히 확대된다.
이 전략은 다음과 같은 방향으로 최적화될 수 있습니다.
스톱로스 조건을 추가하여 스톱로스를 추적하고 과도한 손실을 방지하는 것
MACD, KD 등과 같은 지표 필터를 추가하여 가짜 돌파구를 줄여줍니다.
자동 매개 변수 최적화 기능이 추가되어 시장 변화에 따라 매개 변수가 실시간으로 조정될 수 있습니다.
포지션 개설 조건을 늘리고, 단순히 돌파구에 의존하는 것을 피한다.
이동 평균 주기 및 간격 파라미터 설정을 최적화하십시오.
이 전략은 전체적으로 비교적 실용적인 이동 평균 범위를 돌파하는 전략이다. 그것의 개념은 간단하고 이해하기 쉽고, 구현하기 쉬우며, 범위를 필터링하는 소음으로 트렌드가 더 뚜렷한 시장에서 더 효과적이다. 그러나 또한 몇 가지 위험이 있으며, 매개 변수 최적화와 다른 지표와 결합하여 사용에 주의를 기울여야 한다.
/*backtest
start: 2023-01-01 00:00:00
end: 2023-08-15 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2018
//@version=3
strategy(title = "Robot WhiteBox ShiftMA", shorttitle = "Robot WhiteBox ShiftMA", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
per = input(3, title = "Length")
src = input(ohlc4, title = "Source")
shortlevel = input(10.0, title = "Short line (red)")
longlevel = input(-5.0, title = "Long line (lime)")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
//SMAs
sma = sma(src, per)
shortline = sma * ((100 + shortlevel) / 100)
longline = sma * ((100 + longlevel) / 100)
plot(shortline, linewidth = 2, color = red, title = "Short line")
plot(sma, linewidth = 2, color = blue, title = "SMA line")
plot(longline, linewidth = 2, color = lime, title = "Long line")
//Trading
size = strategy.position_size
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
if (not na(close[per])) and size == 0 and needlong
strategy.entry("L", strategy.long, lot, limit = longline)
if (not na(close[per])) and size == 0 and needshort
strategy.entry("S", strategy.short, lot, limit = shortline)
if (not na(close[per])) and size > 0
strategy.entry("Close", strategy.short, 0, limit = sma)
if (not na(close[per])) and size < 0
strategy.entry("Close", strategy.long, 0, limit = sma)
if time > timestamp(toyear, tomonth, today, 23, 59)
strategy.close_all()