
이 문서에서는 간단한 이동 평균을 기반으로 한 거래 전략에 대해 논의합니다. 이 전략은 길이가 17의 이동 평균을 종결 가격과 비교하기 위해 사용하며, 종결 가격에 이동 평균을 통과 할 때 더 많은 것을하고, 아래로 통과 할 때 공백을 만듭니다.
이 전략은 다음과 같은 변수를 사용하여 이동 평균을 계산합니다.
이러한 변수들을 바탕으로, getMAType () 함수를 호출하여 17주기의 종식 가격 SMA를 계산한다.
다음으로, 마감 가격과 이동 평균의 관계를 비교합니다.
종전 가격이 아래에서 이동 평균을 통과하면 다중 신호가 발생하며, 위에서 아래로 통과하면 하위 신호가 발생한다.
회계주기 동안, 더 많은 신호에 부딪히면 더 많은 포지션이 열리고, 빈 신호에 부딪히면 빈 포지션이 열립니다.
이 전략의 가장 큰 장점은 아이디어가 매우 간단하고 명확하다는 것이다. 단지 하나의 지표로, 방향의 변화로 트렌드의 변화를 판단한다. 전략은 이해하기 쉽고, 구현하기 쉽고, 초보자 학습에 적합하다.
또한, 이동 평균은 트렌드 추적 형식의 지표이며, 시장에서 발생하는 단기간의 잡음으로부터 방해받지 않고 트렌드 전환을 효과적으로 추적할 수 있다.
매개 변수를 조정하여 다른 주기와 다른 품종에 적응할 수 있다.
첫째, 이 전략은 단 하나의 지표에 기반하고, 판단 기준은 단일한 것이므로, 더 많은 잘못된 신호가 발생할 수 있습니다.
그리고, 이 전략은 트렌드 추적 시스템이며, 평준화되고 흔들리는 시장에서 제대로 작동하지 않습니다.
또한, 스톱로스트가 설정되어 있지 않아 손실이 커질 위험이 있습니다.
해결 방법은 다른 지표와 결합하여, 변수 조합을 최적화하여, 잘못된 신호를 줄이는 것이다. 스톱 로즈 스톱을 설정하고, 위험을 제어하고, 회수를 최적화한다.
다음의 몇 가지 측면이 전략적 최적화로 작용할 수 있습니다.
이동 평균 변수를 조정하고, 주기 수를 최적화한다. 예를 들어 30주기 또는 50주기 등으로 변경한다.
EMA,VIDYA 등과 같은 다른 유형의 이동 평균을 시도하십시오. 그들은 가격 변화에 대한 민감도가 다릅니다.
다른 지표의 결합을 추가한다. 예를 들어 MACD와 결합하면 강점을 판단할 수 있다. 또는 RSI와 결합하면 잘못된 신호를 줄일 수 있다.
손해 제도를 늘립니다. 고정된 비율 또는 ATR 값의 이동식 손해 제도를 설정합니다. 단편 손실을 제어합니다.
을 늘리세요. 목표 수익률을 설정하세요. 수익을 극대화하세요.
이러한 최적화는 전략의 성능을 안정화시키고 과도한 회수율을 방지할 수 있습니다.
이 글은 17주기 이동 평균을 기반으로 한 간단한 거래 전략을 분석한다. 전략 신호 출처는 간단하고 이해하기 쉽고 구현할 수 있으며, 전형적인 트렌드 추적 시스템에 속한다. 전략에 대한 깊이 있는 해석을 통해, 장점과 위험을 분석하고, 여러 차원의 최적화 사고를 준다. 지속적인 최적화와 풍요로움을 통해 이 전략은 단계적으로 진화할 수 있으며, 실물에서도 안정적인 수익을 얻을 수 있다고 믿는다.
/*backtest
start: 2023-12-05 00:00:00
end: 2024-01-04 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Simple 17 BF 🚀", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)
/////////////// Time Frame ///////////////
testStartYear = input(2012, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)
testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)
testPeriod() => true
///////////// Moving Average /////////////
source = input(title="MA Source", defval=ohlc4)
maType = input(title="MA Type", defval="sma", options=["sma", "ema", "swma", "wma", "vwma", "rma"])
length = input(title="MA Length", defval=17)
///////////// Get MA Function /////////////
getMAType(maType, sourceType, maLen) =>
res = sma(close, 1)
if maType == "ema"
res := ema(sourceType, maLen)
if maType == "sma"
res := sma(sourceType, maLen)
if maType == "swma"
res := swma(sourceType)
if maType == "wma"
res := wma(sourceType, maLen)
if maType == "vwma"
res := vwma(sourceType, maLen)
if maType == "rma"
res := rma(sourceType, maLen)
res
MA = getMAType(maType, source, length)
/////////////// Strategy ///////////////
long = close > MA
short = close < MA
last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])
long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)
/////////////// Execution ///////////////
if testPeriod()
strategy.entry("L", strategy.long, when=long_signal)
strategy.entry("S", strategy.short, when=short_signal)
/////////////// Plotting ///////////////
p1 = plot(MA, color = long ? color.lime : color.red, linewidth=2)
p2 = plot(close, linewidth=2)
fill(p1, p2, color=strategy.position_size > 0 ? color.lime : strategy.position_size < 0 ? color.red : color.white, transp=80)