쿼드라틱 피팅 트레이딩 신호 전략

저자:차오장, 날짜: 2023-09-23 15:40:57
태그:

전반적인 설명

이 전략은 평방 곡선을 바의 높고 낮은 지점으로 조정하여 가격이 부착 된 라인을 통과 할 때 거래 신호를 생성합니다. 브레이크오웃 거래를 위해 주요 지원 / 저항 수준을 수학적으로 식별하려고합니다.

전략 논리

주요 구성 요소와 규칙은 다음과 같습니다.

  1. 제곱 회귀를 이용한 높은/저한 지점에서의 곡선 부착

  2. 상단보다 더 가까이 갈 때 신호를 사

  3. 낮은 계단 아래로 닫을 때 신호를 팔자

  4. N 기간의 검증으로 잘못된 파열을 방지합니다.

  5. 고정된 출구 규칙이 없습니다. 백테스팅을 통해 출구를 최적화합니다.

이 전략은 주요 가격을 수학적으로 파악하고 브레이크아웃을 거래합니다. 전형적인 브레이크아웃 시스템입니다.

장점

다른 브레이크아웃 시스템과 비교하면 주요 장점은 다음과 같습니다.

  1. 수학적 적합성은 주관적인 판단보다 객관적입니다.

  2. 기술 분석과 통계 모델을 결합한 새로운 접근 방식

  3. 여러 기간 검증은 거짓 파열을 피합니다.

  4. 백테스팅은 출구와 대기 기간을 최적화 할 수 있습니다.

  5. 유연한 조정으로 구현하기 쉽습니다.

  6. 모델은 수동 개입 없이 자동으로 업데이트 됩니다.

  7. 제품과 시간 프레임에 걸쳐 매개 변수 견고성을 테스트 할 수 있습니다.

  8. 기계 학습을 통해 더 많은 최적화를 할 수 있는 잠재력

  9. 탐구적 가치의 전반적인 새로운 접근법.

위험성

그러나 위험은 다음과 같습니다.

  1. 부착 성능은 매개 변수 조정, 과부착 위험에 달려 있습니다.

  2. 설치된 라인은 지연되어 손실을 완전히 피할 수 없습니다.

  3. 부피 확인이 안 돼 갇힐 위험이 있어

  4. 통계적 중재는 지속성 알파에 도전입니다.

  5. 제한된 백테스트 기간, 견고성을 확인해야 합니다.

  6. 다중 시장 적응성은 검증을 필요로 합니다.

  7. 고정된 크기는 동적 조정이 부족합니다.

  8. 보상/위험 비율에 대한 엄격한 평가가 필요합니다.

개선

분석에 따라 개선은 다음을 포함 할 수 있습니다.

  1. 시장을 통한 매개 변수 안정성 테스트

  2. 부피 확인 표시를 추가합니다.

  3. 더 높은 품질의 신호를 위해 입력/출출 논리를 최적화합니다.

  4. 동적 위치 크기를 측정하는 모델을 만들어라

  5. 손실을 제한하기 위해 정지를 포함합니다.

  6. 위험 관리 전략을 최적화합니다.

  7. 롤링 윈도우 백테스트 검증

  8. 여러 시장의 안정성을 평가합니다.

  9. 모델 최적화를 위해 기계 학습을 활용합니다.

결론

요약하자면, 이 전략은 일부 혁신적 가치와 실험적 가치가 있습니다. 그러나 통계적 대리율의 장기적 타당성은 아직 입증되지 않았습니다. 견고성, 위험/상금에 대한 포괄적인 샘플 테스트는 과도한 적합성을 방지하고 적응력을 유지하는 데 중요합니다.


