진동 추적 단기 전략


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

진동 추적 단기 전략

개요

이 전략은 K 선의 최고 가격과 최저 가격의 변화를 사용하여 시장의 흔들림 방향과 강도를 판단하고, 평형 선과 결합하여 전체적인 추세를 판단하여 짧은 선의 작업을 수행한다. 주로 흔들림이 더 명백한 품종에 적용된다.

전략 원칙

이 전략은 먼저 K선의 최고 가격과 최저 가격의 이전 K선에 대한 변화를 판단하고, 최고 가격이 상승하면 1으로, 최저 가격이 떨어지면 1으로, 그렇지 않으면 0으로 기록한다. 그리고 특정 기간 동안 최고 가격과 최저 가격의 변화 평균을 각각 계산하여 시장의 흔들림 방향과 강도를 판단한다.

동시에 전략은 최근 주기 동안의 최고 가격과 최저 가격을 기록한다. 평균선이 트렌드 전환을 판단할 때, 기록된 가격과 결합하여 중요한 가격 지점을 판단하여 스톱로스 및 스톱 수준을 형성한다.

진입방향은 평평선 판단에 따라 상하의 상단에서 구매하고, 하하의 하단에서 판매한다. 스톱로스 및 스톱 레벨은 판단에 의해 핵심 가격대가 형성된다.

우위 분석

이 전략의 가장 큰 장점은 짧은 선의 충격적 특성을 최대한 활용하여 수익을 창출하는 데 있습니다. 핵심 가격대를 판단하여 스톱 로즈가 형성되어 전략이 명확한 규칙에 따라 작동하도록합니다. 동시에 추세를 판단하는 것과 결합하여 불리한 행동을 필터링하여 불필요한 손실을 방지합니다.

위험 분석

이 전략의 주요 위험은 다음과 같습니다.

  1. “무엇을 하든 상관없다.

  2. 가격이 스톱로스 지점을 넘어서 불필요한 손실을 초래한다. 스톱로스 범위를 적절히 완화할 수 있다.

  3. 추세를 잘못 판단하고, 흐름을 놓치거나 역작업을 할 수 있다. 평균선 변수를 적절히 조정할 수 있다.

최적화 방향

이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.

  1. 다양한 품종의 특성에 맞게 평균선 주기를 조정한다.

  2. 스톱 스톱 손실 범위를 최적화하여 이익과 손실을 균형 잡습니다.

  3. 다른 지표 판단을 추가하여 잘못된 조작을 방지하십시오.

  4. 자동 중지 손실을 증가시키고 최대 손실을 제어합니다.

요약하다

이 전략은 전반적으로 짧은 선의 흔들림 특성을 이용하는 전략이다. 가격의 작은 범위를 최대한 활용하여 이익을 얻는다. 동시에 위험을 엄격하게 통제하고, 추세가 좋지 않을 때 적시에 손실을 줄인다. 안정적인 수익을 추구하는보다 신중한 투자자에게 적합하다. 파라미터를 적절하게 조정하면, 흔들림 상황에서 좋은 효과를 얻을 수 있다.

전략 소스 코드
/*backtest
start: 2024-01-16 00:00:00
end: 2024-01-16 22:45:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy(title = "Noro's ZZ-3 Strategy", shorttitle = "ZZ-3 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, %")
corr = input(0.0, title = "Correction, %")
bars = input(1, minval = 1)
revers = input(false, defval = false, title = "revers")
showll = input(true, defval = true, title = "Show Levels")
showbg = input(false, defval = false, title = "Show Background")
showar = input(false, defval = false, title = "Show Arrows")
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")

//Levels
hbar = 0
hbar := high > high[1] ? 1 : high < high[1] ? -1 : 0
lbar = 0
lbar := low > low[1] ? 1 : low < low[1] ? -1 : 0
uplevel = 0.0
dnlevel = 0.0
hh = highest(high, bars + 1)
ll = lowest(low, bars + 1)
uplevel := hbar == -1 and sma(hbar, bars)[1] == 1 ? hh + ((hh / 100) * corr) : uplevel[1]
dnlevel := lbar == 1 and sma(lbar, bars)[1] == -1 ? ll - ((ll / 100) * corr) : dnlevel[1]

//Lines
upcol = na
upcol := showll == false ? na : uplevel != uplevel[1] ? na : lime
plot(uplevel, color = upcol, linewidth = 2)
dncol = na
dncol := showll == false ? na : dnlevel != dnlevel[1] ? na : red
plot(dnlevel, color = dncol, linewidth = 2)

//Background
size = strategy.position_size
trend = 0
trend := size > 0 ? 1 : size < 0 ? -1 : high >= uplevel ? 1 : low <= dnlevel ? -1 : trend[1]
col = showbg == false ? na : trend == 1 ? lime : trend == -1 ? red : na
bgcolor(col)

//Arrows
longsignal = false
shortsignal = false
longsignal := size > size[1]
shortsignal := size < size[1]
plotarrow(longsignal and showar and needlong ? 1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(shortsignal and showar and needshort ? -1 : na, colorup = blue, colordown = blue, transp = 0)

//Trading
lot = 0.0
lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1]
if uplevel > 0 and dnlevel > 0 and revers == false
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = uplevel, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = dnlevel, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if uplevel > 0 and dnlevel > 0 and revers == true
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, limit = dnlevel, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, limit = uplevel, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()