이동평균 격차 전략

저자:차오장, 날짜: 2024-01-24 11:43:41
태그:

img

전반적인 설명

이 전략은 가격과 이동 평균 라인 사이의 차이를 감지하고 구매 및 판매 신호로 사용합니다. 이 차이점을 찾기 위해 모든 오시레이터에 적용 할 수 있습니다. 이것은 백테스팅 및 라이브 트레이딩에 사용할 수있는 귀중한 도구입니다.

전략 논리

  1. 길이의 이동 평균 (MA) 을 계산합니다.
  2. MA의 주축 낮은 점 (PL) 및 주축 높은 점 (PH) 을 탐지합니다.
  3. 상승성 오차를 확인합니다: 가격은 새로운 낮은 수준이지만 MA는 그렇지 않습니다. 또는 MA는 새로운 낮은 수준이지만 가격은 그렇지 않습니다.
  4. 하향적 오차 확인: 가격이 새로운 최고치를 만들지만 MA는 그렇지 않거나 MA는 새로운 최고치를 만들지만 가격은 그렇지 않습니다
  5. 분산 기준으로 구매 및 판매

이점 분석

  1. 가격과 MA 사이의 차이를 자동으로 감지하고 수동 판단 오류를 피합니다.
  2. 모든 오시일레이터에 적용되며, 강한 확장성
  3. 수익성을 확인하고 검증하는 데 사용할 수 있습니다.
  4. 민감도를 조정하고 잘못된 신호를 피하기 위해 구성 가능한 매개 변수
  5. 정확하고 포괄적인 판단을 위해 여러 가지 오차 유형을 제공

위험 분석

  1. 유효하지 않은 오시레이터 설정은 과도한 잘못된 신호를 생성 할 수 있습니다.
  2. 오차가 발생하기 전에 유효한 회전점이 필요합니다, 신호가 충분하지 않을 수 있습니다.
  3. 민감도를 균형을 맞추고 잘못된 신호를 필터하기 위해 매개 변수를 조정해야 합니다.
  4. 다른 요소와 결합하면 더 잘 작동합니다. 단독으로 사용하면 신뢰도가 상대적으로 낮습니다.

최적화 방향

  1. 가장 좋은 매개 변수 조합을 찾기 위해 MA 매개 변수를 최적화
  2. 잘못된 신호를 피하기 위해 볼륨과 같은 다른 지표와 결합
  3. 분산 신뢰성을 판단하기 위해 기계 학습 모델을 추가
  4. 거래당 손실을 통제하는 데 리스크 관리 메커니즘을 추가합니다.

요약

이 전략은 주관적 오류를 피하기 위해 가격과 MA 사이의 오차를 자동 판정을위한 거래 신호로 사용합니다. 강력한 확장성을 가진 모든 오시레이터에 광범위하게 적용 할 수 있습니다. 신호 신뢰성 및 시스템 안정성을 크게 향상시키기 위해 매개 변수 최적화 및 다른 지표와 함께 사용이 필요합니다.


