파라볼 오실레이터 고점과 저점 찾기 전략


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

파라볼 오실레이터 고점과 저점 찾기 전략

개요

이 전략은 평균과 차원을 계산하여 가격의 추세와 변동성을 판단하고, 높은 점과 낮은 점의 식별을 가능하게 한다.

전략 원칙

이 전략의 핵심 논리는 최근 여러 주기들의 평균과 차원을 계산하는 것이다. 구체적으로, 최근 5일, 4일, 3일들의 평균 ((ma,mb,mc) 과 차원을 각각 계산한다. 그리고는 비교적으로 크다. 가장 큰 차원을 선택하는 하나의 주기들이 현재 트렌드를 나타낸다. 마지막으로, 트렌드를 나타내는 주기들의 평균을 그 차이의 제곱으로 곱하여 최종 출력된 곡선으로 삼는다.

이렇게 하면, 가격이 상향 또는 하향으로 돌파할 때, 트렌드를 나타내는 주기 및 차이는 큰 변화가 발생합니다. 따라서 최종 출력wg도 큰 변화가 생기고, 고점과 낮은 점을 식별 할 수 있습니다.

우위 분석

이 방식은 다양한 주기의 판단에 기반한 트렌드 변화의 사고방식이 효과가 있으며, 가격의 전환점을 명확하게 식별할 수 있다. 단일 주기의 판단에 비해 여러 주기의 이러한 조합 방식은 판단의 정확성과 시기적절성을 향상시킬 수 있다.

평균선과 사차를 계산하는 것도 매우 간단하고 효과적이며, 코드가 많지 않으며, 급격한 가격 변화에 매우 민감하여 돌파구를 빠르게 발견할 수 있다.

위험 분석

이 전략에서 사용되는 주기는 짧고, 중장선에 대해서는 판단이 정확하고 포괄적이지 않을 수 있다. 단기간에 가격 변동이 잘못된 판단을 초래할 수 있다.

또한, 평행선과 사각지대의 무게 설정도 판단 효과를 영향을 미치며, 무게 설정이 부적절하면 신호가 오차될 수 있다.

최적화 방향

더 많은 다른 주기들의 계산을 추가하여 주기 조합을 구성하여 판단을 더 포괄적으로 만들 수 있다. 예를 들어 10일, 20일 등 중장기기간의 판단을 추가한다.

또한 다른 무게 설정 프로그램을 실험하여 무게 설정의 유연성을 높일 수 있습니다. 마켓 환경에 따라 무게를 자동으로 조정할 수 있도록 파라미터 최적화를 추가하여 잘못된 판단의 가능성을 줄일 수 있습니다.

또한, 다른 지표들, 예를 들어 거래량 비정상성 등과 결합하여, 중매 거래에 대한 잘못된 판단을 피할 수 있다.

요약하다

이 전략의 전체적인 아이디어는 명확하고 이해하기 쉽고, 평균선과 차차를 사용하여 가격 경향과 변동성을 판단하고, 그 다음 포지션 출력이 높고 낮은 곡선을 명확하게 식별할 수 있다. 이 다주기 포지션 판단에 기반한 방법은 시장의 장기 단기 특성을 효과적으로 얻을 수 있으며, 전환점 판단의 정확성을 향상시킬 수 있다. 최적화 공간도 넓으며, 주기, 중량, 지표 등 여러 가지 측면에서 조정할 수 있어 전략이 더 안정적이고 포괄적이다.

전략 소스 코드
/*backtest
start: 2024-02-12 00:00:00
end: 2024-02-19 00:00:00
period: 12h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("x²", overlay=false)


a1=(close[2]-close[3])/1
a2=(close[1]-close[3])/4
a3=(close[0]-close[3])/9

b1=(close[3]-close[4])/1
b2=(close[2]-close[4])/4
b3=(close[1]-close[4])/9
b4=(close[0]-close[4])/16

c1=(close[4]-close[5])/1
c2=(close[3]-close[5])/4
c3=(close[2]-close[5])/9
c4=(close[1]-close[5])/16
c5=(close[0]-close[5])/25

ma=(a1+a2+a3)/3
da=(a1-ma)*(a1-ma)
da:=da+(a2-ma)*(a2-ma)
da:=da+(a3-ma)*(a3-ma)
da:=sqrt(da)
da:=min(2, da)
da:=1-da/2
da:=max(0.001, da)


mb=(b1+b2+b3+b4)/4
db=(b1-mb)*(b1-mb)
db:=db+(b2-mb)*(b2-mb)
db:=db+(b3-mb)*(b3-mb)
db:=db+(b4-mb)*(b4-mb)
db:=sqrt(db)
db:=min(2, db)
db:=1-db/2
db:=max(0.001, db)

mc=(c1+c2+c3+c4+c5)/5
dc=(c1-mc)*(c1-mc)
dc:=dc+(c2-mc)*(c2-mc)
dc:=dc+(c3-mc)*(c3-mc)
dc:=dc+(c4-mc)*(c4-mc)
dc:=dc+(c5-mc)*(c5-mc)
dc:=sqrt(dc)
dc:=min(2, dc)
dc:=1-dc/2
dc:=max(0.001, dc)



g=close
if(da>db and da>dc)
    g:=da*da*ma
else
    if(db > da and db > dc)
        g:=db*db*mb
    else
        g:=dc*dc*mc

wg=wma(g, 2)
plot(wg)
plot(0, color=black)


longCondition = true //crossover(sma(close, 14), sma(close, 28))
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = true //crossunder(sma(close, 14), sma(close, 28))
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)