P-신호 반전 전략


생성 날짜: 2024-01-29 14:44:56 마지막으로 수정됨: 2024-01-29 14:44:56
복사: 0 클릭수: 663
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

P-신호 반전 전략

개요

P-신호 반전 전략은 통계적 변수와 오류 함수들로 구성된 확률 공간 신호의 정량화 거래 전략이다. K 선의 일련의 극한값 분포의 변수를 추적하여 거래 신호를 동적으로 획득하여 시장 반전점을 포착한다.

전략 원칙

이 전략의 핵심 지표는 P-신호이며, 이동 평균과 표준 차이의 통계적 파라미터를 결합하여 고스 오차 함수 (Gaussian error function) 로 -1에서 1 사이로 매핑하여 양적 판단 지표를 형성한다. P-신호는 긍정에서 부정으로 반전할 때 공백을 하고, 부정에서 긍정으로 반전할 때 더 많이 하고, 반전 전략 논리를 형성한다.

전략 파라미트는 Cardinality, ΔErf 및 관찰 시간 △ Cardinality는 샘플 수를 제어하고, ΔErf는 오류 함수의 죽은 영역을 제어하고, 거래 빈도를 감소시킵니다 △ 관찰 시간 △ 전략 시작 시간을 제어합니다.

우위 분석

P-신호 반전 전략의 가장 큰 장점은, 통계적 매개 변수의 확률 분포에 기초하여, 시장의 특징을 효과적으로 판단하고, 반전 기회를 잡을 수 있다는 것입니다. 단일 기술 지표에 비해, 그것은 더 많은 시장 정보를 결합하여, 판단이 더 포괄적이고 신뢰할 수 있습니다.

또한, 이 정책의 파라미터링 설계 규격은 사용자가 자신의 필요에 따라 파라미터 공간을 조정하여 최적의 조합을 찾을 수 있습니다. 이것은 정책의 적응성과 유연성을 보장합니다.

위험 분석

P-신호 반전 전략의 주요 위험은 확률 분포의 매개 변수에 너무 의존하여 비정상적인 데이터의 영향을 받아 잘못된 판단이 발생할 수 있다는 것입니다. 또한, 반전 전략의 손실 비율은 일반적으로 낮고 단당 수익은 제한적입니다.

Cardinality 파라미터를 높여 샘플을 늘려서 데이터 변칙의 영향을 줄일 수 있다. ΔErf 범위를 적절히 확대하고 거래 빈도를 낮추어 위험을 통제한다.

최적화 방향

P-신호 반전 전략은 다음과 같은 측면에서 최적화될 수 있다:

  1. 다른 지표와 결합하여 거래량 급증과 같은 특성을 필터링합니다.

  2. 여러 시간 프레임에 걸쳐 신호를 검증하여 판단의 안정성을 강화한다.

  3. 단독 손실을 줄이기 위해 손실을 막는 전략을 늘리십시오.

  4. 최적화 파라미터를 사용하여 최적의 조합을 찾아서 수익률을 높여라.

  5. 기계 학습과 함께 판단 파라미터를 동적으로 조정한다.

요약하다

P-신호 반전 전략은 기립 확률 분포를 구축하여 양적 거래 프레임워크를 구축하고, 변수 디자인은 유연하고, 사용자 친화적입니다. 이는 시장의 통계적 특성을 효과적으로 판단하고, 반전 기회를 포착합니다. 이 전략은 다중 지표 검증, 스톱 로즈 최적화 등의 방법으로 안정성과 수익성을 더욱 향상시킬 수 있습니다.

전략 소스 코드
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
// **********************************************************************************************************
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// P-Signal Strategy RVS © Kharevsky
// **********************************************************************************************************
strategy('P-Signal Strategy RVS.', precision=3, process_orders_on_close=true, pyramiding=0, 
     commission_type=strategy.commission.percent,
     commission_value=0.2)
// Parameters and const of P-Signal.
nPoints = input.int(title='Cardinality:', defval=4, minval=4, maxval=200, group='Parameters of strategy.')
ndErf = input.float(title='|ΔErf|:', defval=0, minval=0, maxval=1, step=0.01, group='Parameters of strategy.')
tStartDate = input(title='Start date:', defval=timestamp('30 Dec 1957 00:00 +0300'), group='Observation time.')
int nIntr = nPoints - 1
// Horner's method for the error (Gauss) & P-Signal functions.
fErf(x) =>
    nT = 1.0 / (1.0 + 0.5 * math.abs(x))
    nAns = 1.0 - nT * math.exp(-x * x - 1.26551223 + 
     nT * (1.00002368 + nT * (0.37409196 + nT * (0.09678418 + 
     nT * (-0.18628806 + nT * (0.27886807 + nT * (-1.13520398 + 
     nT * (1.48851587 + nT * (-0.82215223 + nT * 0.17087277)))))))))
    x >= 0 ? nAns : -nAns
fPSignal(ser, int) =>
    nStDev = ta.stdev(ser, int)
    nSma = ta.sma(ser, int)
    nStDev > 0 ? fErf(nSma / nStDev / math.sqrt(2)) : math.sign(nSma)
// Data.
float nPSignal = ta.sma(fPSignal(ta.change(ohlc4), nIntr), nIntr)
float ndPSignal = math.sign(nPSignal[0] - nPSignal[1])
bool isStartDate = true
// Reversal Strategy.
strategy.entry('short', strategy.short, when=isStartDate and nPSignal > ndErf and ndPSignal < 0)
strategy.entry('long', strategy.long, when=isStartDate and nPSignal < -ndErf and ndPSignal > 0)
// Plotting. 
hline(+1.0, color=color.new(color.orange, 70), linestyle=hline.style_dotted, editable=false)
hline(-1.0, color=color.new(color.orange, 70), linestyle=hline.style_dotted, editable=false)
hline(-ndErf, color=color.new(color.orange, 70), linestyle=hline.style_dotted, editable=false)
hline(ndErf, color=color.new(color.orange, 70), linestyle=hline.style_dotted, editable=false)
plot(nPSignal, color=color.new(color.blue, 0), style=plot.style_line)
// Table of state.
if barstate.isconfirmed
    var Table = table.new(position=position.bottom_right, columns=3, rows=1, 
     frame_color=color.new(color.orange, 70), frame_width=1, 
     border_color=color.new(color.orange, 70), border_width=1)
    table.cell(table_id=Table, column=0, row=0, 
     text=strategy.position_size > 0 ? 'Long: ' + str.tostring(strategy.position_size) : 'Short: ' + str.tostring(strategy.position_size), 
     text_color=strategy.position_size > 0 ? color.green : color.red)
    table.cell(table_id=Table, column=1, row=0, 
     text='Net P/L: ' + str.tostring(strategy.netprofit, '#.#'), 
     text_color=strategy.netprofit > 0 ? color.green : color.red)
    table.cell(table_id=Table, column=2, row=0, 
     text='Open P/L: ' + str.tostring(strategy.openprofit, '#.#'), 
     text_color=strategy.openprofit > 0 ? color.green : color.red)
// The end.