이 전략은 K 라인의 최고 및 최저 가격의 변화를 사용하여 시장 오스실레이션의 방향과 강도를 판단하고, 이동 평균을 결합하여 단기 거래를 구현하기위한 전반적인 추세를 판단합니다. 그것은 주로 명백한 오스실레이션이있는 품종에 적합합니다.
이 전략은 먼저 이전 K 라인에 비해 K 라인의 가장 높고 가장 낮은 가격의 변화를 판단합니다. 가장 높은 가격이 상승하면 1로 기록됩니다. 가장 낮은 가격이 떨어지면 -1로 기록됩니다. 그렇지 않으면 0으로 기록됩니다. 그런 다음 특정 사이클 내에서 가장 높고 가장 낮은 가격의 변화의 평균 값을 계산하여 시장 변동의 방향과 강도를 판단합니다.
동시에, 전략은 가장 최근의 주기에 가장 높은 가격과 가장 낮은 가격을 기록합니다. 이동 평균이 트렌드 반전을 결정 할 때, 기록 된 가격과 결합하여 주요 가격 수준을 결정하여 스톱 손실 및 수익 수준을 형성합니다.
진입 방향은 이동 평균에 의해 결정됩니다. 상부 레일 위에 길게 이동하고 하부 레일 아래에 짧게 이동합니다. 중지 손실 및 수익 레벨은 주요 가격 수준을 판단하여 형성됩니다.
이 전략의 가장 큰 장점은 수익을 창출하기 위해 단기 변동의 특성을 최대한 활용하는 것입니다. 주요 가격 수준에 따라 스톱 로스 및 수익을 결정함으로써 전략은 명확한 규칙에 따라 실행됩니다. 동시에 불리한 시장을 필터링하고 불필요한 손실을 피하기 위해 트렌드 판단을 결합합니다.
이 전략에 직면한 주요 위험은 다음과 같습니다.
시장이 변동하지 않으면 수익이 없습니다.
스톱 로스 레벨을 넘어서게 되는 가격으로 인한 불필요한 손실입니다. 스톱 로스 범위는 적절하게 확장될 수 있습니다.
트렌드에 대한 잘못된 판단은 기회를 놓칠 수 있거나 반대 방향으로 작업을 수행 할 수 있습니다. 이동 평균 매개 변수는 그에 따라 조정 될 수 있습니다.
이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.
다른 품종의 특성에 적응하기 위해 이동 평균 주기를 조정하십시오.
수익과 손실을 균형을 맞추기 위해 스톱 이익 및 스톱 손실 범위를 최적화하십시오.
잘못된 동작을 피하기 위해 판단을 위한 다른 지표를 추가합니다.
최대 손실을 제어하기 위해 자동 스톱 손실을 추가합니다.
일반적으로, 이 전략은 단기 변동의 장점을 취하는 전략이다. 수익을 내기 위해 작은 가격 변동을 최대한 활용한다. 동시에, 트렌드가 불리할 때 위험을 엄격히 통제하고 적시에 손실을 줄인다. 상대적으로 신중한 태도로 안정적인 수익을 추구하는 투자자에게 적합하다. 적절한 매개 변수 조정으로 변동하는 시장에서 좋은 결과를 얻을 수 있다.
/*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()