/*backtest
start: 2023-12-24 00:00:00
end: 2024-01-12 00:00:00
period: 1h
basePeriod: 15m
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/
// © tista 
//https://www.tradingview.com/u/tista/#published-scripts

//@version=4

strategy(title="MA Divergences", format=format.price)

//* Backtesting Period Selector | Component *//
//* https://www.tradingview.com/script/eCC1cvxQ-Backtesting-Period-Selector-Component *//
//* https://www.tradingview.com/u/pbergden/ *//
//* Modifications made *//
testStartYear = input(2021, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(999999, "Backtest Stop Year")
testStopMonth = input(9, "Backtest Stop Month")
testStopDay = input(26, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() => true
/////////////// END - Backtesting Period Selector | Component ///////////////
len = input(title="MA Period", minval=1, defval=14)
src = input(title="MA Source", defval=close)
lbR = input(title="Pivot Lookback Right", defval=5)
lbL = input(title="Pivot Lookback Left", defval=5)
rangeUpper = input(title="Max of Lookback Range", defval=600)
rangeLower = input(title="Min of Lookback Range", defval=2)
plotBull = input(title="Plot Bullish", defval=true)
plotHiddenBull = input(title="Plot Hidden Bullish", defval=true)
plotBear = input(title="Plot Bearish", defval=true)
plotHiddenBear = input(title="Plot Hidden Bearish", defval=true)

bearColor = color.red
bullColor = color.green
hiddenBullColor = color.green
hiddenBearColor = color.red
textColor = color.white
noneColor = color.new(color.white, 100)

osc = wma(src, len)

plot(osc, title="MA", linewidth=2, color=color.yellow)

plFound = na(pivotlow(osc, lbL, lbR)) ? false : true
phFound = na(pivothigh(osc, lbL, lbR)) ? false : true

_inRange(cond) =>
    bars = barssince(cond == true)
    rangeLower <= bars and bars <= rangeUpper

alertcondition(osc[1] > 100.0 and osc[2] < 100.0, title="MA value crosses over 100.0", message="Check charts for a MA cross over 100.0")
alertcondition(osc[1] < 100.0 and osc[2] > 100.0, title="MA value crosses under 100.0", message="Check charts for a MA cross under 100.0")
alertcondition(osc[1] > -100. and osc[2] < -100.0, title="MA value crosses over -100.0", message="Check charts for a MA cross over -100.0")
alertcondition(osc[1] < -100.0 and osc[2] > -100.0, title="MA value crosses under -100.0", message="Check charts for a MA cross under -100.0")

//------------------------------------------------------------------------------
// Regular Bullish

// Osc: Higher Low
oscHL = osc[lbR] > valuewhen(plFound, osc[lbR], 1) and _inRange(plFound[1])

// Price: Lower Low
priceLL = low[lbR] < valuewhen(plFound, low[lbR], 1)

bullCond = plotBull and priceLL and oscHL and plFound

plot(
	 plFound ? osc[lbR] : na,
	 offset=-lbR,
	 title="Regular Bullish",
	 linewidth=2,
	 color=(bullCond ? bullColor : noneColor),
	 transp=0
	 )

plotshape(
	 bullCond ? osc[lbR] : na,
	 offset=-lbR,
	 title="Regular Bullish Label",
	 text=" Bull ",
	 style=shape.labelup,
	 location=location.absolute,
	 color=bullColor,
	 textcolor=textColor,
	 transp=0
	 )

alertcondition(bullCond, title="Regular bullish divergence in MA found", message="Check charts for a regular bullish divergence found with MA")

//------------------------------------------------------------------------------
// Hidden Bullish

// Osc: Lower Low
oscLL = osc[lbR] < valuewhen(plFound, osc[lbR], 1) and _inRange(plFound[1])

// Price: Higher Low
priceHL = low[lbR] > valuewhen(plFound, low[lbR], 1)

hiddenBullCond = plotHiddenBull and priceHL and oscLL and plFound

plot(
	 plFound ? osc[lbR] : na,
	 offset=-lbR,
	 title="Hidden Bullish",
	 linewidth=2,
	 color=(hiddenBullCond ? hiddenBullColor : noneColor),
	 transp=0
	 )

plotshape(
	 hiddenBullCond ? osc[lbR] : na,
	 offset=-lbR,
	 title="Hidden Bullish Label",
	 text=" H Bull ",
	 style=shape.labelup,
	 location=location.absolute,
	 color=bullColor,
	 textcolor=textColor,
	 transp=0
	 )

alertcondition(hiddenBullCond, title="Hidden bullish divergence in MA found", message="Check charts for a hidden bullish divergence found with MA")

//------------------------------------------------------------------------------
// Regular Bearish

// Osc: Lower High
oscLH = osc[lbR] < valuewhen(phFound, osc[lbR], 1) and _inRange(phFound[1])

// Price: Higher High
priceHH = high[lbR] > valuewhen(phFound, high[lbR], 1)

bearCond = plotBear and priceHH and oscLH and phFound

plot(
	 phFound ? osc[lbR] : na,
	 offset=-lbR,
	 title="Regular Bearish",
	 linewidth=2,
	 color=(bearCond ? bearColor : noneColor),
	 transp=0
	 )

plotshape(
	 bearCond ? osc[lbR] : na,
	 offset=-lbR,
	 title="Regular Bearish Label",
	 text=" Bear ",
	 style=shape.labeldown,
	 location=location.absolute,
	 color=bearColor,
	 textcolor=textColor,
	 transp=0
	 )

alertcondition(bearCond, title="Regular bearish divergence in MA found", message="Check charts for a regular bearish divergence found with MA")

//------------------------------------------------------------------------------
// Hidden Bearish

// Osc: Higher High
oscHH = osc[lbR] > valuewhen(phFound, osc[lbR], 1) and _inRange(phFound[1])

// Price: Lower High
priceLH = high[lbR] < valuewhen(phFound, high[lbR], 1)

hiddenBearCond = plotHiddenBear and priceLH and oscHH and phFound

plot(
	 phFound ? osc[lbR] : na,
	 offset=-lbR,
	 title="Hidden Bearish",
	 linewidth=2,
	 color=(hiddenBearCond ? hiddenBearColor : noneColor),
	 transp=0
	 )

plotshape(
	 hiddenBearCond ? osc[lbR] : na,
	 offset=-lbR,
	 title="Hidden Bearish Label",
	 text=" H Bear ",
	 style=shape.labeldown,
	 location=location.absolute,
	 color=bearColor,
	 textcolor=textColor,
	 transp=0
	 )

// Alerts
//alertcondition(bearCond or hiddenBearCond, title='Bear div', message='Bear div')
//alertcondition(bullCond or hiddenBullCond, title='Bull div', message='Bull div')
//alertcondition(bearCond or bullCond, title='Bull or beal div', message='Bull or bear div') 
//alertcondition(hiddenBearCond or hiddenBullCond, title='Bull or beal div', message='Hidden Bull or bear div') 
//alertcondition(hiddenBearCond or hiddenBullCond or bearCond or bullCond, title='Bull or beal div', message='Any Bull or bear div') 

if testPeriod()
    if bullCond or hiddenBullCond
        strategy.entry("Buy", strategy.long)
    if bearCond or hiddenBearCond
        strategy.entry("Sell", strategy.short)

더 많은