
이 전략은 이동 평균과 평균 실제 변동률을 사용하여 시장의 추세 방향을 판단하고, 추세 방향에 따라 트렌드 추적 거래를 수행한다.
이 전략은 렌 주기의 이동 평균 ma와 2배 렌 주기의 평균 실제 변동률atr을 사용하여 시장 추세를 판단한다. 구체적인 판단 규칙은 다음과 같다.
최저가격이 이동 평균과 평균 실제 변동률보다 크면 ((low > ma + atr), 상승 추세로 판단한다.
최고값이 이동 평균이 적어진 평균 실제 변동률을 때 (high < ma - atr), 하향 경향으로 판단한다.
다른 경우에는 이전 판단을 유지한다.
상승 추세를 판단할 때, 허용되는 경우의 비율에 따라 더 많이 할 수 있습니다.
하락 추세를 판단할 때, 공백이 허용될 때, 일정 비율로 공백을 다.
평위 조건은 지정된 거래 종료 날짜에 도달하는 것이다.
이 전략은 다음과 같은 장점을 가지고 있습니다.
이 전략의 주요 위험은 다음과 같습니다.
해결책:
이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.
이 전략의 전체적인 아이디어는 명확하고 이해하기 쉽고, 이동 평균을 사용하여 트렌드 방향을 판단하고, 평균 실제 변동률을 사용하여 스톱 스팅을 설정하여 트렌드를 효과적으로 추적할 수 있습니다. 그러나 약간의 위험이 있으며, 추가 최적화 파라미터 설정과 다른 판단 지표를 추가 할 필요가 있습니다.
/*backtest
start: 2024-01-04 00:00:00
end: 2024-01-11 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//2019
//Noro
//@version=4
strategy(title = "Noro's MA+ATR Strategy", shorttitle = "MA+ATR str", 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 = "Capital, %")
len = input(30, minval = 2, title = "MA Length")
src = input(ohlc4, title = "MA Source")
limitmode = input(false)
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")
//MA + BG
atr = sma(tr, len) * 2
ma = sma(src, len)
plot(ma, color = color.blue, linewidth = 4)
trend = 0
trend := low > ma + atr ? 1 : high < ma - atr ? -1 : trend[1]
col = trend == 1 ? color.lime : color.red
bgcolor(col, transp = 70)
//Trading
lot = 0.0
lot := strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1]
if trend == 1 and limitmode == false
strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)
if trend == -1 and limitmode == false
strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
if trend == 1 and limitmode
strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)
if trend == -1 and limitmode
strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
// if time > timestamp(toyear, tomonth, today, 23, 59)
// strategy.close_all()