이 전략은 윌리엄스 지표 프랙탈 브레이크아웃 원리를 채택하고 효율적인 긴 및 짧은 오픈 및 클로징 모델을 설계하기 위해 특정 K-라인 패턴을 결합합니다. 중장기 및 단기 트렌드를 포착하고 과도한 수익을 얻기 위해 시장 움직임의 주요 반전 지점에서 정확하게 길고 짧게 갈 수 있습니다.
이 전략은 반전 신호를 결정하기 위해 윌리엄스 지표의 프랙탈 포인트를 사용합니다. 상위 또는 하위 프랙탈이 나타나 K-라인 엔티티 방향과 일치하면 거래 신호가 생성됩니다.
구체적으로 WMX 윌리엄스 프랙탈이라는 사용자 지정 지표가 전략에 정의되어 있습니다. 그것은 상부 프랙탈 (upFractal) 과 하부 프랙탈 (dnFractal) 을 결정하기 위해 인수 함수를 사용합니다.
상위 프랙탈 논리는: 현재 K-라인의 가장 높은 가격은 이전 n K-라인의 가장 높은 가격보다 높습니다 (n는 조정 가능한 매개 변수입니다), 따라서 상위 측면 브레이크아웃 프랙탈을 형성합니다.
아래 프랙탈의 논리는: 현재 K-라인의 최저 가격은 이전 n K-라인의 최저 가격보다 낮으며, 따라서 아래쪽 브레이크아웃 프랙탈을 형성합니다.
상위와 하위 프랙탈을 얻은 후, 그것들은 변화하는지, 즉, 존재하지 않는 것에서 존재하는 것 또는 그 반대의지를 결정한다. 이 때 프랙탈은 방금 형성되었으므로, 역전될 가능성이 더 크다는 것을 나타낸다.
다음으로, 특정 거래 신호를 결정하기 위해 K-라인 엔티티 방향과 결합합니다. 상부 프랙탈이 형성되고 클로즈가 오픈보다 높을 때, 길게 이동합니다. 하부 프랙탈이 형성되고 클로즈가 오픈보다 낮을 때, 짧게 이동합니다.
반전 타이밍을 결정하기 위해 윌리엄스 지표 프랙탈 포인트를 사용하십시오. 그것은 성숙하고 신뢰할 수있는 기술 지표입니다.
거래 신호를 확인하고 트렌드가 아닌 불안정한 지역을 피하기 위해 K-라인 엔티티 방향을 결합하십시오.
프랙탈 주기 n만 조정해야 하는 몇 가지 매개 변수, 테스트하고 최적화하기 쉽습니다.
포지션 크기, 폐쇄 조건 등 포지션 개설 규칙에 대한 유연한 설정, 실시간 거래에서 쉽게 적용됩니다.
프랙탈 형태가 되면 시장이 완전히 뒤집어지지 않을 수도 있고, 트렌드 판단과 결합해야 합니다.
스톱 로스 포지션 설정은 큰 변동성 움직임에 의해 노크 아웃되는 것을 방지하기 위해 조심해야합니다.
n 매개 변수는 다른 제품에 맞게 조정되어야 합니다. 만약 기간이 너무 크거나 너무 작다면 결과에 영향을 줄 것입니다.
해결책:
주요 트렌드를 판단하기 위해 이동 평균과 같은 지표를 추가할 수 있습니다. 트렌드에 반하는 거래를 피합니다.
동적인 트래일링 스톱 로스를 사용하거나 합리적인 드라우다운 기반 스톱 로스를 설정합니다.
워크 포워드 분석을 사용하여 매개 변수를 최적화하고 최적의 값을 찾습니다.
프랙탈 역전 전략은 여러 가지 이익을 창출하고 손실을 창출하는 경향이 있습니다. 트렌드 필터를 추가하여 거래 범위를 제한하고 불필요한 역전 거래를 줄이는 것을 고려할 수 있습니다.
현재 간단한 스톱 로스 방법은 시장 움직임을 효과적으로 추적 할 수 없습니다. 이동 스톱 로스, 시간 기반 스톱 로스, 동적 스톱 로스 등과 같은 더 고급 스톱 로스 기술을 시도 할 수 있습니다.
현재는 K-라인 엔티티 방향만 사용합니다. 더 많은 K-라인 정보를 고려하면 매개와 가까운 위치와 같이 더욱 정확한 거래 신호를 설계 할 수 있습니다.
이것은 기술 지표에 기반한 반전 전략입니다. 그것은 윌리엄스 지표 프랙탈을 활용하여 주요 피브 포인트에서 기본 트렌드의 변화를 캡처하고, K-라인 엔티티 방향과 결합하여 거래 신호를 형성하여 초과 수익을 달성하는 것을 목표로합니다.
다른 역전 전략과 비교하면, 이 전략은 명확한 논리와 이해하기 쉬운 파라미터화 된 디자인을 갖추고 있습니다. 편리한 테스트를 위해 유연한 파라미터 조정을 가지고 있으며 라이브 거래에서 직접 적용 될 수 있습니다. 다음 단계로 트렌드 필터링, 스톱 로스 방법 등에 대한 추가 최적화는 전략 성능을 향상시킬 수 있습니다.
/*backtest start: 2023-11-14 00:00:00 end: 2023-12-14 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/ // © WMX_Q_System_Trading //@version=4 SystemName="WMX Williams Fractals strategy V4" InitCapital = 1000000 InitPosition = 100 InitCommission = 0.075 InitPyramidMax = 10 strategy(title=SystemName, shorttitle=SystemName, overlay=true, initial_capital=InitCapital, default_qty_type=strategy.percent_of_equity, default_qty_value=InitPosition, commission_type=strategy.commission.percent, commission_value=InitCommission) //study("WMX Williams Fractals", shorttitle="WMX Fractals", format=format.price, precision=0, overlay=true) // Define "n" as the number of periods and keep a minimum value of 2 for error handling. n = input(title="Periods", defval=2, minval=2, type=input.integer) h=close l=close factorh(High)=> upFractal = ( (High[n+2] < High[n]) and (High[n+1] < High[n]) and (High[n-1] < High[n]) and (High[n-2] < High[n])) or ( (High[n+3] < High[n]) and (High[n+2] < High[n]) and (High[n+1] == High[n]) and (High[n-1] < High[n]) and (High[n-2] < High[n])) or ( (High[n+4] < High[n]) and (High[n+3] < High[n]) and (High[n+2] == High[n]) and (High[n+1] <= High[n]) and (High[n-1] < High[n]) and (High[n-2] < High[n])) or ( (High[n+5] < High[n]) and (High[n+4] < High[n]) and (High[n+3] == High[n]) and (High[n+2] == High[n]) and (High[n+1] <= High[n]) and (High[n-1] < High[n]) and (High[n-2] < High[n])) or ((High[n+6] < High[n]) and (High[n+5] < High[n]) and (High[n+4] == High[n]) and (High[n+3] <= High[n]) and (High[n+2] == High[n]) and (High[n+1] <= High[n]) and (High[n-1] < High[n]) and (High[n-2] < High[n])) upFractal upFractal=factorh(h) factorl(Low)=> dnFractal = ( (Low[n+2] > Low[n]) and (Low[n+1] > Low[n]) and (Low[n-1] > Low[n]) and (Low[n-2] > Low[n])) or ( (Low[n+3] > Low[n]) and (Low[n+2] > Low[n]) and (Low[n+1] == Low[n]) and (Low[n-1] > Low[n]) and (Low[n-2] > Low[n])) or ( (Low[n+4] > Low[n]) and (Low[n+3] > Low[n]) and (Low[n+2] == Low[n]) and (Low[n+1] >= Low[n]) and (Low[n-1] > Low[n]) and (Low[n-2] > Low[n])) or ( (Low[n+5] > Low[n]) and (Low[n+4] > Low[n]) and (Low[n+3] == Low[n]) and (Low[n+2] == Low[n]) and (Low[n+1] >= Low[n]) and (Low[n-1] > Low[n]) and (Low[n-2] > Low[n])) or ((Low[n+6] > Low[n]) and (Low[n+5] > Low[n]) and (Low[n+4] == Low[n]) and (Low[n+3] >= Low[n]) and (Low[n+2] == Low[n]) and (Low[n+1] >= Low[n]) and (Low[n-1] > Low[n]) and (Low[n-2] > Low[n])) dnFractal=factorl(l) U=valuewhen(upFractal[0]!= upFractal[1],l[0],3) L=valuewhen(dnFractal[0]!=dnFractal[1],h[0],3) longcon=crossover(close ,L) and close>open shortcon=crossunder(close ,U) and close<open if longcon strategy.entry("Long", strategy.long, when = strategy.position_size <= 0 ) if shortcon strategy.entry("Short", strategy.short, when = strategy.position_size >= 0 )