파이테르로 추정치에 기초한 거래 전략

저자:차오장날짜: 2023-09-22 14:12:27
태그:

전반적인 설명

이 전략은 Faytterro Estimator에 의해 생성된 거래 신호를 기반으로 거래합니다. Faytterro Estimator는 가격의 컨버전스 및 디버전스 비율을 계산하여 트렌드를 판단하는 지표입니다. 이 전략은 Faytterro Estimator의 거래 신호와 몇 가지 추가 조건을 결합하여 이상 지점에서 다양한 크기의 긴 및 짧은 신호를 생성합니다.

전략 논리

이 전략의 핵심은 Faytterro Estimator이다. 그 계산은: 먼저 가격의 컨버전스 및 디버전스 비율 (CR) 을 계산하고, 다른 계수를 설정함으로써 CR 곡선의 모양을 반영할 수 있는 제곱 함수를 구성한다. 제곱 곡선의 굴곡점을 관찰함으로써 가격 동향의 변화를 판단한다.

구체적으로, 전략은 먼저 가격의 CR를 계산한다. 그 다음에는 길이 2*len의 배열 dizi를 구성하고, 이차 함수 값으로 순차적으로 채웁니다. 이차 함수의 계수는 CR의 값을 반영합니다. 그 후, 인덱스 len+1+5 및 len+1+4에서 두 값을 관찰함으로써, 이차 함수가 굴절점이 있는지 여부를 결정합니다. 만약 굴절점이 있다면, 구매 또는 판매 신호를 생성합니다.

이 기반에서 전략은 또한 종종 거래를 피하기 위해 가격 돌파 사이의 최소 거리를 설정하는 것과 같은 몇 가지 추가 조건을 설정합니다. 다른 크기의 신호를 생성하는 등이 있습니다. 이러한 조건은 일부 바람직하지 않은 거래점을 필터링하는 데 사용됩니다.

이점 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 가격 변동에 민감하고 트렌드 변화를 조기에 파악할 수 있는 Faytterro Estimator를 사용하여 트렌드를 판단합니다.

  2. CR 곡선의 모양을 반영하는 제곱 함수를 만들고 직결적이고 효과적으로 굴곡점을 찾습니다.

  3. 다양한 크기의 신호를 생성하면 피라미드 트레이딩이 최적의 지점에서 가능하며 수익 잠재력이 증가합니다.

  4. 최소 거리를 설정하는 것은 신호를 효과적으로 필터링하고 비효율적인 빈번한 거래를 피합니다.

  5. 많은 조정 가능한 매개 변수를 다양한 거래 제품에 최적화하여 적응력을 향상시킬 수 있습니다.

  6. 전략 논리는 명확하고 이해하기 쉬우며 코드는 매우 가독성이 뛰어나서 쉽게 배울 수 있습니다.

위험 분석

이 전략에는 몇 가지 위험 요소가 있습니다.

  1. Faytterro Estimator는 곡선 부착의 위험이 있으며 일부 거래 상품에서 낮은 성과를 낼 수 있습니다.

  2. 제곱 곡선의 굴곡점만을 기준으로 판단하는 것은 너무 거칠고 잘못된 판단으로 이어질 수 있습니다.

  3. 피라미드 거래의 빈번한 경우 수수료가 증가합니다.

  4. 조정 가능한 많은 매개 변수가 최적화의 어려움을 증가시킵니다.

  5. 그것은 가격 변동 기간에 잘못된 판단을 효과적으로 처리 할 수 없습니다.

  6. 스톱 로스 메커니즘이 없으면 더 큰 손실이 발생할 수 있습니다.

이에 대응하는 해결책은 다음과 같습니다.

  1. 내구성을 높이기 위해 다양한 제품의 매개 변수를 최적화합니다.

  2. 필터레이션을 위한 다른 지표들을 추가하여 변점에만 의존하는 잘못된 판단을 피합니다.

  3. 단일 손실을 제어하기 위해 적절한 스톱 손실을 설정합니다.

  4. 대용량 데이터 방법을 사용하여 매개 변수를 자동으로 최적화합니다.

  5. 오스실레이션 식별을 추가하여 오스실레이션 기간에서의 거래를 피합니다.

  6. 합리적인 스톱 손실 논리를 설정합니다.

최적화 방향

