이 전략의 주요 아이디어는 가격이 특정 기간 동안 가장 낮은 가격을 뚫고 나가고 가격이 평균으로 돌아가는 것을 기다리는 것을 감지하는 것입니다. 트렌드 다음 전략에 속합니다.
이 전략은 피인 스크립트 (Pine Script) 의 ta.lowest 방법을 사용하여 지정된 기간의 최저 가격을 얻으며 이전 기간의 최저 가격과 비교합니다.
최신 기간의 최저 가격 최저Low가 이전 기간의 최저 가격 prevLow보다 낮으면 긴 신호가 트리거됩니다. 긴 시나리오가 끝나면 지정된 기간의 가장 높은 가격 highestHigh과 비교됩니다. 최신 기간의 가장 높은 가격이 이전 최고 가격보다 높으면 포지션을 닫습니다.
이 전략은 트레이딩 빈도를 제어하기 위해 가장 낮은 가격으로 1, 2, 3 또는 4 개의 이전 최저 가격을 연속적으로 돌파해야 하는 트리거 조건을 선택할 수 있습니다.
또한 차트에서 가장 낮은 가격 라인을 가장 낮고 가장 높은 가격 라인을 가장 높게 표시하여 트렌드 변화를 시각적으로 표시합니다.
이 전략은 상대적으로 높은 승률을 가진 새로운 최저치를 깨고 트렌드 반전을 잡습니다.
거래 주파수를 제어하기 위해 최저 가격의 수를 선택할 수 있습니다.
선을 그리는 것은 트렌드 변화 지점을 시각적으로 결정하는 데 도움이 됩니다.
간단하고 명확한 전략 논리, 이해하기 쉽고 실행하기 쉽습니다.
다양한 주식과 기간에 구성 및 최적화 할 수 있습니다.
잘못된 바닥을 깨는 것은 트렌드 반전점을 결정할 수 없으며 손실로 이어질 수 있습니다.
다양한 매개 변수 조합을 테스트하여 구성을 최적화해야 합니다. 그렇지 않으면 거래 빈도가 너무 높거나 너무 낮을 수 있습니다.
매개 변수들은 서로 다른 주식에 맞게 조정되어야 하며 기계적으로 적용되어서는 안 됩니다.
적당한 백테스트 기간이 지나치게 부착될 수 있습니다.
가격이 폭락 후 새로운 최저치를 올릴 수 있습니다. 위험을 통제하기 위해 손해를 멈추어야 합니다.
트레이드당 손실을 제한하기 위해 이동 스톱 손실, 후속 스톱 손실과 같은 스톱 손실 메커니즘을 추가합니다.
거래 빈도와 신호 품질을 균형을 맞추기 위해 브레이크의 수를 최적화합니다.
다른 주류와 시간대에 대한 테스트 매개 변수
다양한 시장에서 자주 거래하는 것을 피하기 위해 필터를 추가하십시오.
트렌드 상거래를 피하기 위해 트렌드 지표를 추가하는 것을 고려하십시오.
다른 출구 신호를 테스트해
이 전략은 전형적인 평균회전 브레이크아웃 전략인 최저 가격 브레이크아웃을 모니터링함으로써 역전 기회를 잡습니다. 이의 장점은 단순성, 제어 가능한 주파수 및 다양한 주식에 적용 가능성입니다. 그러나 일부 잘못된 브레이크아웃 위험도 있습니다. 필터와 최적화를 추가하고 위험을 제어하는 것이 필요합니다. 포괄적 인 테스트 및 최적화로 안정적이고 신뢰할 수있는 거래 시스템이 될 수 있습니다.
/*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")