저가 매수 - MA200 최적화 전략


생성 날짜: 2024-01-08 16:54:21 마지막으로 수정됨: 2024-01-08 16:54:21
복사: 0 클릭수: 695
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

저가 매수 - MA200 최적화 전략

개요

이 전략은 역전 거래 방법 (Buy low) 과 트렌드 추적 논리 (Only when the price is above MA200) 를 결합합니다. 이 전략은 자산의 낮은 시점을 구입할 때 가장 수익을 올릴 수있는 최적의 시간을 찾는 것을 목표로합니다.

전략 원칙

이 전략은 가격의 전반적인 변화의 비율을 재고 기간 동안 계산하여 가격이 상대적으로 낮은 지점에 있는지 판단합니다. 전체적인 변화의 비율이 3% 미만일 때 가격이 낮은 지점이라고 생각합니다. 또한, 전략은 200일 간단한 이동 평균을 추세를 판단하는 지표로 설정합니다. 가격이 200일 이동 평균보다 높을 때만 구매 신호를 냅니다. 이렇게, 전략은 MEAN 회귀 원리를 동시에 활용하고, 다공간 결합 원리를 사용하여, 추세가 상승할 때 낮은 지점을 구입하여 이익을 얻습니다.

우위 분석

이 전략은 트렌드 트레이딩과 역전 거래의 장점을 결합한다. 한편으로는, 장기 이동 평균을 사용하여 추세를 판단하고, 추세가 하락하는 동안 맹목적으로 구매하는 것을 피한다. 한편으로는, 역전 구매 하위점은 또한 단기 조정 시에 더 나은 진입 시기를 얻을 수 있다. 이 두 가지의 조합은 거래의 안전을 보장하고 수익률을 높인다. 또한, 전략의 매개 변수가 최적화 할 수있는 공간이 넓고, 다른 시장에 따라 매개 변수를 조정할 수 있으며, 강한 적응력을 가지고 있다.

위험 분석

이 전략의 가장 큰 위험은 구매 신호가 발급된 후 가격이 계속 하락하여 손실이 확대될 수 있다는 것입니다. 또한, 시장이 장기간에 걸쳐 수평으로, 가격이 이동 평균을 돌파하지 못하면 전략이 실패할 수 있습니다. 이러한 위험을 줄이기 위해, 이동 평균 주기를 적절히 단축하고 구매 조건을 최적화하여 충분한 안전 한계가 있는지 확인 할 수 있습니다.

최적화 방향

이 전략은 다음과 같은 몇 가지 측면에서 최적화 할 수 있습니다: 1) 이동 평균 주기를 최적화하여 다른 시장에 적합합니다. 2) 구매 조건을 최적화하여 충분한 마진을 보장합니다.

요약하다

이 전략은 전체적으로 트렌드 추적과 역전 거래 사상을 결합한 전형적인 전략이다. 거래 안전성을 보장하면서도 수익률을 높이는 전략이다. 강력한 실전 가치를 가지고 있다. 매개 변수 최적화 및 스톱 손실 전략 최적화를 통해 전략 안정성과 실전 효과를 더욱 강화할 수 있다.

전략 소스 코드
/*backtest
start: 2023-12-08 00:00:00
end: 2024-01-07 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Buy The Dips - MA200 Optimised", overlay=false)

//Moving average
MAinp = input(defval = 100, title = "MA", type = input.integer, minval = 1, step = 1)
MA=sma(close, MAinp)

//Percent change
inp_lkb = input(1, title='Lookback Period')
 
perc_change(lkb) =>
    overall_change = ((close[0] - close[lkb]) / close[lkb]) * 100

// Call the function    
overall = perc_change(inp_lkb)

// === INPUT BACKTEST RANGE ===
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2020, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true       // create function "within window of time"

//Entry/Exit
strategy.entry(id="long", long = true, when = window() and overall<-3 and close > MA) 
strategy.close(id="long", when = window() and overall>1)


bgcolor(color = showDate and window() ? color.gray : na, transp = 90) 
plot(overall, color=color.black, title='Overall Percentage Change', linewidth=3)
band1 = hline(1, "Upper Band", color=#C0C0C0)
band0 = hline(-2, "Lower Band", color=#C0C0C0)
fill(band1, band0, color=#9915FF, transp=90, title="Background")
hline(0, title='Center Line', color=color.orange, linestyle=hline.style_solid, linewidth=2)