최적화 방향은 다음과 같습니다.

  1. 단 하나의 손실을 제어하기 위해 스톱 손실 논리를 추가하십시오. 예를 들어 후속 스톱 손실 또는 시간 스톱 손실.

  2. 다른 지표를 추가하여 Faytterro Estimator에만 의존하는 잘못된 판단을 피합니다. 예를 들어 MACD, KDJ 등과 결합합니다.

  3. 단기적인 철수로 막히는 것을 피하기 위해 확인 메커니즘을 추가합니다. 재입국 확인을 고려하십시오.

  4. 유전자 알고리즘, 베이지안 최적화 등을 사용하여 다양한 제품에 대한 조정 가능한 매개 변수를 최적화합니다.

  5. ATR, DMI 등을 사용하여 오스실레이션 시장을 식별하고 오스실레이션 중에 거래를 피하십시오.

  6. 트렌드를 쫓는 것을 방지하기 위해 피라미드 논리를 최적화하십시오. 예를 들어 트렌드 강도에 따라 피라미드 위치를 동적으로 조정하십시오.

  7. 최적의 시간 프레임을 찾기 위해 다른 시간 프레임에서 매개 변수를 테스트합니다.

결론

이 전략은 Faytterro Estimator의 거래 신호를 기반으로 결정을 내리고, 그 위에 로직 판단과 다른 크기의 엔트리 신호를 추가하여 피라미드 특성을 가진 트렌드를 따르는 전략을 형성합니다. 이 전략은 직관적이고 이해하기 쉽습니다. 강력한 트렌드 포착 기능이 있습니다. 그러나 또한 지표 잘못된 판단, 스톱 손실, 매개 변수 최적화의 어려움과 같은 문제가 있습니다. 미래 최적화에 필터레이션 메커니즘, 스톱 손실 논리, 매개 변수 최적화 등을 추가하여 탄력성과 적응력을 향상시킵니다. 전반적으로이 전략은 트렌드 변화를 판단하는 지표를 사용하는 방법을 제공합니다.


/*backtest
start: 2022-09-21 00:00:00
end: 2023-08-10 00:00:00
period: 1d
basePeriod: 1h
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/
// © faytterro

//@version=5
// strategy("Faytterro Estimator Strategy", overlay=true, pyramiding=100)

src=input(hlc3,title="source")
len=input.int(10,title="faytterro estimator lenght", maxval=500)
len2=100
len3=input.float(500,title="minumum enrty-close gap (different direction)")
len4=input.float(500,title="minumum entry-entry gap (same direction)")
cr(x, y) =>
    z = 0.0
    weight = 0.0
    for i = 0 to y-1
        z:=z + x[i]*((y-1)/2+1-math.abs(i-(y-1)/2))
    z/(((y+1)/2)*(y+1)/2)
cr= cr(src,2*len-1) 
width=input.int(10, title="strong entry size", minval=1)

dizi = array.new_float(500)
// var line=array.new_line()
//if barstate.islast
for i=0 to len*2
    array.set(dizi,i,(i*(i-1)*(cr-2*cr[1]+cr[2])/2+i*(cr[1]-cr[2])+cr[2]))

buy = array.get(dizi,len+1+5)>array.get(dizi,len+1+4) and array.get(dizi,len+1+5)<cr[len] 
sell = array.get(dizi,len+1+5)<array.get(dizi,len+1+4) and array.get(dizi,len+1+5)>cr[len]
bb=buy? hlc3 : na
ss=sell? hlc3 : na 
sbuy= buy and close<(close[ta.barssince(buy or sell)])[1]-len4 and close<ta.highest(fixnan(ss),len2)-len3*3
ssell= sell and close>(close[ta.barssince(buy or sell)])[1]+len4 and close>ta.lowest(fixnan(bb),len2)+len3*3

buy:= buy and close<(close[ta.barssince(buy or sell)])[1]-len4 and close<ta.highest(fixnan(ss),len2)-len3 //and close>ta.highest(fixnan(ss),len2)-len3*3
sell:=  sell and close>(close[ta.barssince(buy or sell)])[1]+len4 and close>ta.lowest(fixnan(bb),len2)+len3 //and close<ta.lowest(fixnan(bb),len2)+len3*3
alertcondition(buy or sell)


if (sbuy)
    strategy.entry("strong buy", strategy.long,width)
if (ssell)
    strategy.entry("strong sell", strategy.short,width)
if (buy)
    strategy.entry("buy", strategy.long)
if (sell)
    strategy.entry("sell", strategy.short)

더 많은