/*backtest
start: 2023-08-23 00:00:00
end: 2023-09-22 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

strategy(title = " Strategy Quadratic Semaphore ",
         shorttitle = "SQS",
         overlay = true,
         precision = 8,
         calc_on_order_fills = true,
         calc_on_every_tick = true,
         backtest_fill_limits_assumption = 0,
         default_qty_type = strategy.fixed,
         default_qty_value = 2,
         initial_capital = 10000,
         pyramiding=5,
         currency = currency.USD,
         linktoseries = true)

//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

backTestSectionFrom = input(title = "═══════════════ From ═══════════════", defval = true, type = input.bool)

FromMonth         = input(defval = 1, title = "Month", minval = 1)
FromDay           = input(defval = 1, title = "Day", minval = 1)
FromYear          = input(defval = 2019, title = "Year", minval = 2014)

backTestSectionTo = input(title = "════════════════ To ════════════════", defval = true, type = input.bool)
ToMonth           = input(defval = 31, title = "Month", minval = 1)
ToDay             = input(defval = 12, title = "Day", minval = 1)
ToYear            = input(defval = 9999, title = "Year", minval = 2014)

Config            = input(title = "══════════════ Config ══════════════", defval = true, type = input.bool)
p = input(6)
length = input(30)
//
backTestPeriod() => (time > timestamp(FromYear, FromMonth, FromDay, 00, 00)) and (time < timestamp(ToYear, ToMonth, ToDay, 23, 59))
//
//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

x1 = bar_index
x2 = sqrt(x1)
y = high
//
S11 = sum(x2,length) - sqrt(sum(x1,length)) / length  
S12 = sum(x1*x2,length) - (sum(x1,length) * sum(x2,length)) / length  
S22 = sum(sqrt(x2),length) - sqrt(sum(x2,length)) / length            
Sy1 = sum (y*x1,length) - (sum(y,length) * sum(x1,length)) / length   
Sy2 = sum (y*x2,length) - (sum(y,length) * sum(x2,length)) / length   
//
max1 = sma(x1,length) 
max2 = sma(x2,length)
may = sma(y,length)
b2 = ((Sy1 * S22) - (Sy2*S12))/(S22*S11 - sqrt(S12))
b3 = ((Sy2 * S11) - (Sy1 * S12))/(S22 * S11 - sqrt(S12))
b1 = may - b2*max1 - b3*max2
qr = b1 + b2*x1 + b3*x2
//
yl = low
//
Sy1l = sum(yl*x1,length) - (sum(yl,length) * sum(x1,length)) / length  
Sy2l = sum(yl*x2,length) - (sum(yl,length) * sum(x2,length)) / length  
//
mayl = sma(yl,length)
b2l = ((Sy1l * S22) - (Sy2l*S12))/(S22*S11 - sqrt(S12))
b3l = ((Sy2l * S11) - (Sy1l * S12))/(S22 * S11 - sqrt(S12))
b1l = mayl - b2l*max1 - b3l*max2
qrl = b1l + b2l*x1 + b3l*x2
//
period = round(p/2)+1
hh = qr[period]
ll = qrl[period]
countH = 0
countL = 0
buy=0
sell=0
//
for i = 1 to period-1
    if qr[i]<hh
        countH:=countH+1
    if qrl[i]>ll
        countL:=countL+1

for i = period+1 to p+1
    if qr[i]<hh
        countH:=countH+1
    if qrl[i]>ll
        countL:=countL+1

if countH==p
    pivotH = high[period]
    buy := 1
    
if countL==p
    pivotL = low[period]
    sell := 1
//    
plotshape(buy == 1 , text='💣', style=shape.arrowup, location=location.belowbar, color=#32CD32, textcolor=color.white, offset=0, transp=0,size=size.auto)
plotshape(sell == 1 , text='🔨', style=shape.arrowdown, location=location.abovebar, color=#FF0000, textcolor=color.white, offset=0, transp=0,size=size.auto)
//

if (backTestPeriod())
    strategy.entry("long", true, 1, when = buy == 1)
    strategy.entry("short", false, 1, when = sell == 1) 


더 많은