
이 전략의 주요 아이디어는 가격이 지정된 주기 내의 최저값을 뚫었는지 검출하고, 뚫었다면 더 많이 하고, 가격이 평행선으로 돌아가는 것을 기다리는 것이다. 이것은 트렌드 추적 전략에 속한다.
이 전략은 파인 스크립트의 ta.lowest 방법을 호출하여 지정된 주기 내의 최저 가격을 lowestLow로 얻고, 이전 주기에서의 최저 가격 prevLow와 비교한다.
만약 최신 주기 최저값 (lowestLow) 이 이전 주기 최저값 (prevLow) 보다 낮다면, 더 많은 신호를 발산한다. 더 많은 신호를 발산한 후, 지정된 주기 내의 최고 가격 (highestHigh) 과 비교함으로써, 만약 최신 주기 최저값이 이전 주기 최저 가격보다 크다면, 평정한다.
이 전략은 트레이딩 주파수를 제어하기 위해 최소 가격이 1, 2, 3 또는 4 개의 이전 최저 가격을 연속으로 뚫어야하는 촉발 조건을 선택할 수 있습니다.
또한, 이 전략은 최저가 평균 (lowestLow) 과 최저가 평균 (highestHigh) 을 도표에 그려서 트렌드의 변화를 직관적으로 보여줍니다.
이 전략은 새로운 하락을 돌파한 후 반전하는 경향을 포착하여 높은 승률을 나타냅니다.
최소 가격을 넘을 수 있는 수를 선택하여 거래 빈도를 조절할 수 있다.
평균선을 그리는 것은 직관적으로 트렌드 변화점을 판단하는 데 도움이 됩니다.
전략의 논리는 간단하고 명확하며, 구현을 이해하기 쉽습니다.
다양한 주식과 시간 주기에서 최적화 테스트를 구성할 수 있다.
돌파구 가짜 돌파구 트렌드 반전 지점을 알 수 없으며 손실을 초래할 수 있습니다.
다양한 변수 조합을 테스트하여 최적화 설정을 수행해야 합니다. 그렇지 않으면 거래 빈도가 너무 높거나 너무 낮을 수 있습니다.
다른 주식들에 대해 파라미터를 조정할 필요가 있으며, 기계적 응용에는 적합하지 않다.
미흡한 회귀 시간 주기 때문에 전략이 잘 맞지 않을 수 있다.
파격 이후에는 가격이 다시 낮아질 수 있으며, 위험을 통제하기 위해 손실을 중지해야 합니다.
단독 손실을 통제하기 위해 이동 손실, 추적 손실과 같은 손실 제도를 추가하십시오.
브레이크 횟수를 최적화하고, 거래 빈도와 신호 품질을 균형 잡는다.
다른 주식과 시간 주기에서의 변수 최적화를 테스트한다.
필터링 조건을 추가하여 불안한 시장에서 거래하는 것을 피하십시오.
트렌드 지표를 추가하는 것을 고려하여 역전 거래를 피하십시오.
다양한 출구 출구 신호를 테스트한다.
이 전략은 최저 가격 돌파를 모니터링하여 반전 기회를 잡기 위해 전형적인 돌파 회귀 전략에 속한다. 장점은 간단하고 이해하기 쉽고 거래 빈도가 제어 가능하며, 여러 종류의 주식에서 적용할 수 있다. 그러나 또한 약간의 가짜 돌파 위험이 존재하며, 보조 조건을 추가하여 필터링 최적화를 수행해야하며, 위험을 제어하는 것은 매우 중요합니다.
/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 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/
// © merovinh
//@version=5
strategy(title="Merovinh - Mean Reversion Lowest low",
overlay = true,
default_qty_type = strategy.percent_of_equity,
initial_capital = 10000,
default_qty_value = 10,
commission_type = strategy.commission.percent,
slippage = 1,
commission_value = 0.04)
GR_TIME = 'Time Period'
bars = input(9, title = "Minimum number of bars", tooltip = "The minimum number of bars before updating lowest low / highest high")
numberOfLows = input.string(defval='One', title='Number of broken lows', options=['One', 'Two', 'Three', 'Four'])
//Period
var prevLow = .0
var prevHigh = .0
var prevLow2 = .0
var prevLow3 = .0
var prevLow4 = .0
truetime = true
highestHigh = ta.highest(high, bars)
lowestLow = ta.lowest(low, bars)
if numberOfLows == 'One'
if truetime and prevLow > 0 and lowestLow < prevLow
strategy.entry('long', strategy.long)
if numberOfLows == 'Two'
if truetime and prevLow > 0 and lowestLow < prevLow and prevLow < prevLow2
strategy.entry('long', strategy.long)
if numberOfLows == 'Three'
if truetime and prevLow > 0 and lowestLow < prevLow and prevLow < prevLow2 and prevLow2 < prevLow3
strategy.entry('long', strategy.long)
if numberOfLows == 'Four'
if truetime and prevLow > 0 and lowestLow < prevLow and prevLow < prevLow2 and prevLow2 < prevLow3 and prevLow3 < prevLow4
strategy.entry('long', strategy.long)
if truetime and prevHigh > 0 and highestHigh > prevHigh
strategy.close('long')
if prevLow != lowestLow
prevLow4 := prevLow3
prevLow3 := prevLow2
prevLow2 := prevLow
prevLow := lowestLow
prevHigh := highestHigh
plot(lowestLow, color=color.green, linewidth=1, title="Lowest Low Line")
plot(highestHigh, color=color.green, linewidth=1, title="Highest High Line")